mirror of
https://github.com/PCSX2/pcsx2.git
synced 2026-09-23 21:15:49 +02:00
Avoid enabling the child windows when SetValue is called if the window is currently disabled. Also continue processing the checkbox event after it has been handled, which allows the event to propagate to the parent window.
78 lines
2.7 KiB
C++
78 lines
2.7 KiB
C++
/* PCSX2 - PS2 Emulator for PCs
|
|
* Copyright (C) 2002-2010 PCSX2 Dev Team
|
|
*
|
|
* PCSX2 is free software: you can redistribute it and/or modify it under the terms
|
|
* of the GNU Lesser General Public License as published by the Free Software Found-
|
|
* ation, either version 3 of the License, or (at your option) any later version.
|
|
*
|
|
* PCSX2 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
|
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
* PURPOSE. See the GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along with PCSX2.
|
|
* If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include "PrecompiledHeader.h"
|
|
#include "CheckedStaticBox.h"
|
|
|
|
CheckedStaticBox::CheckedStaticBox(wxWindow *parent, int orientation, const wxString &title)
|
|
: wxPanelWithHelpers(parent, wxVERTICAL)
|
|
, ThisSizer(*new wxStaticBoxSizer(orientation, this))
|
|
, ThisToggle(*new wxCheckBox(this, wxID_ANY, title, wxPoint(8, 0)))
|
|
{
|
|
*this += ThisToggle;
|
|
*this += ThisSizer | pxExpand;
|
|
|
|
// Ensure that the right-side of the static group box isn't too cozy:
|
|
SetMinWidth(ThisToggle.GetSize().GetWidth() + 32);
|
|
|
|
Bind(wxEVT_CHECKBOX, &CheckedStaticBox::MainToggle_Click, this, ThisToggle.GetId());
|
|
}
|
|
|
|
// Event handler for click events for the main checkbox (default behavior: enables/disables all child controls)
|
|
// This function can be overridden to implement custom handling of check enable/disable behavior.
|
|
void CheckedStaticBox::MainToggle_Click(wxCommandEvent &evt)
|
|
{
|
|
SetValue(evt.IsChecked());
|
|
evt.Skip();
|
|
}
|
|
|
|
// Sets the main checkbox status, and enables/disables all child controls
|
|
// bound to the StaticBox accordingly.
|
|
void CheckedStaticBox::SetValue(bool val)
|
|
{
|
|
wxWindowList &list = GetChildren();
|
|
|
|
for (wxWindowList::iterator iter = list.begin(); iter != list.end(); ++iter) {
|
|
wxWindow *current = *iter;
|
|
if (current != &ThisToggle)
|
|
current->Enable(IsEnabled() && val);
|
|
}
|
|
ThisToggle.SetValue(val);
|
|
}
|
|
|
|
bool CheckedStaticBox::GetValue() const
|
|
{
|
|
return ThisToggle.GetValue();
|
|
}
|
|
|
|
// This override is here so to only enable the children if both the main toggle and
|
|
// the enable request are true. If not, disable them!
|
|
bool CheckedStaticBox::Enable(bool enable)
|
|
{
|
|
if (!_parent::Enable(enable))
|
|
return false;
|
|
|
|
bool val = enable && ThisToggle.GetValue();
|
|
wxWindowList &list = GetChildren();
|
|
|
|
for (wxWindowList::iterator iter = list.begin(); iter != list.end(); ++iter) {
|
|
wxWindow *current = *iter;
|
|
if (current != &ThisToggle)
|
|
current->Enable(val);
|
|
}
|
|
|
|
return true;
|
|
}
|