diff --git a/src/preferences/cpufrequency/CPUFrequencyView.h b/src/preferences/cpufrequency/CPUFrequencyView.h index 2a73932a6b..1d9a164ab9 100644 --- a/src/preferences/cpufrequency/CPUFrequencyView.h +++ b/src/preferences/cpufrequency/CPUFrequencyView.h @@ -32,6 +32,14 @@ enum stepping_mode { struct freq_preferences { + bool IsEqual(const freq_preferences& prefs) { + if (mode == prefs.mode && custom_stepping == prefs.custom_stepping + && stepping_threshold == prefs.stepping_threshold + && integration_time == prefs.integration_time) + return true; + return false; + } + // stepping mode stepping_mode mode; int16 custom_stepping; diff --git a/src/preferences/cpufrequency/PreferencesWindow.h b/src/preferences/cpufrequency/PreferencesWindow.h index 9b33bf8f24..e903c09821 100644 --- a/src/preferences/cpufrequency/PreferencesWindow.h +++ b/src/preferences/cpufrequency/PreferencesWindow.h @@ -63,6 +63,9 @@ public: BString& PreferencesFile() { return fPreferencesFile; } status_t GetPreferencesPath(BPath &path); + bool DefaultsSet(); + bool StartPrefsSet(); + private: BString fPreferencesFile; @@ -107,6 +110,7 @@ public: private: void _MoveToPosition(); + void _UpdateButtons(); BView* fPreferencesView; BButton* fRevertButton; @@ -234,6 +238,22 @@ PreferencesStorage::SavePreferences() } +template +bool +PreferencesStorage::DefaultsSet() +{ + return fPreferences.IsEqual(fDefaultPreferences); +} + + +template +bool +PreferencesStorage::StartPrefsSet() +{ + return fPreferences.IsEqual(fStartPreferences); +} + + template PrefFileWatcher::PrefFileWatcher( PreferencesStorage* storage, BHandler* target) @@ -343,10 +363,11 @@ PreferencesWindow::PreferencesWindow(const char* title, fRevertButton = new BButton(B_TRANSLATE("Revert"), new BMessage(kRevertMsg)); - fRevertButton->SetEnabled(false); buttonView->AddChild(fRevertButton); buttonView->GetLayout()->AddItem(BSpaceLayoutItem::CreateGlue()); + _UpdateButtons(); + SetLayout(new BGroupLayout(B_VERTICAL)); fRootLayout = new BGroupLayout(B_VERTICAL); fRootLayout->SetInsets(10, 10, 10, 10); @@ -377,19 +398,19 @@ PreferencesWindow::MessageReceived(BMessage *msg) switch(msg->what) { case kConfigChangedMsg: - fRevertButton->SetEnabled(true); + _UpdateButtons(); break; case kDefaultMsg: PreferencesStorage::Defaults(); - fRevertButton->SetEnabled(true); + _UpdateButtons(); if (fPreferencesView) PostMessage(kDefaultMsg, fPreferencesView); break; case kRevertMsg: PreferencesStorage::Revert(); - fRevertButton->SetEnabled(false); + _UpdateButtons(); if (fPreferencesView) PostMessage(kRevertMsg, fPreferencesView); break; @@ -442,6 +463,22 @@ PreferencesWindow::_MoveToPosition() MoveTo(position); } + +template +void +PreferencesWindow::_UpdateButtons() +{ + if (!PreferencesStorage::DefaultsSet()) + fDefaultButton->SetEnabled(true); + else + fDefaultButton->SetEnabled(false); + if (!PreferencesStorage::StartPrefsSet()) + fRevertButton->SetEnabled(true); + else + fRevertButton->SetEnabled(false); +} + + #undef B_TRANSLATE_CONTEXT #endif // PREFERENCES_WINDOW_h