Allow specifying all wxFlexGridSizer parameters in XRC.

Add support for specifying flexible direction, grow mode in non-flexible
direction and row/column proportions for the growable ones.

Closes #14767.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72710 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2012-10-19 22:03:25 +00:00
parent 9f5103f1fd
commit 5a3eee0dba
4 changed files with 98 additions and 14 deletions

View File

@@ -572,6 +572,7 @@ All (GUI):
- Implement incremental search in wxGenericListCtrl (Jonathan Dagresta). - Implement incremental search in wxGenericListCtrl (Jonathan Dagresta).
- Make TAB behaviour in wxGrid more flexible (Fulvio Senore). - Make TAB behaviour in wxGrid more flexible (Fulvio Senore).
- Add missing styles support to wxWindow XRC hanlder (Steffen Olszewski). - Add missing styles support to wxWindow XRC hanlder (Steffen Olszewski).
- Allow specifying all wxFlexGridSizer parameters in XRC (Steffen Olszewski).
wxGTK: wxGTK:

View File

@@ -1919,8 +1919,8 @@ Example of sizers XRC code:
<rows>0</rows> <rows>0</rows>
<vgap>0</vgap> <vgap>0</vgap>
<hgap>0</hgap> <hgap>0</hgap>
<growablecols>0</growablecols> <growablecols>0:1</growablecols>
<growablerows>0</growablerows> <growablerows>0:1</growablerows>
<object class="sizeritem"> <object class="sizeritem">
<flag>wxALIGN_CENTRE|wxALL</flag> <flag>wxALIGN_CENTRE|wxALL</flag>
<border>5</border> <border>5</border>
@@ -2001,12 +2001,22 @@ class-specific properties. All classes support the following properties:
@row3col{cols, integer, Number of columns in the grid (default: 0 - determine automatically).} @row3col{cols, integer, Number of columns in the grid (default: 0 - determine automatically).}
@row3col{vgap, integer, Vertical gap between children (default: 0).} @row3col{vgap, integer, Vertical gap between children (default: 0).}
@row3col{hgap, integer, Horizontal gap between children (default: 0).} @row3col{hgap, integer, Horizontal gap between children (default: 0).}
@row3col{flexibledirection, @ref overview_xrcformat_type_style,
Flexible direction, @c wxVERTICAL, @c wxHORIZONTAL or @c wxBOTH (default).
This property is only available since wxWidgets 2.9.5.}
@row3col{nonflexiblegrowmode, @ref overview_xrcformat_type_style,
Grow mode in the non-flexible direction,
@c wxFLEX_GROWMODE_NONE, @c wxFLEX_GROWMODE_SPECIFIED (default) or
@c wxFLEX_GROWMODE_ALL.
This property is only available since wxWidgets 2.9.5.}
@row3col{growablerows, comma-separated integers list, @row3col{growablerows, comma-separated integers list,
Comma-separated list of indexes of rows that are growable Comma-separated list of indexes of rows that are growable (none by default).
(default: none).} Since wxWidgets 2.9.5 optional proportion can be appended to each number
after a colon (@c :).}
@row3col{growablecols, comma-separated integers list, @row3col{growablecols, comma-separated integers list,
Comma-separated list of indexes of columns that are growable Comma-separated list of indexes of columns that are growable (none by default).
(default: none).} Since wxWidgets 2.9.5 optional proportion can be appended to each number
after a colon (@c :).}
@endTable @endTable
@subsection overview_xrcformat_wxgridbagsizer wxGridBagSizer @subsection overview_xrcformat_wxgridbagsizer wxGridBagSizer
@@ -2015,11 +2025,21 @@ class-specific properties. All classes support the following properties:
@hdr3col{property, type, description} @hdr3col{property, type, description}
@row3col{vgap, integer, Vertical gap between children (default: 0).} @row3col{vgap, integer, Vertical gap between children (default: 0).}
@row3col{hgap, integer, Horizontal gap between children (default: 0).} @row3col{hgap, integer, Horizontal gap between children (default: 0).}
@row3col{flexibledirection, @ref overview_xrcformat_type_style,
Flexible direction, @c wxVERTICAL, @c wxHORIZONTAL, @c wxBOTH (default: @c wxBOTH).}
@row3col{nonflexiblegrowmode, @ref overview_xrcformat_type_style,
Grow mode in the non-flexible direction,
@c wxFLEX_GROWMODE_NONE, @c wxFLEX_GROWMODE_SPECIFIED, @c wxFLEX_GROWMODE_ALL
(default: @c wxFLEX_GROWMODE_SPECIFIED).}
@row3col{growablerows, comma-separated integers list, @row3col{growablerows, comma-separated integers list,
Comma-separated list of indexes of rows that are growable Comma-separated list of indexes of rows that are growable,
optionally the proportion can be appended after each number
separated by a @c :
(default: none).} (default: none).}
@row3col{growablecols, comma-separated integers list, @row3col{growablecols, comma-separated integers list,
Comma-separated list of indexes of columns that are growable Comma-separated list of indexes of columns that are growable,
optionally the proportion can be appended after each number
separated by a @c :
(default: none).} (default: none).}
@endTable @endTable

View File

@@ -51,6 +51,7 @@ private:
wxSizer* Handle_wxWrapSizer(); wxSizer* Handle_wxWrapSizer();
bool ValidateGridSizerChildren(); bool ValidateGridSizerChildren();
void SetFlexibleMode(wxFlexGridSizer* fsizer);
void SetGrowables(wxFlexGridSizer* fsizer, const wxChar* param, bool rows); void SetGrowables(wxFlexGridSizer* fsizer, const wxChar* param, bool rows);
wxGBPosition GetGBPos(const wxString& param); wxGBPosition GetGBPos(const wxString& param);
wxGBSpan GetGBSpan(const wxString& param); wxGBSpan GetGBSpan(const wxString& param);

View File

@@ -270,6 +270,7 @@ wxObject* wxSizerXmlHandler::Handle_sizer()
// set growable rows and cols for sizers which support this // set growable rows and cols for sizers which support this
if ( wxFlexGridSizer *flexsizer = wxDynamicCast(sizer, wxFlexGridSizer) ) if ( wxFlexGridSizer *flexsizer = wxDynamicCast(sizer, wxFlexGridSizer) )
{ {
SetFlexibleMode(flexsizer);
SetGrowables(flexsizer, wxT("growablerows"), true); SetGrowables(flexsizer, wxT("growablerows"), true);
SetGrowables(flexsizer, wxT("growablecols"), false); SetGrowables(flexsizer, wxT("growablecols"), false);
} }
@@ -395,6 +396,50 @@ bool wxSizerXmlHandler::ValidateGridSizerChildren()
} }
void wxSizerXmlHandler::SetFlexibleMode(wxFlexGridSizer* fsizer)
{
if (HasParam(wxT("flexibledirection")))
{
wxString dir = GetParamValue(wxT("flexibledirection"));
if (dir == wxT("wxVERTICAL"))
fsizer->SetFlexibleDirection(wxVERTICAL);
else if (dir == wxT("wxHORIZONTAL"))
fsizer->SetFlexibleDirection(wxHORIZONTAL);
else if (dir == wxT("wxBOTH"))
fsizer->SetFlexibleDirection(wxBOTH);
else
{
ReportParamError
(
wxT("flexibledirection"),
wxString::Format("unknown direction \"%s\"", dir)
);
}
}
if (HasParam(wxT("nonflexiblegrowmode")))
{
wxString mode = GetParamValue(wxT("nonflexiblegrowmode"));
if (mode == wxT("wxFLEX_GROWMODE_NONE"))
fsizer->SetNonFlexibleGrowMode(wxFLEX_GROWMODE_NONE);
else if (mode == wxT("wxFLEX_GROWMODE_SPECIFIED"))
fsizer->SetNonFlexibleGrowMode(wxFLEX_GROWMODE_SPECIFIED);
else if (mode == wxT("wxFLEX_GROWMODE_ALL"))
fsizer->SetNonFlexibleGrowMode(wxFLEX_GROWMODE_ALL);
else
{
ReportParamError
(
wxT("nonflexiblegrowmode"),
wxString::Format("unknown grow mode \"%s\"", mode)
);
}
}
}
void wxSizerXmlHandler::SetGrowables(wxFlexGridSizer* sizer, void wxSizerXmlHandler::SetGrowables(wxFlexGridSizer* sizer,
const wxChar* param, const wxChar* param,
bool rows) bool rows)
@@ -408,18 +453,35 @@ void wxSizerXmlHandler::SetGrowables(wxFlexGridSizer* sizer,
while (tkn.HasMoreTokens()) while (tkn.HasMoreTokens())
{ {
unsigned long l; wxString propStr;
if (!tkn.GetNextToken().ToULong(&l)) wxString idxStr = tkn.GetNextToken().BeforeFirst(wxT(':'), &propStr);
unsigned long li;
if (!idxStr.ToULong(&li))
{ {
ReportParamError ReportParamError
( (
param, param,
"value must be comma-separated list of row numbers" "value must be a comma-separated list of numbers"
); );
break; break;
} }
const int n = static_cast<int>(l); unsigned long lp = 0;
if (!propStr.empty())
{
if (!propStr.ToULong(&lp))
{
ReportParamError
(
param,
"value must be a comma-separated list of numbers"
);
break;
}
}
const int n = static_cast<int>(li);
if ( n >= nslots ) if ( n >= nslots )
{ {
ReportParamError ReportParamError
@@ -439,9 +501,9 @@ void wxSizerXmlHandler::SetGrowables(wxFlexGridSizer* sizer,
} }
if (rows) if (rows)
sizer->AddGrowableRow(n); sizer->AddGrowableRow(n, static_cast<int>(lp));
else else
sizer->AddGrowableCol(n); sizer->AddGrowableCol(n, static_cast<int>(lp));
} }
} }