From fe855cd5504348c7c0b688ff64c7930ca2cc78b2 Mon Sep 17 00:00:00 2001 From: Ryan Leavengood Date: Sun, 2 Sep 2012 15:14:50 -0400 Subject: [PATCH] Appearance preflet: Add a double scrollbar arrows setting. Rename the 'Decorators' tab to 'Look and feel'. Fixes #8926. --- src/preferences/appearance/APRWindow.cpp | 2 +- .../appearance/DecorSettingsView.cpp | 64 +++++++++++++++++-- .../appearance/DecorSettingsView.h | 5 ++ 3 files changed, 64 insertions(+), 7 deletions(-) diff --git a/src/preferences/appearance/APRWindow.cpp b/src/preferences/appearance/APRWindow.cpp index 6006482164..1244cabbf4 100644 --- a/src/preferences/appearance/APRWindow.cpp +++ b/src/preferences/appearance/APRWindow.cpp @@ -55,7 +55,7 @@ APRWindow::APRWindow(BRect frame) fColorsView = new APRView(B_TRANSLATE("Colors")); fDecorSettings = new DecorSettingsView( - B_TRANSLATE("Decorators")); + B_TRANSLATE("Look and feel")); fAntialiasingSettings = new AntialiasingSettingsView( B_TRANSLATE("Antialiasing")); diff --git a/src/preferences/appearance/DecorSettingsView.cpp b/src/preferences/appearance/DecorSettingsView.cpp index 711c534a7d..0ba10089fb 100644 --- a/src/preferences/appearance/DecorSettingsView.cpp +++ b/src/preferences/appearance/DecorSettingsView.cpp @@ -17,8 +17,10 @@ #include #include #include +#include #include #include +#include #include #include #include @@ -36,6 +38,9 @@ static const int32 kMsgSetDecor = 'deco'; static const int32 kMsgDecorInfo = 'idec'; +static const int32 kMsgDoubleScrollbarArrows = 'dsba'; + +static const bool kDefaultDoubleScrollbarArrowsSetting = false; // #pragma mark - @@ -43,7 +48,11 @@ static const int32 kMsgDecorInfo = 'idec'; DecorSettingsView::DecorSettingsView(const char* name) : - BView(name, 0) + BView(name, 0), + fDecorInfoButton(NULL), + fDecorMenuField(NULL), + fDecorMenu(NULL), + fDoubleScrollbarArrowsCheckBox(NULL) { // Decorator menu _BuildDecorMenu(); @@ -53,6 +62,13 @@ DecorSettingsView::DecorSettingsView(const char* name) fDecorInfoButton = new BButton(B_TRANSLATE("About"), new BMessage(kMsgDecorInfo)); + fDoubleScrollbarArrowsCheckBox = new BCheckBox("doubleScrollbarArrows", + B_TRANSLATE("Use double scrollbar arrows"), + new BMessage(kMsgDoubleScrollbarArrows)); + + fSavedDoubleArrowsValue = _GetDoubleScrollbarArrowsSetting(); + fDoubleScrollbarArrowsCheckBox->SetValue(fSavedDoubleArrowsValue); + SetLayout(new BGroupLayout(B_VERTICAL)); // control layout @@ -61,9 +77,10 @@ DecorSettingsView::DecorSettingsView(const char* name) .Add(fDecorMenuField->CreateMenuBarLayoutItem(), 1, 0) .Add(fDecorInfoButton, 2, 0) - .Add(BSpaceLayoutItem::CreateGlue(), 0, 3, 2) - .SetInsets(10, 10, 10, 10) - ); + .Add(fDoubleScrollbarArrowsCheckBox, 0, 3, 2) + .Add(BSpaceLayoutItem::CreateGlue(), 0, 4, 2) + .SetInsets(10, 10, 10, 10) + ); // TODO : Decorator Preview Image? } @@ -83,6 +100,7 @@ DecorSettingsView::AttachedToWindow() fDecorMenu->SetTargetForItems(this); fDecorInfoButton->SetTarget(this); + fDoubleScrollbarArrowsCheckBox->SetTarget(this); } @@ -125,6 +143,9 @@ DecorSettingsView::MessageReceived(BMessage *msg) break; } + case kMsgDoubleScrollbarArrows: + _SetDoubleScrollbarArrowsSetting(fDoubleScrollbarArrowsCheckBox->Value()); + break; default: BView::MessageReceived(msg); @@ -197,24 +218,53 @@ DecorSettingsView::_AdoptInterfaceToCurrentDecor() } +bool +DecorSettingsView::_GetDoubleScrollbarArrowsSetting() +{ + scroll_bar_info info; + get_scroll_bar_info(&info); + + return info.double_arrows; +} + + +void +DecorSettingsView::_SetDoubleScrollbarArrowsSetting(bool value) +{ + scroll_bar_info info; + get_scroll_bar_info(&info); + + info.double_arrows = value; + set_scroll_bar_info(&info); + + Window()->PostMessage(kMsgUpdate); +} + + void DecorSettingsView::SetDefaults() { _SetDecor(fDecorUtility.DefaultDecorator()); + _SetDoubleScrollbarArrowsSetting(kDefaultDoubleScrollbarArrowsSetting); + fDoubleScrollbarArrowsCheckBox->SetValue( + kDefaultDoubleScrollbarArrowsSetting); } bool DecorSettingsView::IsDefaultable() { - return fCurrentDecor != fDecorUtility.DefaultDecorator()->Name(); + return fCurrentDecor != fDecorUtility.DefaultDecorator()->Name() || + fDoubleScrollbarArrowsCheckBox->Value() != + kDefaultDoubleScrollbarArrowsSetting; } bool DecorSettingsView::IsRevertable() { - return fCurrentDecor != fSavedDecor; + return fCurrentDecor != fSavedDecor || + fDoubleScrollbarArrowsCheckBox->Value() != fSavedDoubleArrowsValue; } @@ -222,4 +272,6 @@ void DecorSettingsView::Revert() { _SetDecor(fSavedDecor); + _SetDoubleScrollbarArrowsSetting(fSavedDoubleArrowsValue); + fDoubleScrollbarArrowsCheckBox->SetValue(fSavedDoubleArrowsValue); } diff --git a/src/preferences/appearance/DecorSettingsView.h b/src/preferences/appearance/DecorSettingsView.h index 520bde281d..8110cb55c1 100644 --- a/src/preferences/appearance/DecorSettingsView.h +++ b/src/preferences/appearance/DecorSettingsView.h @@ -16,6 +16,7 @@ class BButton; +class BCheckBox; class BMenuField; class BPopUpMenu; @@ -40,6 +41,8 @@ private: void _BuildDecorMenu(); void _AdoptToCurrentDecor(); void _AdoptInterfaceToCurrentDecor(); + bool _GetDoubleScrollbarArrowsSetting(); + void _SetDoubleScrollbarArrowsSetting(bool value); private: DecorInfoUtility fDecorUtility; @@ -47,9 +50,11 @@ private: BButton* fDecorInfoButton; BMenuField* fDecorMenuField; BPopUpMenu* fDecorMenu; + BCheckBox* fDoubleScrollbarArrowsCheckBox; BString fSavedDecor; BString fCurrentDecor; + bool fSavedDoubleArrowsValue; }; #endif // DECOR_SETTINGS_VIEW_H