diff --git a/src/apps/webpositive/SettingsWindow.cpp b/src/apps/webpositive/SettingsWindow.cpp index 51e578dcc7..0e283c33d1 100644 --- a/src/apps/webpositive/SettingsWindow.cpp +++ b/src/apps/webpositive/SettingsWindow.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -70,6 +71,9 @@ enum { MSG_USE_PROXY_AUTH_CHANGED = 'upsa', MSG_PROXY_USERNAME_CHANGED = 'psuc', MSG_PROXY_PASSWORD_CHANGED = 'pswc', + + MSG_CHOOSE_DOWNLOAD_FOLDER = 'swop', + MSG_HANDLE_DOWNLOAD_FOLDER = 'oprs', }; static const int32 kDefaultFontSize = 14; @@ -88,6 +92,8 @@ SettingsWindow::SettingsWindow(BRect frame, SettingsMessage* settings) fRevertButton = new BButton(B_TRANSLATE("Revert"), new BMessage(MSG_REVERT)); + fOpenFilePanel = NULL; + float spacing = be_control_look->DefaultItemSpacing(); BTabView* tabView = new BTabView("settings pages", B_WIDTH_FROM_LABEL); @@ -144,6 +150,7 @@ SettingsWindow::~SettingsWindow() delete fSansSerifFontView; RemoveHandler(fFixedFontView); delete fFixedFontView; + delete fOpenFilePanel; } @@ -161,7 +168,12 @@ SettingsWindow::MessageReceived(BMessage* message) case MSG_REVERT: _RevertSettings(); break; - + case MSG_CHOOSE_DOWNLOAD_FOLDER: + _ChooseDownloadFolder(message); + break; + case MSG_HANDLE_DOWNLOAD_FOLDER: + _HandleDownloadPanelResult(fOpenFilePanel, message); + break; case MSG_STANDARD_FONT_SIZE_SELECTED: { int32 size = _SizesMenuValue(fStandardSizesMenu->Menu()); @@ -286,6 +298,8 @@ SettingsWindow::_CreateGeneralPage(float spacing) fNewTabBehaviorOpenBlankItem = new BMenuItem( B_TRANSLATE("Open blank page"), new BMessage(MSG_NEW_TABS_BEHAVIOR_CHANGED)); + fChooseButton = new BButton(B_TRANSLATE("Browse" B_UTF8_ELLIPSIS), + new BMessage(MSG_CHOOSE_DOWNLOAD_FOLDER)); fNewWindowBehaviorOpenHomeItem->SetMarked(true); fNewTabBehaviorOpenBlankItem->SetMarked(true); @@ -340,11 +354,12 @@ SettingsWindow::_CreateGeneralPage(float spacing) .Add(fSearchPageControl->CreateLabelLayoutItem(), 0, 1) .Add(fSearchPageControl->CreateTextViewLayoutItem(), 1, 1) - .Add(fDownloadFolderControl->CreateLabelLayoutItem(), 0, 2) - .Add(fDownloadFolderControl->CreateTextViewLayoutItem(), 1, 2) + .Add(fNewWindowBehaviorMenu->CreateLabelLayoutItem(), 0, 2) + .Add(fNewWindowBehaviorMenu->CreateMenuBarLayoutItem(), 1, 2) - .Add(fNewWindowBehaviorMenu->CreateLabelLayoutItem(), 0, 3) - .Add(fNewWindowBehaviorMenu->CreateMenuBarLayoutItem(), 1, 3) + .Add(fDownloadFolderControl->CreateLabelLayoutItem(), 0, 3) + .Add(fDownloadFolderControl->CreateTextViewLayoutItem(), 1, 3) + .Add(fChooseButton, 2, 3) .Add(fNewTabBehaviorMenu->CreateLabelLayoutItem(), 0, 4) .Add(fNewTabBehaviorMenu->CreateMenuBarLayoutItem(), 1, 4) @@ -794,6 +809,33 @@ SettingsWindow::_RevertSettings() } +void +SettingsWindow::_ChooseDownloadFolder(const BMessage* message) +{ + if (fOpenFilePanel == NULL) { + BMessenger target(this); + fOpenFilePanel = new (std::nothrow) BFilePanel(B_OPEN_PANEL, + &target, NULL, B_DIRECTORY_NODE); + } + BMessage panelMessage(MSG_HANDLE_DOWNLOAD_FOLDER); + fOpenFilePanel->SetMessage(&panelMessage); + fOpenFilePanel->Show(); +} + + +void +SettingsWindow:: _HandleDownloadPanelResult(BFilePanel* panel, + const BMessage* message) +{ + entry_ref ref; + if (message->FindRef("refs", 0, &ref) == B_OK) + { + BPath path(&ref); + fDownloadFolderControl->SetText(path.Path()); + } +} + + void SettingsWindow::_ValidateControlsEnabledStatus() { diff --git a/src/apps/webpositive/SettingsWindow.h b/src/apps/webpositive/SettingsWindow.h index 4511c5a33e..7595b4925a 100644 --- a/src/apps/webpositive/SettingsWindow.h +++ b/src/apps/webpositive/SettingsWindow.h @@ -8,6 +8,7 @@ #include + class BButton; class BCheckBox; class BMenu; @@ -17,6 +18,7 @@ class BSpinner; class BTextControl; class FontSelectionView; class SettingsMessage; +class BFilePanel; class SettingsWindow : public BWindow { @@ -43,6 +45,10 @@ private: bool _CanApplySettings() const; void _ApplySettings(); void _RevertSettings(); + void _ChooseDownloadFolder(const BMessage* message); + + void _HandleDownloadPanelResult(BFilePanel* panel, + const BMessage* message); void _ValidateControlsEnabledStatus(); uint32 _NewWindowPolicy() const; @@ -94,9 +100,12 @@ private: BButton* fApplyButton; BButton* fCancelButton; BButton* fRevertButton; + BButton* fChooseButton; BMenuField* fStandardSizesMenu; BMenuField* fFixedSizesMenu; + + BFilePanel* fOpenFilePanel; };