GUI: Fix "clear" buttons after theme switch (bug #3482459)
Because the "clear" buttons are very different between themes (in the Modern theme they have a graphical symbol, while in the Classic theme they have a letter), they have to be removed and re-added when reflowing the layout. This is patterned after how the LauncherDialog class handles the larger changes in layout. Removing widgets from a tab turned out to be trickier than I first thought, so I had to move the removeWidget() method from Dialog to GuiObject.
This commit is contained in:
parent
4e68b06fed
commit
6b17507b76
5 changed files with 66 additions and 23 deletions
|
@ -334,25 +334,7 @@ void Dialog::removeWidget(Widget *del) {
|
||||||
if (del == _dragWidget)
|
if (del == _dragWidget)
|
||||||
_dragWidget = NULL;
|
_dragWidget = NULL;
|
||||||
|
|
||||||
Widget *w = _firstWidget;
|
GuiObject::removeWidget(del);
|
||||||
|
|
||||||
if (del == _firstWidget) {
|
|
||||||
Widget *del_next = del->_next;
|
|
||||||
del->_next = 0;
|
|
||||||
_firstWidget = del_next;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
w = _firstWidget;
|
|
||||||
while (w) {
|
|
||||||
if (w->_next == del) {
|
|
||||||
Widget *del_next = del->_next;
|
|
||||||
del->_next = 0;
|
|
||||||
w->_next = del_next;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
w = w->_next;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // End of namespace GUI
|
} // End of namespace GUI
|
||||||
|
|
|
@ -59,4 +59,24 @@ void GuiObject::reflowLayout() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GuiObject::removeWidget(Widget *del) {
|
||||||
|
if (del == _firstWidget) {
|
||||||
|
Widget *del_next = del->next();
|
||||||
|
del->setNext(0);
|
||||||
|
_firstWidget = del_next;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget *w = _firstWidget;
|
||||||
|
while (w) {
|
||||||
|
if (w->next() == del) {
|
||||||
|
Widget *del_next = del->next();
|
||||||
|
del->setNext(0);
|
||||||
|
w->setNext(del_next);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
w = w->next();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} // End of namespace GUI
|
} // End of namespace GUI
|
||||||
|
|
|
@ -83,6 +83,8 @@ public:
|
||||||
|
|
||||||
virtual void reflowLayout();
|
virtual void reflowLayout();
|
||||||
|
|
||||||
|
virtual void removeWidget(Widget *widget);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void releaseFocus() = 0;
|
virtual void releaseFocus() = 0;
|
||||||
};
|
};
|
||||||
|
|
|
@ -79,7 +79,7 @@ static const char *outputRateLabels[] = { _s("<default>"), _s("8 kHz"), _s("11kH
|
||||||
static const int outputRateValues[] = { 0, 8000, 11025, 22050, 44100, 48000, -1 };
|
static const int outputRateValues[] = { 0, 8000, 11025, 22050, 44100, 48000, -1 };
|
||||||
|
|
||||||
OptionsDialog::OptionsDialog(const Common::String &domain, int x, int y, int w, int h)
|
OptionsDialog::OptionsDialog(const Common::String &domain, int x, int y, int w, int h)
|
||||||
: Dialog(x, y, w, h), _domain(domain), _graphicsTabId(-1), _tabWidget(0) {
|
: Dialog(x, y, w, h), _domain(domain), _graphicsTabId(-1), _midiTabId(-1), _pathsTabId(-1), _tabWidget(0) {
|
||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1120,7 +1120,7 @@ GlobalOptionsDialog::GlobalOptionsDialog()
|
||||||
//
|
//
|
||||||
// 3) The MIDI tab
|
// 3) The MIDI tab
|
||||||
//
|
//
|
||||||
tab->addTab(_("MIDI"));
|
_midiTabId = tab->addTab(_("MIDI"));
|
||||||
addMIDIControls(tab, "GlobalOptions_MIDI.");
|
addMIDIControls(tab, "GlobalOptions_MIDI.");
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -1133,9 +1133,9 @@ GlobalOptionsDialog::GlobalOptionsDialog()
|
||||||
// 5) The Paths tab
|
// 5) The Paths tab
|
||||||
//
|
//
|
||||||
if (g_system->getOverlayWidth() > 320)
|
if (g_system->getOverlayWidth() > 320)
|
||||||
tab->addTab(_("Paths"));
|
_pathsTabId = tab->addTab(_("Paths"));
|
||||||
else
|
else
|
||||||
tab->addTab(_c("Paths", "lowres"));
|
_pathsTabId = tab->addTab(_c("Paths", "lowres"));
|
||||||
|
|
||||||
#if !( defined(__DC__) || defined(__GP32__) )
|
#if !( defined(__DC__) || defined(__GP32__) )
|
||||||
// These two buttons have to be extra wide, or the text will be
|
// These two buttons have to be extra wide, or the text will be
|
||||||
|
@ -1494,4 +1494,39 @@ void GlobalOptionsDialog::handleCommand(CommandSender *sender, uint32 cmd, uint3
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GlobalOptionsDialog::reflowLayout() {
|
||||||
|
int activeTab = _tabWidget->getActiveTab();
|
||||||
|
|
||||||
|
if (_midiTabId != -1) {
|
||||||
|
_tabWidget->setActiveTab(_midiTabId);
|
||||||
|
|
||||||
|
_tabWidget->removeWidget(_soundFontClearButton);
|
||||||
|
_soundFontClearButton->setNext(0);
|
||||||
|
delete _soundFontClearButton;
|
||||||
|
_soundFontClearButton = addClearButton(_tabWidget, "GlobalOptions_MIDI.mcFontClearButton", kClearSoundFontCmd);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_pathsTabId != -1) {
|
||||||
|
_tabWidget->setActiveTab(_pathsTabId);
|
||||||
|
|
||||||
|
_tabWidget->removeWidget(_savePathClearButton);
|
||||||
|
_savePathClearButton->setNext(0);
|
||||||
|
delete _savePathClearButton;
|
||||||
|
_savePathClearButton = addClearButton(_tabWidget, "GlobalOptions_Paths.SavePathClearButton", kSavePathClearCmd);
|
||||||
|
|
||||||
|
_tabWidget->removeWidget(_themePathClearButton);
|
||||||
|
_themePathClearButton->setNext(0);
|
||||||
|
delete _themePathClearButton;
|
||||||
|
_themePathClearButton = addClearButton(_tabWidget, "GlobalOptions_Paths.ThemePathClearButton", kThemePathClearCmd);
|
||||||
|
|
||||||
|
_tabWidget->removeWidget(_extraPathClearButton);
|
||||||
|
_extraPathClearButton->setNext(0);
|
||||||
|
delete _extraPathClearButton;
|
||||||
|
_extraPathClearButton = addClearButton(_tabWidget, "GlobalOptions_Paths.ExtraPathClearButton", kExtraPathClearCmd);
|
||||||
|
}
|
||||||
|
|
||||||
|
_tabWidget->setActiveTab(activeTab);
|
||||||
|
OptionsDialog::reflowLayout();
|
||||||
|
}
|
||||||
|
|
||||||
} // End of namespace GUI
|
} // End of namespace GUI
|
||||||
|
|
|
@ -89,6 +89,8 @@ protected:
|
||||||
|
|
||||||
TabWidget *_tabWidget;
|
TabWidget *_tabWidget;
|
||||||
int _graphicsTabId;
|
int _graphicsTabId;
|
||||||
|
int _midiTabId;
|
||||||
|
int _pathsTabId;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
//
|
//
|
||||||
|
@ -193,6 +195,8 @@ public:
|
||||||
void close();
|
void close();
|
||||||
void handleCommand(CommandSender *sender, uint32 cmd, uint32 data);
|
void handleCommand(CommandSender *sender, uint32 cmd, uint32 data);
|
||||||
|
|
||||||
|
virtual void reflowLayout();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
#ifdef SMALL_SCREEN_DEVICE
|
#ifdef SMALL_SCREEN_DEVICE
|
||||||
KeysDialog *_keysDialog;
|
KeysDialog *_keysDialog;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue