Merge branch 'wxradiobox' of https://github.com/MaartenBent/wxWidgets
Several wxRadioBox-related improvements: - Fix its minimum width calculation to take the title into account. - Remove unused nor useful wxRA_LEFTTORIGHT and wxRA_TOPTOBOTTOM. - Tidy up the radiobox page of the widgets sample. See https://github.com/wxWidgets/wxWidgets/pull/1187
This commit is contained in:
@@ -1568,9 +1568,8 @@ enum wxBorder
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* wxRadioBox style flags
|
* wxRadioBox style flags
|
||||||
|
* These styles are not used in any port.
|
||||||
*/
|
*/
|
||||||
/* should we number the items from left to right or from top to bottom in a 2d */
|
|
||||||
/* radiobox? */
|
|
||||||
#define wxRA_LEFTTORIGHT 0x0001
|
#define wxRA_LEFTTORIGHT 0x0001
|
||||||
#define wxRA_TOPTOBOTTOM 0x0002
|
#define wxRA_TOPTOBOTTOM 0x0002
|
||||||
|
|
||||||
|
@@ -379,9 +379,8 @@ enum wxBorder
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* wxRadioBox style flags
|
* wxRadioBox style flags
|
||||||
|
* These styles are not used in any port.
|
||||||
*/
|
*/
|
||||||
/* should we number the items from left to right or from top to bottom in a 2d */
|
|
||||||
/* radiobox? */
|
|
||||||
#define wxRA_LEFTTORIGHT 0x0001
|
#define wxRA_LEFTTORIGHT 0x0001
|
||||||
#define wxRA_TOPTOBOTTOM 0x0002
|
#define wxRA_TOPTOBOTTOM 0x0002
|
||||||
|
|
||||||
|
@@ -60,14 +60,6 @@ enum
|
|||||||
RadioPage_Radio
|
RadioPage_Radio
|
||||||
};
|
};
|
||||||
|
|
||||||
// layout direction radiobox selections
|
|
||||||
enum
|
|
||||||
{
|
|
||||||
RadioDir_Default,
|
|
||||||
RadioDir_LtoR,
|
|
||||||
RadioDir_TtoB
|
|
||||||
};
|
|
||||||
|
|
||||||
// default values for the number of radiobox items
|
// default values for the number of radiobox items
|
||||||
static const unsigned int DEFAULT_NUM_ENTRIES = 12;
|
static const unsigned int DEFAULT_NUM_ENTRIES = 12;
|
||||||
static const unsigned int DEFAULT_MAJOR_DIM = 3;
|
static const unsigned int DEFAULT_MAJOR_DIM = 3;
|
||||||
@@ -123,7 +115,6 @@ protected:
|
|||||||
wxCheckBox *m_chkSpecifyRows;
|
wxCheckBox *m_chkSpecifyRows;
|
||||||
wxCheckBox *m_chkEnableItem;
|
wxCheckBox *m_chkEnableItem;
|
||||||
wxCheckBox *m_chkShowItem;
|
wxCheckBox *m_chkShowItem;
|
||||||
wxRadioBox *m_radioDir;
|
|
||||||
|
|
||||||
// the gauge itself and the sizer it is in
|
// the gauge itself and the sizer it is in
|
||||||
wxRadioBox *m_radio;
|
wxRadioBox *m_radio;
|
||||||
@@ -155,6 +146,7 @@ wxBEGIN_EVENT_TABLE(RadioWidgetsPage, WidgetsPage)
|
|||||||
EVT_BUTTON(RadioPage_Selection, RadioWidgetsPage::OnButtonSelection)
|
EVT_BUTTON(RadioPage_Selection, RadioWidgetsPage::OnButtonSelection)
|
||||||
EVT_BUTTON(RadioPage_Label, RadioWidgetsPage::OnButtonSetLabel)
|
EVT_BUTTON(RadioPage_Label, RadioWidgetsPage::OnButtonSetLabel)
|
||||||
|
|
||||||
|
EVT_UPDATE_UI(RadioPage_Reset, RadioWidgetsPage::OnUpdateUIReset)
|
||||||
EVT_UPDATE_UI(RadioPage_Update, RadioWidgetsPage::OnUpdateUIUpdate)
|
EVT_UPDATE_UI(RadioPage_Update, RadioWidgetsPage::OnUpdateUIUpdate)
|
||||||
EVT_UPDATE_UI(RadioPage_Selection, RadioWidgetsPage::OnUpdateUISelection)
|
EVT_UPDATE_UI(RadioPage_Selection, RadioWidgetsPage::OnUpdateUISelection)
|
||||||
|
|
||||||
@@ -197,8 +189,7 @@ RadioWidgetsPage::RadioWidgetsPage(WidgetsBookCtrl *book,
|
|||||||
m_textLabelBtns =
|
m_textLabelBtns =
|
||||||
m_textLabel = (wxTextCtrl *)NULL;
|
m_textLabel = (wxTextCtrl *)NULL;
|
||||||
|
|
||||||
m_radio =
|
m_radio = (wxRadioBox *)NULL;
|
||||||
m_radioDir = (wxRadioBox *)NULL;
|
|
||||||
m_sizerRadio = (wxSizer *)NULL;
|
m_sizerRadio = (wxSizer *)NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -217,43 +208,25 @@ void RadioWidgetsPage::CreateContent()
|
|||||||
"Major specifies &rows count"
|
"Major specifies &rows count"
|
||||||
);
|
);
|
||||||
|
|
||||||
static const wxString layoutDir[] =
|
|
||||||
{
|
|
||||||
"default",
|
|
||||||
"left to right",
|
|
||||||
"top to bottom"
|
|
||||||
};
|
|
||||||
|
|
||||||
m_radioDir = new wxRadioBox(this, wxID_ANY, "Numbering:",
|
|
||||||
wxDefaultPosition, wxDefaultSize,
|
|
||||||
WXSIZEOF(layoutDir), layoutDir,
|
|
||||||
1, wxRA_SPECIFY_COLS);
|
|
||||||
sizerLeft->Add(m_radioDir, 0, wxGROW | wxALL, 5);
|
|
||||||
|
|
||||||
// if it's not defined, we can't change the radiobox direction
|
|
||||||
#ifndef wxRA_LEFTTORIGHT
|
|
||||||
m_radioDir->Disable();
|
|
||||||
#endif // wxRA_LEFTTORIGHT
|
|
||||||
|
|
||||||
wxSizer *sizerRow;
|
wxSizer *sizerRow;
|
||||||
sizerRow = CreateSizerWithTextAndLabel("&Major dimension:",
|
sizerRow = CreateSizerWithTextAndLabel("&Major dimension:",
|
||||||
wxID_ANY,
|
wxID_ANY,
|
||||||
&m_textMajorDim);
|
&m_textMajorDim);
|
||||||
sizerLeft->Add(sizerRow, 0, wxGROW | wxALL, 5);
|
sizerLeft->Add(sizerRow, wxSizerFlags().Expand().Border());
|
||||||
|
|
||||||
sizerRow = CreateSizerWithTextAndLabel("&Number of buttons:",
|
sizerRow = CreateSizerWithTextAndLabel("&Number of buttons:",
|
||||||
wxID_ANY,
|
wxID_ANY,
|
||||||
&m_textNumBtns);
|
&m_textNumBtns);
|
||||||
sizerLeft->Add(sizerRow, 0, wxGROW | wxALL, 5);
|
sizerLeft->Add(sizerRow, wxSizerFlags().Expand().Border());
|
||||||
|
|
||||||
wxButton *btn;
|
wxButton *btn;
|
||||||
btn = new wxButton(this, RadioPage_Update, "&Update");
|
btn = new wxButton(this, RadioPage_Update, "&Update");
|
||||||
sizerLeft->Add(btn, 0, wxALIGN_CENTRE_HORIZONTAL | wxALL, 5);
|
sizerLeft->Add(btn, wxSizerFlags().CentreHorizontal().Border());
|
||||||
|
|
||||||
sizerLeft->Add(5, 5, 0, wxGROW | wxALL, 5); // spacer
|
sizerLeft->AddSpacer(5);
|
||||||
|
|
||||||
btn = new wxButton(this, RadioPage_Reset, "&Reset");
|
btn = new wxButton(this, RadioPage_Reset, "&Reset");
|
||||||
sizerLeft->Add(btn, 0, wxALIGN_CENTRE_HORIZONTAL | wxALL, 15);
|
sizerLeft->Add(btn, wxSizerFlags().CentreHorizontal().Border(wxALL, 15));
|
||||||
|
|
||||||
// middle pane
|
// middle pane
|
||||||
wxStaticBox *box2 = new wxStaticBox(this, wxID_ANY, "&Change parameters");
|
wxStaticBox *box2 = new wxStaticBox(this, wxID_ANY, "&Change parameters");
|
||||||
@@ -262,25 +235,25 @@ void RadioWidgetsPage::CreateContent()
|
|||||||
sizerRow = CreateSizerWithTextAndLabel("Current selection:",
|
sizerRow = CreateSizerWithTextAndLabel("Current selection:",
|
||||||
wxID_ANY,
|
wxID_ANY,
|
||||||
&m_textCurSel);
|
&m_textCurSel);
|
||||||
sizerMiddle->Add(sizerRow, 0, wxGROW | wxALL, 5);
|
sizerMiddle->Add(sizerRow, wxSizerFlags().Expand().Border());
|
||||||
|
|
||||||
sizerRow = CreateSizerWithTextAndButton(RadioPage_Selection,
|
sizerRow = CreateSizerWithTextAndButton(RadioPage_Selection,
|
||||||
"&Change selection:",
|
"&Change selection:",
|
||||||
wxID_ANY,
|
wxID_ANY,
|
||||||
&m_textSel);
|
&m_textSel);
|
||||||
sizerMiddle->Add(sizerRow, 0, wxGROW | wxALL, 5);
|
sizerMiddle->Add(sizerRow, wxSizerFlags().Expand().Border());
|
||||||
|
|
||||||
sizerRow = CreateSizerWithTextAndButton(RadioPage_Label,
|
sizerRow = CreateSizerWithTextAndButton(RadioPage_Label,
|
||||||
"&Label for box:",
|
"&Label for box:",
|
||||||
wxID_ANY,
|
wxID_ANY,
|
||||||
&m_textLabel);
|
&m_textLabel);
|
||||||
sizerMiddle->Add(sizerRow, 0, wxGROW | wxALL, 5);
|
sizerMiddle->Add(sizerRow, wxSizerFlags().Expand().Border());
|
||||||
|
|
||||||
sizerRow = CreateSizerWithTextAndButton(RadioPage_LabelBtn,
|
sizerRow = CreateSizerWithTextAndButton(RadioPage_LabelBtn,
|
||||||
"&Label for buttons:",
|
"&Label for buttons:",
|
||||||
wxID_ANY,
|
wxID_ANY,
|
||||||
&m_textLabelBtns);
|
&m_textLabelBtns);
|
||||||
sizerMiddle->Add(sizerRow, 0, wxGROW | wxALL, 5);
|
sizerMiddle->Add(sizerRow, wxSizerFlags().Expand().Border());
|
||||||
|
|
||||||
m_chkEnableItem = CreateCheckBoxAndAddToSizer(sizerMiddle,
|
m_chkEnableItem = CreateCheckBoxAndAddToSizer(sizerMiddle,
|
||||||
"Disable &2nd item",
|
"Disable &2nd item",
|
||||||
@@ -291,16 +264,18 @@ void RadioWidgetsPage::CreateContent()
|
|||||||
|
|
||||||
// right pane
|
// right pane
|
||||||
wxSizer *sizerRight = new wxBoxSizer(wxHORIZONTAL);
|
wxSizer *sizerRight = new wxBoxSizer(wxHORIZONTAL);
|
||||||
sizerRight->SetMinSize(150, 0);
|
|
||||||
m_sizerRadio = sizerRight; // save it to modify it later
|
m_sizerRadio = sizerRight; // save it to modify it later
|
||||||
|
|
||||||
Reset();
|
Reset();
|
||||||
CreateRadio();
|
CreateRadio();
|
||||||
|
|
||||||
// the 3 panes panes compose the window
|
// the 3 panes panes compose the window
|
||||||
sizerTop->Add(sizerLeft, 0, wxGROW | (wxALL & ~wxLEFT), 10);
|
sizerTop->Add(sizerLeft,
|
||||||
sizerTop->Add(sizerMiddle, 1, wxGROW | wxALL, 10);
|
wxSizerFlags(0).Expand().Border((wxALL & ~wxLEFT), 10));
|
||||||
sizerTop->Add(sizerRight, 0, wxGROW | (wxALL & ~wxRIGHT), 10);
|
sizerTop->Add(sizerMiddle,
|
||||||
|
wxSizerFlags(1).Expand().Border(wxALL, 10));
|
||||||
|
sizerTop->Add(sizerRight,
|
||||||
|
wxSizerFlags(0).Expand().Border((wxALL & ~wxRIGHT), 10));
|
||||||
|
|
||||||
// final initializations
|
// final initializations
|
||||||
SetSizer(sizerTop);
|
SetSizer(sizerTop);
|
||||||
@@ -320,7 +295,6 @@ void RadioWidgetsPage::Reset()
|
|||||||
m_chkSpecifyRows->SetValue(false);
|
m_chkSpecifyRows->SetValue(false);
|
||||||
m_chkEnableItem->SetValue(true);
|
m_chkEnableItem->SetValue(true);
|
||||||
m_chkShowItem->SetValue(true);
|
m_chkShowItem->SetValue(true);
|
||||||
m_radioDir->SetSelection(RadioDir_Default);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void RadioWidgetsPage::CreateRadio()
|
void RadioWidgetsPage::CreateRadio()
|
||||||
@@ -357,13 +331,13 @@ void RadioWidgetsPage::CreateRadio()
|
|||||||
majorDim = DEFAULT_MAJOR_DIM;
|
majorDim = DEFAULT_MAJOR_DIM;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxString *items = new wxString[count];
|
wxArrayString items;
|
||||||
|
|
||||||
wxString labelBtn = m_textLabelBtns->GetValue();
|
wxString labelBtn = m_textLabelBtns->GetValue();
|
||||||
for ( size_t n = 0; n < count; n++ )
|
for ( size_t n = 0; n < count; n++ )
|
||||||
{
|
{
|
||||||
items[n] = wxString::Format("%s %lu",
|
items.push_back(wxString::Format("%s %lu",
|
||||||
labelBtn, (unsigned long)n + 1);
|
labelBtn, (unsigned long)n + 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
int flags = m_chkSpecifyRows->GetValue() ? wxRA_SPECIFY_ROWS
|
int flags = m_chkSpecifyRows->GetValue() ? wxRA_SPECIFY_ROWS
|
||||||
@@ -371,45 +345,29 @@ void RadioWidgetsPage::CreateRadio()
|
|||||||
|
|
||||||
flags |= GetAttrs().m_defaultFlags;
|
flags |= GetAttrs().m_defaultFlags;
|
||||||
|
|
||||||
#ifdef wxRA_LEFTTORIGHT
|
|
||||||
switch ( m_radioDir->GetSelection() )
|
|
||||||
{
|
|
||||||
default:
|
|
||||||
wxFAIL_MSG( "unexpected wxRadioBox layout direction" );
|
|
||||||
wxFALLTHROUGH;
|
|
||||||
|
|
||||||
case RadioDir_Default:
|
|
||||||
break;
|
|
||||||
|
|
||||||
case RadioDir_LtoR:
|
|
||||||
flags |= wxRA_LEFTTORIGHT;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case RadioDir_TtoB:
|
|
||||||
flags |= wxRA_TOPTOBOTTOM;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
#endif // wxRA_LEFTTORIGHT
|
|
||||||
|
|
||||||
m_radio = new wxRadioBox(this, RadioPage_Radio,
|
m_radio = new wxRadioBox(this, RadioPage_Radio,
|
||||||
m_textLabel->GetValue(),
|
m_textLabel->GetValue(),
|
||||||
wxDefaultPosition, wxDefaultSize,
|
wxDefaultPosition, wxDefaultSize,
|
||||||
count, items,
|
items,
|
||||||
majorDim,
|
majorDim,
|
||||||
flags);
|
flags);
|
||||||
|
|
||||||
delete [] items;
|
|
||||||
|
|
||||||
if ( sel >= 0 && (size_t)sel < count )
|
if ( sel >= 0 && (size_t)sel < count )
|
||||||
{
|
{
|
||||||
m_radio->SetSelection(sel);
|
m_radio->SetSelection(sel);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_sizerRadio->Add(m_radio, 1, wxGROW);
|
if ( count > TEST_BUTTON )
|
||||||
m_sizerRadio->Layout();
|
{
|
||||||
|
m_radio->Enable(TEST_BUTTON, m_chkEnableItem->IsChecked());
|
||||||
|
m_radio->Show(TEST_BUTTON, m_chkShowItem->IsChecked());
|
||||||
|
}
|
||||||
|
|
||||||
m_chkEnableItem->SetValue(true);
|
m_sizerRadio->Add(m_radio, wxSizerFlags(1).Expand());
|
||||||
m_chkEnableItem->SetValue(true);
|
Layout();
|
||||||
|
|
||||||
|
m_chkEnableItem->Enable(count > TEST_BUTTON);
|
||||||
|
m_chkShowItem->Enable(count > TEST_BUTTON);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -516,12 +474,18 @@ void RadioWidgetsPage::OnUpdateUIReset(wxUpdateUIEvent& event)
|
|||||||
|
|
||||||
void RadioWidgetsPage::OnUpdateUIEnableItem(wxUpdateUIEvent& event)
|
void RadioWidgetsPage::OnUpdateUIEnableItem(wxUpdateUIEvent& event)
|
||||||
{
|
{
|
||||||
|
if ( m_radio->GetCount() <= TEST_BUTTON )
|
||||||
|
return;
|
||||||
|
|
||||||
event.SetText(m_radio->IsItemEnabled(TEST_BUTTON) ? "Disable &2nd item"
|
event.SetText(m_radio->IsItemEnabled(TEST_BUTTON) ? "Disable &2nd item"
|
||||||
: "Enable &2nd item");
|
: "Enable &2nd item");
|
||||||
}
|
}
|
||||||
|
|
||||||
void RadioWidgetsPage::OnUpdateUIShowItem(wxUpdateUIEvent& event)
|
void RadioWidgetsPage::OnUpdateUIShowItem(wxUpdateUIEvent& event)
|
||||||
{
|
{
|
||||||
|
if ( m_radio->GetCount() <= TEST_BUTTON )
|
||||||
|
return;
|
||||||
|
|
||||||
event.SetText(m_radio->IsItemShown(TEST_BUTTON) ? "Hide 2nd &item"
|
event.SetText(m_radio->IsItemShown(TEST_BUTTON) ? "Hide 2nd &item"
|
||||||
: "Show 2nd &item");
|
: "Show 2nd &item");
|
||||||
}
|
}
|
||||||
|
@@ -586,10 +586,9 @@ wxSize wxRadioBox::GetTotalButtonSize(const wxSize& sizeBtn) const
|
|||||||
reinterpret_cast<wxWindow*>(const_cast<wxRadioBox*>(this))).y / 2;
|
reinterpret_cast<wxWindow*>(const_cast<wxRadioBox*>(this))).y / 2;
|
||||||
|
|
||||||
// and also wide enough for its label
|
// and also wide enough for its label
|
||||||
int widthLabel;
|
int widthBox = wxStaticBox::DoGetBestSize().x;
|
||||||
GetTextExtent(GetLabelText(), &widthLabel, NULL);
|
if ( widthBox > width )
|
||||||
if ( widthLabel > width )
|
width = widthBox;
|
||||||
width = widthLabel;
|
|
||||||
|
|
||||||
return wxSize(width, height);
|
return wxSize(width, height);
|
||||||
}
|
}
|
||||||
|
@@ -140,28 +140,8 @@ bool wxRadioBox::Create(wxWindow *parent,
|
|||||||
const wxValidator& wxVALIDATOR_PARAM(val),
|
const wxValidator& wxVALIDATOR_PARAM(val),
|
||||||
const wxString& name)
|
const wxString& name)
|
||||||
{
|
{
|
||||||
// for compatibility with the other ports which don't handle (yet?)
|
if ( !(style & (wxRA_SPECIFY_ROWS | wxRA_SPECIFY_COLS)) )
|
||||||
// wxRA_LEFTTORIGHT and wxRA_TOPTOBOTTOM flags, we add them ourselves if
|
style |= wxRA_SPECIFY_COLS;
|
||||||
// not specified
|
|
||||||
if ( !(style & (wxRA_LEFTTORIGHT | wxRA_TOPTOBOTTOM)) )
|
|
||||||
{
|
|
||||||
// horizontal radiobox use left to right layout
|
|
||||||
if ( style & wxRA_SPECIFY_COLS )
|
|
||||||
{
|
|
||||||
style |= wxRA_LEFTTORIGHT;
|
|
||||||
}
|
|
||||||
else if ( style & wxRA_SPECIFY_ROWS )
|
|
||||||
{
|
|
||||||
style |= wxRA_TOPTOBOTTOM;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
wxFAIL_MSG( wxT("you must specify wxRA_XXX style!") );
|
|
||||||
|
|
||||||
// use default
|
|
||||||
style = wxRA_SPECIFY_COLS | wxRA_LEFTTORIGHT;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( !wxStaticBox::Create(parent, id, title, pos, size, style, name) )
|
if ( !wxStaticBox::Create(parent, id, title, pos, size, style, name) )
|
||||||
return false;
|
return false;
|
||||||
@@ -447,7 +427,7 @@ void wxRadioBox::DoMoveWindow(int x0, int y0, int width, int height)
|
|||||||
{
|
{
|
||||||
m_buttons[n]->SetSize(x, y, sizeBtn.x, sizeBtn.y);
|
m_buttons[n]->SetSize(x, y, sizeBtn.x, sizeBtn.y);
|
||||||
|
|
||||||
if ( GetWindowStyle() & wxRA_TOPTOBOTTOM )
|
if ( GetWindowStyle() & wxRA_SPECIFY_ROWS )
|
||||||
{
|
{
|
||||||
// from top to bottom
|
// from top to bottom
|
||||||
if ( (n + 1) % GetRowCount() )
|
if ( (n + 1) % GetRowCount() )
|
||||||
@@ -462,7 +442,7 @@ void wxRadioBox::DoMoveWindow(int x0, int y0, int width, int height)
|
|||||||
y = y0;
|
y = y0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else // wxRA_LEFTTORIGHT: mirror the code above
|
else // wxRA_SPECIFY_COLS: mirror the code above
|
||||||
{
|
{
|
||||||
// from left to right
|
// from left to right
|
||||||
if ( (n + 1) % GetColumnCount() )
|
if ( (n + 1) % GetColumnCount() )
|
||||||
|
Reference in New Issue
Block a user