From ba7d3b37f9a7850086826bef843fdf0183a6a9aa Mon Sep 17 00:00:00 2001 From: Wim van der Meer Date: Fri, 2 Jul 2010 08:38:00 +0000 Subject: [PATCH] Adding a settings button to change translator settings, refer to ticket #3813 git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37335 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/apps/screenshot/ScreenshotWindow.cpp | 63 +++++++++++++++++++++++- src/apps/screenshot/ScreenshotWindow.h | 1 + 2 files changed, 63 insertions(+), 1 deletion(-) diff --git a/src/apps/screenshot/ScreenshotWindow.cpp b/src/apps/screenshot/ScreenshotWindow.cpp index cbe91c5a30..e7eb221227 100644 --- a/src/apps/screenshot/ScreenshotWindow.cpp +++ b/src/apps/screenshot/ScreenshotWindow.cpp @@ -37,6 +37,7 @@ #include #include #include +#include #include "PreviewView.h" #include "Utility.h" @@ -50,7 +51,8 @@ enum { kImageFormat, kLocationChanged, kChooseLocation, - kSaveScreenshot + kSaveScreenshot, + kSettings }; @@ -158,6 +160,8 @@ ScreenshotWindow::ScreenshotWindow(const Utility& utility, bool silent, .Add(fNameControl->CreateTextViewLayoutItem(), 1, 0) .Add(menuField->CreateLabelLayoutItem(), 0, 1) .Add(menuField->CreateMenuBarLayoutItem(), 1, 1) + .Add(new BButton("", B_TRANSLATE("Settings"B_UTF8_ELLIPSIS), + new BMessage(kSettings)), 2, 1) .Add(menuField2->CreateLabelLayoutItem(), 0, 2) .Add(menuField2->CreateMenuBarLayoutItem(), 1, 2); gridLayout->SetMinColumnWidth(1, @@ -302,6 +306,10 @@ ScreenshotWindow::MessageReceived(BMessage* message) case B_COPY: fUtility.CopyToClipboard(fScreenshot); break; + + case kSettings: + _ShowSettings(); + break; default: BWindow::MessageReceived(message); @@ -319,6 +327,9 @@ ScreenshotWindow::Quit() } +// #pragma - private + + void ScreenshotWindow::_NewScreenshot(bool silent, bool clipboard) { @@ -543,6 +554,56 @@ ScreenshotWindow::_SaveScreenshot() } +void +ScreenshotWindow::_ShowSettings() +{ + // Find a translator + translator_id translator = 0; + BTranslatorRoster *roster = BTranslatorRoster::Default(); + translator_id* translators = NULL; + int32 numTranslators = 0; + if (roster->GetAllTranslators(&translators, &numTranslators) != B_OK) + return; + bool foundTranslator = false; + for (int32 x = 0; x < numTranslators; x++) { + const translation_format* formats = NULL; + int32 numFormats; + if (roster->GetOutputFormats(translators[x], &formats, &numFormats) == B_OK) { + for (int32 i = 0; i < numFormats; ++i) { + if (formats[i].type == static_cast(fImageFileType)) { + translator = translators[x]; + foundTranslator = true; + break; + } + } + } + if (foundTranslator) + break; + } + delete [] translators; + if (!foundTranslator) + return; + + // Create a window with a configuration view + BView *view; + BRect rect(0, 0, 239, 239); + + status_t err = roster->MakeConfigurationView(translator, NULL, &view, + &rect); + if (err < B_OK || view == NULL) { + BAlert *alert = new BAlert(NULL, strerror(err), "OK"); + alert->Go(); + } else { + BWindow* window = new BWindow(rect, "Translator Settings", + B_TITLED_WINDOW_LOOK, B_NORMAL_WINDOW_FEEL, + B_NOT_ZOOMABLE | B_NOT_RESIZABLE); + window->AddChild(view); + window->CenterOnScreen(); + window->Show(); + } +} + + BString ScreenshotWindow::_FindValidFileName(const char* name) { diff --git a/src/apps/screenshot/ScreenshotWindow.h b/src/apps/screenshot/ScreenshotWindow.h index 8e739c3060..af815965da 100644 --- a/src/apps/screenshot/ScreenshotWindow.h +++ b/src/apps/screenshot/ScreenshotWindow.h @@ -50,6 +50,7 @@ private: void _UpdateFilenameSelection(); void _SetupTranslatorMenu(); status_t _SaveScreenshot(); + void _ShowSettings(); BString _FindValidFileName(const char* name); BPath _GetDirectory(); void _ReadSettings();