Fix #6919. Enable / disable revert and default button at the right time.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39698 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Clemens Zeidler
2010-12-01 20:43:31 +00:00
parent 01c2a7f38f
commit 8ce987787a
2 changed files with 49 additions and 4 deletions
@@ -32,6 +32,14 @@ enum stepping_mode {
struct freq_preferences 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
stepping_mode mode; stepping_mode mode;
int16 custom_stepping; int16 custom_stepping;
@@ -63,6 +63,9 @@ public:
BString& PreferencesFile() { return fPreferencesFile; } BString& PreferencesFile() { return fPreferencesFile; }
status_t GetPreferencesPath(BPath &path); status_t GetPreferencesPath(BPath &path);
bool DefaultsSet();
bool StartPrefsSet();
private: private:
BString fPreferencesFile; BString fPreferencesFile;
@@ -107,6 +110,7 @@ public:
private: private:
void _MoveToPosition(); void _MoveToPosition();
void _UpdateButtons();
BView* fPreferencesView; BView* fPreferencesView;
BButton* fRevertButton; BButton* fRevertButton;
@@ -234,6 +238,22 @@ PreferencesStorage<Preferences>::SavePreferences()
} }
template<typename Preferences>
bool
PreferencesStorage<Preferences>::DefaultsSet()
{
return fPreferences.IsEqual(fDefaultPreferences);
}
template<typename Preferences>
bool
PreferencesStorage<Preferences>::StartPrefsSet()
{
return fPreferences.IsEqual(fStartPreferences);
}
template<typename Preferences> template<typename Preferences>
PrefFileWatcher<Preferences>::PrefFileWatcher( PrefFileWatcher<Preferences>::PrefFileWatcher(
PreferencesStorage<Preferences>* storage, BHandler* target) PreferencesStorage<Preferences>* storage, BHandler* target)
@@ -343,10 +363,11 @@ PreferencesWindow<Preferences>::PreferencesWindow(const char* title,
fRevertButton = new BButton(B_TRANSLATE("Revert"), fRevertButton = new BButton(B_TRANSLATE("Revert"),
new BMessage(kRevertMsg)); new BMessage(kRevertMsg));
fRevertButton->SetEnabled(false);
buttonView->AddChild(fRevertButton); buttonView->AddChild(fRevertButton);
buttonView->GetLayout()->AddItem(BSpaceLayoutItem::CreateGlue()); buttonView->GetLayout()->AddItem(BSpaceLayoutItem::CreateGlue());
_UpdateButtons();
SetLayout(new BGroupLayout(B_VERTICAL)); SetLayout(new BGroupLayout(B_VERTICAL));
fRootLayout = new BGroupLayout(B_VERTICAL); fRootLayout = new BGroupLayout(B_VERTICAL);
fRootLayout->SetInsets(10, 10, 10, 10); fRootLayout->SetInsets(10, 10, 10, 10);
@@ -377,19 +398,19 @@ PreferencesWindow<Preferences>::MessageReceived(BMessage *msg)
switch(msg->what) switch(msg->what)
{ {
case kConfigChangedMsg: case kConfigChangedMsg:
fRevertButton->SetEnabled(true); _UpdateButtons();
break; break;
case kDefaultMsg: case kDefaultMsg:
PreferencesStorage<Preferences>::Defaults(); PreferencesStorage<Preferences>::Defaults();
fRevertButton->SetEnabled(true); _UpdateButtons();
if (fPreferencesView) if (fPreferencesView)
PostMessage(kDefaultMsg, fPreferencesView); PostMessage(kDefaultMsg, fPreferencesView);
break; break;
case kRevertMsg: case kRevertMsg:
PreferencesStorage<Preferences>::Revert(); PreferencesStorage<Preferences>::Revert();
fRevertButton->SetEnabled(false); _UpdateButtons();
if (fPreferencesView) if (fPreferencesView)
PostMessage(kRevertMsg, fPreferencesView); PostMessage(kRevertMsg, fPreferencesView);
break; break;
@@ -442,6 +463,22 @@ PreferencesWindow<Preferences>::_MoveToPosition()
MoveTo(position); MoveTo(position);
} }
template<typename Preferences>
void
PreferencesWindow<Preferences>::_UpdateButtons()
{
if (!PreferencesStorage<Preferences>::DefaultsSet())
fDefaultButton->SetEnabled(true);
else
fDefaultButton->SetEnabled(false);
if (!PreferencesStorage<Preferences>::StartPrefsSet())
fRevertButton->SetEnabled(true);
else
fRevertButton->SetEnabled(false);
}
#undef B_TRANSLATE_CONTEXT #undef B_TRANSLATE_CONTEXT
#endif // PREFERENCES_WINDOW_h #endif // PREFERENCES_WINDOW_h