Committing patch by Justin O'Dell to fix the Defaults buttons on several

preferences apps. This fixes most of bug #254.

This is his first contribution to Haiku, and hopefully the first of many.

Thanks Justin!


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21992 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Ryan Leavengood
2007-08-17 03:45:37 +00:00
parent 9d6482b1fd
commit 3f64fbd011
17 changed files with 136 additions and 35 deletions
@@ -391,6 +391,29 @@ FontSelectionView::Revert()
} }
bool
FontSelectionView::IsDefaultable()
{
font_family default_family;
font_style default_style;
float default_size;
if (_get_system_default_font_(Name(), default_family, default_style, &default_size) != B_OK)
return false;
font_family current_family;
font_style current_style;
float current_size;
fCurrentFont.GetFamilyAndStyle(&current_family, &current_style);
current_size = fCurrentFont.Size();
return strcmp(current_family, default_family) != 0
|| strcmp(current_style, default_style) != 0
|| current_size != default_size;
}
bool bool
FontSelectionView::IsRevertable() FontSelectionView::IsRevertable()
{ {
@@ -34,6 +34,7 @@ class FontSelectionView : public BView {
void SetDefaults(); void SetDefaults();
void Revert(); void Revert();
bool IsDefaultable();
bool IsRevertable(); bool IsRevertable();
void UpdateFontsMenu(); void UpdateFontsMenu();
+7
View File
@@ -93,6 +93,13 @@ FontView::RelayoutIfNeeded()
fFixedView->RelayoutIfNeeded(); fFixedView->RelayoutIfNeeded();
} }
bool
FontView::IsDefaultable()
{
return fPlainView->IsDefaultable()
|| fBoldView->IsDefaultable()
|| fFixedView->IsDefaultable();
}
bool bool
FontView::IsRevertable() FontView::IsRevertable()
+1
View File
@@ -25,6 +25,7 @@ class FontView : public BView {
void UpdateFonts(); void UpdateFonts();
void RelayoutIfNeeded(); void RelayoutIfNeeded();
bool IsDefaultable();
bool IsRevertable(); bool IsRevertable();
private: private:
+13 -7
View File
@@ -35,15 +35,16 @@ MainWindow::MainWindow()
rect.left = 10; rect.left = 10;
rect.top = rect.bottom - 10; rect.top = rect.bottom - 10;
BButton *button = new BButton(rect, "defaults", "Defaults", fDefaultsButton = new BButton(rect, "defaults", "Defaults",
new BMessage(kMsgSetDefaults), B_FOLLOW_LEFT | B_FOLLOW_BOTTOM, B_WILL_DRAW); new BMessage(kMsgSetDefaults), B_FOLLOW_LEFT | B_FOLLOW_BOTTOM, B_WILL_DRAW);
button->ResizeToPreferred(); fDefaultsButton->ResizeToPreferred();
float buttonHeight = button->Bounds().Height(); fDefaultsButton->SetEnabled(false);
button->MoveBy(0, -buttonHeight); float buttonHeight = fDefaultsButton->Bounds().Height();
view->AddChild(button); fDefaultsButton->MoveBy(0, -buttonHeight);
view->AddChild(fDefaultsButton);
rect = button->Frame(); rect = fDefaultsButton->Frame();
rect.OffsetBy(button->Bounds().Width() + 10, 0); rect.OffsetBy(fDefaultsButton->Bounds().Width() + 10, 0);
fRevertButton = new BButton(rect, "revert", "Revert", fRevertButton = new BButton(rect, "revert", "Revert",
new BMessage(kMsgRevert), B_FOLLOW_LEFT | B_FOLLOW_BOTTOM, B_WILL_DRAW); new BMessage(kMsgRevert), B_FOLLOW_LEFT | B_FOLLOW_BOTTOM, B_WILL_DRAW);
@@ -99,6 +100,8 @@ MainWindow::MainWindow()
fRunner = new BMessageRunner(this, new BMessage(kMsgCheckFonts), 3000000); fRunner = new BMessageRunner(this, new BMessage(kMsgCheckFonts), 3000000);
// every 3 seconds // every 3 seconds
fDefaultsButton->SetEnabled(fFontsView->IsDefaultable());
} }
@@ -123,16 +126,19 @@ MainWindow::MessageReceived(BMessage *message)
{ {
switch (message->what) { switch (message->what) {
case kMsgUpdate: case kMsgUpdate:
fDefaultsButton->SetEnabled(fFontsView->IsDefaultable());
fRevertButton->SetEnabled(fFontsView->IsRevertable()); fRevertButton->SetEnabled(fFontsView->IsRevertable());
break; break;
case kMsgSetDefaults: case kMsgSetDefaults:
fFontsView->SetDefaults(); fFontsView->SetDefaults();
fDefaultsButton->SetEnabled(false);
fRevertButton->SetEnabled(fFontsView->IsRevertable()); fRevertButton->SetEnabled(fFontsView->IsRevertable());
break; break;
case kMsgRevert: case kMsgRevert:
fFontsView->Revert(); fFontsView->Revert();
fDefaultsButton->SetEnabled(fFontsView->IsDefaultable());
fRevertButton->SetEnabled(false); fRevertButton->SetEnabled(false);
break; break;
+1
View File
@@ -33,6 +33,7 @@ class MainWindow : public BWindow {
BMessageRunner* fRunner; BMessageRunner* fRunner;
FontView* fFontsView; FontView* fFontsView;
BButton* fDefaultsButton;
BButton* fRevertButton; BButton* fRevertButton;
FontsSettings fSettings; FontsSettings fSettings;
@@ -117,3 +117,11 @@ KeyboardSettings::Defaults()
SetKeyboardRepeatDelay(kb_default_key_repeat_delay); SetKeyboardRepeatDelay(kb_default_key_repeat_delay);
SetKeyboardRepeatRate(kb_default_key_repeat_rate); SetKeyboardRepeatRate(kb_default_key_repeat_rate);
} }
bool
KeyboardSettings::IsDefaultable()
{
return fSettings.key_repeat_delay != kb_default_key_repeat_delay
|| fSettings.key_repeat_rate != kb_default_key_repeat_rate;
}
@@ -21,6 +21,7 @@ public :
void Dump(); void Dump();
void Revert(); void Revert();
void Defaults(); void Defaults();
bool IsDefaultable();
BPoint WindowCorner() const { return fCorner; } BPoint WindowCorner() const { return fCorner; }
void SetWindowCorner(BPoint corner); void SetWindowCorner(BPoint corner);
@@ -39,6 +39,10 @@ KeyboardWindow::KeyboardWindow()
if (slider !=NULL) if (slider !=NULL)
slider->SetValue(fSettings.KeyboardRepeatDelay()); slider->SetValue(fSettings.KeyboardRepeatDelay());
BButton *button = (BButton *)FindView("keyboard_defaults");
if (button !=NULL)
button->SetEnabled(fSettings.IsDefaultable());
#ifdef DEBUG #ifdef DEBUG
fSettings.Dump(); fSettings.Dump();
#endif #endif
@@ -78,6 +82,10 @@ KeyboardWindow::MessageReceived(BMessage *message)
slider = (BSlider *)FindView("delay_until_key_repeat"); slider = (BSlider *)FindView("delay_until_key_repeat");
if (slider !=NULL) if (slider !=NULL)
slider->SetValue(fSettings.KeyboardRepeatDelay()); slider->SetValue(fSettings.KeyboardRepeatDelay());
button = (BButton *)FindView("keyboard_defaults");
if (button !=NULL)
button->SetEnabled(false);
button = (BButton *)FindView("keyboard_revert"); button = (BButton *)FindView("keyboard_revert");
if (button !=NULL) if (button !=NULL)
@@ -95,6 +103,10 @@ KeyboardWindow::MessageReceived(BMessage *message)
if (slider !=NULL) if (slider !=NULL)
slider->SetValue(fSettings.KeyboardRepeatDelay()); slider->SetValue(fSettings.KeyboardRepeatDelay());
button = (BButton *)FindView("keyboard_defaults");
if (button !=NULL)
button->SetEnabled(fSettings.IsDefaultable());
button = (BButton *)FindView("keyboard_revert"); button = (BButton *)FindView("keyboard_revert");
if (button !=NULL) if (button !=NULL)
button->SetEnabled(false); button->SetEnabled(false);
@@ -106,6 +118,10 @@ KeyboardWindow::MessageReceived(BMessage *message)
break; break;
fSettings.SetKeyboardRepeatRate(rate); fSettings.SetKeyboardRepeatRate(rate);
button = (BButton *)FindView("keyboard_defaults");
if (button !=NULL)
button->SetEnabled(fSettings.IsDefaultable());
button = (BButton *)FindView("keyboard_revert"); button = (BButton *)FindView("keyboard_revert");
if (button !=NULL) if (button !=NULL)
button->SetEnabled(true); button->SetEnabled(true);
@@ -133,6 +149,10 @@ KeyboardWindow::MessageReceived(BMessage *message)
if (slider !=NULL) if (slider !=NULL)
slider->SetValue(delay); slider->SetValue(delay);
button = (BButton *)FindView("keyboard_defaults");
if (button !=NULL)
button->SetEnabled(fSettings.IsDefaultable());
button = (BButton *)FindView("keyboard_revert"); button = (BButton *)FindView("keyboard_revert");
if (button !=NULL) if (button !=NULL)
button->SetEnabled(true); button->SetEnabled(true);
+17
View File
@@ -191,6 +191,23 @@ MouseSettings::Defaults()
} }
/** Checks if the settings are different then the system defaults
*/
bool
MouseSettings::IsDefaultable()
{
return fSettings.click_speed != kDefaultClickSpeed
|| fSettings.accel.speed != kDefaultMouseSpeed
|| fSettings.type != kDefaultMouseType
|| fSettings.accel.accel_factor != kDefaultAccelerationFactor
|| fMode != B_NORMAL_MOUSE
|| fSettings.map.button[0] != B_PRIMARY_MOUSE_BUTTON
|| fSettings.map.button[1] != B_SECONDARY_MOUSE_BUTTON
|| fSettings.map.button[2] != B_TERTIARY_MOUSE_BUTTON;
}
/** Reverts to the active settings at program startup /** Reverts to the active settings at program startup
*/ */
+1
View File
@@ -30,6 +30,7 @@ class MouseSettings {
void Revert(); void Revert();
void Defaults(); void Defaults();
bool IsDefaultable();
void Dump(); void Dump();
BPoint WindowPosition() const { return fWindowPosition; } BPoint WindowPosition() const { return fWindowPosition; }
+22 -20
View File
@@ -48,12 +48,13 @@ MouseWindow::MouseWindow(BRect _rect)
// Add the "Default" button // Add the "Default" button
BRect rect(kBorderSpace, fSettingsView->Frame().bottom + kItemSpace + 2, BRect rect(kBorderSpace, fSettingsView->Frame().bottom + kItemSpace + 2,
kBorderSpace + 75, fSettingsView->Frame().bottom + 20); kBorderSpace + 75, fSettingsView->Frame().bottom + 20);
BButton *button = new BButton(rect, "defaults", "Defaults", new BMessage(kMsgDefaults)); fDefaultsButton = new BButton(rect, "defaults", "Defaults", new BMessage(kMsgDefaults));
button->ResizeToPreferred(); fDefaultsButton->ResizeToPreferred();
view->AddChild(button); fDefaultsButton->SetEnabled(fSettings.IsDefaultable());
view->AddChild(fDefaultsButton);
// Add the "Revert" button // Add the "Revert" button
rect.OffsetBy(button->Bounds().Width() + kItemSpace, 0); rect.OffsetBy(fDefaultsButton->Bounds().Width() + kItemSpace, 0);
fRevertButton = new BButton(rect, "revert", "Revert", new BMessage(kMsgRevert)); fRevertButton = new BButton(rect, "revert", "Revert", new BMessage(kMsgRevert));
fRevertButton->SetEnabled(false); fRevertButton->SetEnabled(false);
fRevertButton->ResizeToPreferred(); fRevertButton->ResizeToPreferred();
@@ -64,7 +65,7 @@ MouseWindow::MouseWindow(BRect _rect)
// buttons and draw the selected imagery // buttons and draw the selected imagery
ResizeTo(fSettingsView->Frame().right + kBorderSpace, ResizeTo(fSettingsView->Frame().right + kBorderSpace,
button->Frame().bottom + kBorderSpace - 1); fRevertButton->Frame().bottom + kBorderSpace - 1);
// check if the window is on screen // check if the window is on screen
@@ -105,7 +106,8 @@ MouseWindow::MessageReceived(BMessage *message)
fSettings.Defaults(); fSettings.Defaults();
fSettingsView->UpdateFromSettings(); fSettingsView->UpdateFromSettings();
SetRevertable(true); fDefaultsButton->SetEnabled(false);
fRevertButton->SetEnabled(true);
break; break;
} }
@@ -114,7 +116,8 @@ MouseWindow::MessageReceived(BMessage *message)
fSettings.Revert(); fSettings.Revert();
fSettingsView->UpdateFromSettings(); fSettingsView->UpdateFromSettings();
SetRevertable(false); fDefaultsButton->SetEnabled(fSettings.IsDefaultable());
fRevertButton->SetEnabled(false);
break; break;
} }
@@ -124,7 +127,8 @@ MouseWindow::MessageReceived(BMessage *message)
if (message->FindInt32("index", &type) == B_OK) { if (message->FindInt32("index", &type) == B_OK) {
fSettings.SetMouseType(++type); fSettings.SetMouseType(++type);
fSettingsView->SetMouseType(type); fSettingsView->SetMouseType(type);
SetRevertable(true); fDefaultsButton->SetEnabled(fSettings.IsDefaultable());
fRevertButton->SetEnabled(true);
} }
break; break;
} }
@@ -134,7 +138,8 @@ MouseWindow::MessageReceived(BMessage *message)
int32 mode; int32 mode;
if (message->FindInt32("mode", &mode) == B_OK) { if (message->FindInt32("mode", &mode) == B_OK) {
fSettings.SetMouseMode((mode_mouse)mode); fSettings.SetMouseMode((mode_mouse)mode);
SetRevertable(true); fDefaultsButton->SetEnabled(fSettings.IsDefaultable());
fRevertButton->SetEnabled(true);
} }
break; break;
} }
@@ -145,7 +150,8 @@ MouseWindow::MessageReceived(BMessage *message)
if (message->FindInt32("be:value", &value) == B_OK) { if (message->FindInt32("be:value", &value) == B_OK) {
// slow = 1000000, fast = 0 // slow = 1000000, fast = 0
fSettings.SetClickSpeed(value * 1000); fSettings.SetClickSpeed(value * 1000);
SetRevertable(true); fDefaultsButton->SetEnabled(fSettings.IsDefaultable());
fRevertButton->SetEnabled(true);
} }
break; break;
} }
@@ -156,7 +162,8 @@ MouseWindow::MessageReceived(BMessage *message)
if (message->FindInt32("be:value", &value) == B_OK) { if (message->FindInt32("be:value", &value) == B_OK) {
// slow = 8192, fast = 524287 // slow = 8192, fast = 524287
fSettings.SetMouseSpeed((int32)pow(2, value * 6 / 1000) * 8192); fSettings.SetMouseSpeed((int32)pow(2, value * 6 / 1000) * 8192);
SetRevertable(true); fDefaultsButton->SetEnabled(fSettings.IsDefaultable());
fRevertButton->SetEnabled(true);
} }
break; break;
} }
@@ -167,7 +174,8 @@ MouseWindow::MessageReceived(BMessage *message)
if (message->FindInt32("be:value", &value) == B_OK) { if (message->FindInt32("be:value", &value) == B_OK) {
// slow = 0, fast = 262144 // slow = 0, fast = 262144
fSettings.SetAccelerationFactor((int32)pow(value * 4 / 1000, 2) * 16384); fSettings.SetAccelerationFactor((int32)pow(value * 4 / 1000, 2) * 16384);
SetRevertable(true); fDefaultsButton->SetEnabled(fSettings.IsDefaultable());
fRevertButton->SetEnabled(true);
} }
break; break;
} }
@@ -189,7 +197,8 @@ MouseWindow::MessageReceived(BMessage *message)
} }
fSettings.SetMapping(button, mapping); fSettings.SetMapping(button, mapping);
SetRevertable(true); fDefaultsButton->SetEnabled(fSettings.IsDefaultable());
fRevertButton->SetEnabled(true);
fSettingsView->MouseMapUpdated(); fSettingsView->MouseMapUpdated();
} }
break; break;
@@ -201,10 +210,3 @@ MouseWindow::MessageReceived(BMessage *message)
} }
} }
void
MouseWindow::SetRevertable(bool revertable)
{
fRevertButton->SetEnabled(revertable);
}
+1 -2
View File
@@ -33,10 +33,9 @@ class MouseWindow : public BWindow {
virtual bool QuitRequested(); virtual bool QuitRequested();
virtual void MessageReceived(BMessage *message); virtual void MessageReceived(BMessage *message);
void SetRevertable(bool revertable);
private: private:
MouseSettings fSettings; MouseSettings fSettings;
BButton *fDefaultsButton;
BButton *fRevertButton; BButton *fRevertButton;
SettingsView *fSettingsView; SettingsView *fSettingsView;
}; };
@@ -204,6 +204,14 @@ Settings::RevertSwapChanges()
} }
bool
Settings::IsDefaultable()
{
return fSwapEnabled != fInitialSwapEnabled
|| fSwapSize != fInitialSwapSize;
}
bool bool
Settings::SwapChanged() Settings::SwapChanged()
{ {
+1
View File
@@ -27,6 +27,7 @@ class Settings {
void SetSwapDefaults(); void SetSwapDefaults();
void RevertSwapChanges(); void RevertSwapChanges();
bool IsDefaultable();
bool SwapChanged(); bool SwapChanged();
private: private:
@@ -196,17 +196,19 @@ SettingsWindow::SettingsWindow()
// Add "Defaults" and "Revert" buttons // Add "Defaults" and "Revert" buttons
rect.top = box->Frame().bottom + 10; rect.top = box->Frame().bottom + 10;
BButton* button = new BButton(rect, "defaults", "Defaults", new BMessage(kMsgDefaults)); fDefaultsButton = new BButton(rect, "defaults", "Defaults", new BMessage(kMsgDefaults));
button->ResizeToPreferred(); fDefaultsButton->ResizeToPreferred();
view->AddChild(button); fDefaultsButton->SetEnabled(fSettings.IsDefaultable());
view->AddChild(fDefaultsButton);
rect = button->Frame(); rect = fDefaultsButton->Frame();
rect.OffsetBy(rect.Width() + 10, 0); rect.OffsetBy(rect.Width() + 10, 0);
fRevertButton = new BButton(rect, "revert", "Revert", new BMessage(kMsgRevert)); fRevertButton = new BButton(rect, "revert", "Revert", new BMessage(kMsgRevert));
button->ResizeToPreferred(); fRevertButton->ResizeToPreferred();
fRevertButton->SetEnabled(false);
view->AddChild(fRevertButton); view->AddChild(fRevertButton);
view->ResizeTo(view->Frame().Width(), button->Frame().bottom + 10); view->ResizeTo(view->Frame().Width(), fRevertButton->Frame().bottom + 10);
ResizeTo(view->Bounds().Width(), view->Bounds().Height()); ResizeTo(view->Bounds().Width(), view->Bounds().Height());
AddChild(view); AddChild(view);
// add view after resizing the window, so that the view's resizing // add view after resizing the window, so that the view's resizing
@@ -266,6 +268,8 @@ SettingsWindow::_Update()
// ToDo: set volume // ToDo: set volume
fDefaultsButton->SetEnabled(fSettings.IsDefaultable());
bool changed = fSettings.SwapChanged(); bool changed = fSettings.SwapChanged();
if (fRevertButton->IsEnabled() != changed) { if (fRevertButton->IsEnabled() != changed) {
fRevertButton->SetEnabled(changed); fRevertButton->SetEnabled(changed);
@@ -30,6 +30,7 @@ class SettingsWindow : public BWindow {
BCheckBox* fSwapEnabledCheckBox; BCheckBox* fSwapEnabledCheckBox;
BSlider* fSizeSlider; BSlider* fSizeSlider;
BButton* fDefaultsButton;
BButton* fRevertButton; BButton* fRevertButton;
BStringView* fWarningStringView; BStringView* fWarningStringView;