Author: stippi Date: Fri Apr 23 16:09:04 2010 New Revision: 458 URL: http://mmlr.dyndns.org/changeset/458 Log: * The current max history age was not read from the BrowsingHistory in SettingsWindow::_RevertSettings(). * Made all necessary refactoring in order to support _CanApplySettings(). * Adjust the Apply and Revert button enabled state whenever settings change. Modified: webkit/trunk/WebKit/haiku/WebPositive/SettingsWindow.cpp webkit/trunk/WebKit/haiku/WebPositive/SettingsWindow.h Modified: webkit/trunk/WebKit/haiku/WebPositive/SettingsWindow.cpp ============================================================================== --- webkit/trunk/WebKit/haiku/WebPositive/SettingsWindow.cpp Fri Apr 23 16:07:22 2010 (r457) +++ webkit/trunk/WebKit/haiku/WebPositive/SettingsWindow.cpp Fri Apr 23 16:09:04 2010 (r458) @@ -62,8 +62,7 @@ MSG_APPLY = 'aply', MSG_CANCEL = 'cncl', MSG_REVERT = 'rvrt', - MSG_STANDARD_FONT_SIZE_SELECTED = 'sfss', - MSG_FIXED_FONT_SIZE_SELECTED = 'ffss', + MSG_START_PAGE_CHANGED = 'hpch', MSG_SEARCH_PAGE_CHANGED = 'spch', MSG_DOWNLOAD_FOLDER_CHANGED = 'dnfc', @@ -71,6 +70,14 @@ MSG_NEW_TABS_BEHAVIOR_CHANGED = 'ntbc', MSG_HISTORY_MENU_DAYS_CHANGED = 'digm', MSG_TAB_DISPLAY_BEHAVIOR_CHANGED = 'tdbc', + + MSG_STANDARD_FONT_CHANGED = 'stfc', + MSG_SERIF_FONT_CHANGED = 'sefc', + MSG_SANS_SERIF_FONT_CHANGED = 'ssfc', + MSG_FIXED_FONT_CHANGED = 'ffch', + + MSG_STANDARD_FONT_SIZE_SELECTED = 'sfss', + MSG_FIXED_FONT_SIZE_SELECTED = 'ffss', }; static const int32 kDefaultFontSize = 14; @@ -106,17 +113,14 @@ tabView->AddTab(_CreateGeneralPage(spacing)); tabView->AddTab(_CreateFontsPage(spacing)); - AddHandler(fStandardFontView); - fStandardFontView->AttachedToLooper(); - - AddHandler(fSerifFontView); - fSerifFontView->AttachedToLooper(); - - AddHandler(fSansSerifFontView); - fSansSerifFontView->AttachedToLooper(); - - AddHandler(fFixedFontView); - fFixedFontView->AttachedToLooper(); + _SetupFontSelectionView(fStandardFontView, + new BMessage(MSG_STANDARD_FONT_CHANGED)); + _SetupFontSelectionView(fSerifFontView, + new BMessage(MSG_SERIF_FONT_CHANGED)); + _SetupFontSelectionView(fSansSerifFontView, + new BMessage(MSG_SANS_SERIF_FONT_CHANGED)); + _SetupFontSelectionView(fFixedFontView, + new BMessage(MSG_FIXED_FONT_CHANGED)); fApplyButton->MakeDefault(true); @@ -168,17 +172,30 @@ fStandardFontView->SetSize(size); fSerifFontView->SetSize(size); fSansSerifFontView->SetSize(size); + _ValidateButtonsEnabled(); break; } case MSG_FIXED_FONT_SIZE_SELECTED: { int32 size = _SizesMenuValue(fFixedSizesMenu->Menu()); fFixedFontView->SetSize(size); + _ValidateButtonsEnabled(); break; } + case MSG_START_PAGE_CHANGED: + case MSG_SEARCH_PAGE_CHANGED: + case MSG_DOWNLOAD_FOLDER_CHANGED: + case MSG_NEW_WINDOWS_BEHAVIOR_CHANGED: + case MSG_NEW_TABS_BEHAVIOR_CHANGED: + case MSG_HISTORY_MENU_DAYS_CHANGED: case MSG_TAB_DISPLAY_BEHAVIOR_CHANGED: + case MSG_STANDARD_FONT_CHANGED: + case MSG_SERIF_FONT_CHANGED: + case MSG_SANS_SERIF_FONT_CHANGED: + case MSG_FIXED_FONT_CHANGED: // TODO: Some settings could change live, some others not? + _ValidateButtonsEnabled(); break; default: @@ -215,32 +232,40 @@ { fStartPageControl = new BTextControl("start page", TR("Start page:"), "", new BMessage(MSG_START_PAGE_CHANGED)); + fStartPageControl->SetModificationMessage( + new BMessage(MSG_START_PAGE_CHANGED)); fStartPageControl->SetText( fSettings->GetValue(kSettingsKeyStartPageURL, kDefaultStartPageURL)); fSearchPageControl = new BTextControl("search page", TR("Search page:"), "", new BMessage(MSG_SEARCH_PAGE_CHANGED)); + fSearchPageControl->SetModificationMessage( + new BMessage(MSG_SEARCH_PAGE_CHANGED)); fSearchPageControl->SetText( fSettings->GetValue(kSettingsKeySearchPageURL, kDefaultSearchPageURL)); fDownloadFolderControl = new BTextControl("download folder", TR("Download folder:"), "", new BMessage(MSG_DOWNLOAD_FOLDER_CHANGED)); + fDownloadFolderControl->SetModificationMessage( + new BMessage(MSG_DOWNLOAD_FOLDER_CHANGED)); fDownloadFolderControl->SetText( fSettings->GetValue(kSettingsKeyDownloadPath, kDefaultDownloadPath)); fNewWindowBehaviorOpenHomeItem = new BMenuItem(TR("Open start page"), - NULL); + new BMessage(MSG_NEW_WINDOWS_BEHAVIOR_CHANGED)); fNewWindowBehaviorOpenSearchItem = new BMenuItem(TR("Open search page"), - NULL); + new BMessage(MSG_NEW_WINDOWS_BEHAVIOR_CHANGED)); fNewWindowBehaviorOpenBlankItem = new BMenuItem(TR("Open blank page"), - NULL); + new BMessage(MSG_NEW_WINDOWS_BEHAVIOR_CHANGED)); fNewTabBehaviorCloneCurrentItem = new BMenuItem(TR("Clone current page"), - NULL); - fNewTabBehaviorOpenHomeItem = new BMenuItem(TR("Open start page"), NULL); + new BMessage(MSG_NEW_TABS_BEHAVIOR_CHANGED)); + fNewTabBehaviorOpenHomeItem = new BMenuItem(TR("Open start page"), + new BMessage(MSG_NEW_TABS_BEHAVIOR_CHANGED)); fNewTabBehaviorOpenSearchItem = new BMenuItem(TR("Open search page"), - NULL); - fNewTabBehaviorOpenBlankItem = new BMenuItem(TR("Open blank page"), NULL); + new BMessage(MSG_NEW_TABS_BEHAVIOR_CHANGED)); + fNewTabBehaviorOpenBlankItem = new BMenuItem(TR("Open blank page"), + new BMessage(MSG_NEW_TABS_BEHAVIOR_CHANGED)); fNewWindowBehaviorOpenHomeItem->SetMarked(true); fNewTabBehaviorOpenBlankItem->SetMarked(true); @@ -250,8 +275,7 @@ newWindowBehaviorMenu->AddItem(fNewWindowBehaviorOpenSearchItem); newWindowBehaviorMenu->AddItem(fNewWindowBehaviorOpenBlankItem); fNewWindowBehaviorMenu = new BMenuField("new window behavior", - TR("New windows:"), newWindowBehaviorMenu, - new BMessage(MSG_NEW_WINDOWS_BEHAVIOR_CHANGED)); + TR("New windows:"), newWindowBehaviorMenu); BPopUpMenu* newTabBehaviorMenu = new BPopUpMenu("New tabs"); newTabBehaviorMenu->AddItem(fNewTabBehaviorOpenBlankItem); @@ -259,12 +283,13 @@ newTabBehaviorMenu->AddItem(fNewTabBehaviorOpenSearchItem); newTabBehaviorMenu->AddItem(fNewTabBehaviorCloneCurrentItem); fNewTabBehaviorMenu = new BMenuField("new tab behavior", - TR("New tabs:"), newTabBehaviorMenu, - new BMessage(MSG_NEW_TABS_BEHAVIOR_CHANGED)); + TR("New tabs:"), newTabBehaviorMenu); fDaysInHistoryMenuControl = new BTextControl("days in history", TR("Number of days to keep links in History menu:"), "", new BMessage(MSG_HISTORY_MENU_DAYS_CHANGED)); + fDaysInHistoryMenuControl->SetModificationMessage( + new BMessage(MSG_HISTORY_MENU_DAYS_CHANGED)); BString maxHistoryAge; maxHistoryAge << BrowsingHistory::DefaultInstance()->MaxHistoryItemAge(); fDaysInHistoryMenuControl->SetText(maxHistoryAge.String()); @@ -364,14 +389,108 @@ void +SettingsWindow::_BuildSizesMenu(BMenu* menu, uint32 messageWhat) +{ + const float kMinSize = 8.0; + const float kMaxSize = 18.0; + + const int32 kSizes[] = {7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 21, 24, 0}; + + for (int32 i = 0; kSizes[i]; i++) { + int32 size = kSizes[i]; + if (size < kMinSize || size > kMaxSize) + continue; + + char label[32]; + snprintf(label, sizeof(label), "%ld", size); + + BMessage* message = new BMessage(messageWhat); + message->AddInt32("size", size); + + BMenuItem* item = new BMenuItem(label, message); + + menu->AddItem(item); + item->SetTarget(this); + } +} + + +void +SettingsWindow::_SetupFontSelectionView(FontSelectionView* view, + BMessage* message) +{ + AddHandler(view); + view->AttachedToLooper(); + view->SetMessage(message); + view->SetTarget(this); +} + + +// #pragma mark - + + +bool +SettingsWindow::_CanApplySettings() const +{ + bool canApply = false; + + // General settings + canApply = canApply || (strcmp(fStartPageControl->Text(), + fSettings->GetValue(kSettingsKeyStartPageURL, + kDefaultStartPageURL)) != 0); + + canApply = canApply || (strcmp(fSearchPageControl->Text(), + fSettings->GetValue(kSettingsKeySearchPageURL, + kDefaultSearchPageURL)) != 0); + + canApply = canApply || (strcmp(fDownloadFolderControl->Text(), + fSettings->GetValue(kSettingsKeyDownloadPath, + kDefaultDownloadPath)) != 0); + + canApply = canApply || ((fShowTabsIfOnlyOnePage->Value() == B_CONTROL_ON) + != fSettings->GetValue(kSettingsKeyShowTabsIfSinglePageOpen, true)); + + canApply = canApply || (_MaxHistoryAge() + != BrowsingHistory::DefaultInstance()->MaxHistoryItemAge()); + + // New window policy + canApply = canApply || (_NewWindowPolicy() + != fSettings->GetValue(kSettingsKeyNewWindowPolicy, + (uint32)OpenStartPage)); + + // New tab policy + canApply = canApply || (_NewTabPolicy() + != fSettings->GetValue(kSettingsKeyNewTabPolicy, + (uint32)OpenBlankPage)); + + // Font settings + canApply = canApply || (fStandardFontView->Font() + != fSettings->GetValue("standard font", *be_plain_font)); + + canApply = canApply || (fSerifFontView->Font() + != fSettings->GetValue("serif font", _FindDefaultSerifFont())); + + canApply = canApply || (fSansSerifFontView->Font() + != fSettings->GetValue("sans serif font", *be_plain_font)); + + canApply = canApply || (fFixedFontView->Font() + != fSettings->GetValue("fixed font", *be_fixed_font)); + + canApply = canApply || (_SizesMenuValue(fStandardSizesMenu->Menu()) + != fSettings->GetValue("standard font size", kDefaultFontSize)); + + canApply = canApply || (_SizesMenuValue(fFixedSizesMenu->Menu()) + != fSettings->GetValue("fixed font size", kDefaultFontSize)); + + return canApply; +} + + +void SettingsWindow::_ApplySettings() { // Store general settings - int32 maxHistoryAge = atoi(fDaysInHistoryMenuControl->Text()); - if (maxHistoryAge <= 0) - maxHistoryAge = 1; - if (maxHistoryAge >= 35) - maxHistoryAge = 35; + int32 maxHistoryAge = _MaxHistoryAge(); BString text; text << maxHistoryAge; fDaysInHistoryMenuControl->SetText(text.String()); @@ -383,25 +502,9 @@ fSettings->SetValue(kSettingsKeyShowTabsIfSinglePageOpen, fShowTabsIfOnlyOnePage->Value() == B_CONTROL_ON); - // New window policy - uint32 newWindowPolicy = OpenStartPage; - BMenuItem* markedItem = fNewWindowBehaviorMenu->Menu()->FindMarked(); - if (markedItem == fNewWindowBehaviorOpenSearchItem) - newWindowPolicy = OpenSearchPage; - else if (markedItem == fNewWindowBehaviorOpenBlankItem) - newWindowPolicy = OpenBlankPage; - fSettings->SetValue(kSettingsKeyNewWindowPolicy, newWindowPolicy); - - // New tab policy - uint32 newTabPolicy = OpenBlankPage; - markedItem = fNewTabBehaviorMenu->Menu()->FindMarked(); - if (markedItem == fNewTabBehaviorCloneCurrentItem) - newTabPolicy = CloneCurrentPage; - else if (markedItem == fNewTabBehaviorOpenHomeItem) - newTabPolicy = OpenStartPage; - else if (markedItem == fNewTabBehaviorOpenSearchItem) - newTabPolicy = OpenSearchPage; - fSettings->SetValue(kSettingsKeyNewTabPolicy, newTabPolicy); + // New page policies + fSettings->SetValue(kSettingsKeyNewWindowPolicy, _NewWindowPolicy()); + fSettings->SetValue(kSettingsKeyNewTabPolicy, _NewTabPolicy()); // Store fond settings fSettings->SetValue("standard font", fStandardFontView->Font()); @@ -426,6 +529,9 @@ // This will find all currently instantiated page settings and apply // the default values, unless the page settings have local overrides. BWebSettings::Default()->Apply(); + + + _ValidateButtonsEnabled(); } @@ -443,6 +549,10 @@ fShowTabsIfOnlyOnePage->SetValue( fSettings->GetValue(kSettingsKeyShowTabsIfSinglePageOpen, true)); + BString text; + text << BrowsingHistory::DefaultInstance()->MaxHistoryItemAge(); + fDaysInHistoryMenuControl->SetText(text.String()); + // New window policy uint32 newWindowPolicy = fSettings->GetValue(kSettingsKeyNewWindowPolicy, (uint32)OpenStartPage); @@ -495,33 +605,63 @@ *be_plain_font), defaultFontSize); fFixedFontView->SetFont(fSettings->GetValue("fixed font", *be_fixed_font), defaultFixedFontSize); + + _ValidateButtonsEnabled(); } void -SettingsWindow::_BuildSizesMenu(BMenu* menu, uint32 messageWhat) +SettingsWindow::_ValidateButtonsEnabled() { - const float kMinSize = 8.0; - const float kMaxSize = 18.0; + bool canApply = _CanApplySettings(); + fApplyButton->SetEnabled(canApply); + fRevertButton->SetEnabled(canApply); + // Let the Cancel button be enabled always, as another way to close the + // window... + fCancelButton->SetEnabled(true); +} - const int32 kSizes[] = {7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 21, 24, 0}; - for (int32 i = 0; kSizes[i]; i++) { - int32 size = kSizes[i]; - if (size < kMinSize || size > kMaxSize) - continue; +// #pragma mark - - char label[32]; - snprintf(label, sizeof(label), "%ld", size); - BMessage* message = new BMessage(messageWhat); - message->AddInt32("size", size); +uint32 +SettingsWindow::_NewWindowPolicy() const +{ + uint32 newWindowPolicy = OpenStartPage; + BMenuItem* markedItem = fNewWindowBehaviorMenu->Menu()->FindMarked(); + if (markedItem == fNewWindowBehaviorOpenSearchItem) + newWindowPolicy = OpenSearchPage; + else if (markedItem == fNewWindowBehaviorOpenBlankItem) + newWindowPolicy = OpenBlankPage; + return newWindowPolicy; +} - BMenuItem* item = new BMenuItem(label, message); - menu->AddItem(item); - item->SetTarget(this); - } +uint32 +SettingsWindow::_NewTabPolicy() const +{ + uint32 newTabPolicy = OpenBlankPage; + BMenuItem* markedItem = fNewTabBehaviorMenu->Menu()->FindMarked(); + if (markedItem == fNewTabBehaviorCloneCurrentItem) + newTabPolicy = CloneCurrentPage; + else if (markedItem == fNewTabBehaviorOpenHomeItem) + newTabPolicy = OpenStartPage; + else if (markedItem == fNewTabBehaviorOpenSearchItem) + newTabPolicy = OpenSearchPage; + return newTabPolicy; +} + + +int32 +SettingsWindow::_MaxHistoryAge() const +{ + int32 maxHistoryAge = atoi(fDaysInHistoryMenuControl->Text()); + if (maxHistoryAge <= 0) + maxHistoryAge = 1; + if (maxHistoryAge >= 35) + maxHistoryAge = 35; + return maxHistoryAge; } @@ -541,7 +681,7 @@ int32 -SettingsWindow::_SizesMenuValue(BMenu* menu) +SettingsWindow::_SizesMenuValue(BMenu* menu) const { if (BMenuItem* item = menu->FindMarked()) { if (BMessage* message = item->Message()) { Modified: webkit/trunk/WebKit/haiku/WebPositive/SettingsWindow.h ============================================================================== --- webkit/trunk/WebKit/haiku/WebPositive/SettingsWindow.h Fri Apr 23 16:07:22 2010 (r457) +++ webkit/trunk/WebKit/haiku/WebPositive/SettingsWindow.h Fri Apr 23 16:09:04 2010 (r458) @@ -53,14 +53,23 @@ private: BView* _CreateGeneralPage(float spacing); BView* _CreateFontsPage(float spacing); + void _BuildSizesMenu(BMenu* menu, + uint32 messageWhat); + void _SetupFontSelectionView( + FontSelectionView* view, + BMessage* message); + bool _CanApplySettings() const; void _ApplySettings(); void _RevertSettings(); + void _ValidateButtonsEnabled(); + + uint32 _NewWindowPolicy() const; + uint32 _NewTabPolicy() const; + int32 _MaxHistoryAge() const; - void _BuildSizesMenu(BMenu* menu, - uint32 messageWhat); void _SetSizesMenuValue(BMenu* menu, int32 value); - int32 _SizesMenuValue(BMenu* menu); + int32 _SizesMenuValue(BMenu* menu) const; BFont _FindDefaultSerifFont() const;