added XRCSIZERITEM() allowing to directly retrieve the sizer from XRC by name (patch 1782080)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@48718 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -166,6 +166,7 @@ All (GUI):
|
||||
- Added support for drop down toolbar buttons (Tim Kosse).
|
||||
- Added support for labels for toolbar controls (Vince Harron).
|
||||
- Added wxMessageDialog::SetMessage() and SetExtendedMessage().
|
||||
- Added XRCSIZERITEM() macro for obtaining sizers from XRC (Brian Vanderburg II)
|
||||
- Added wxEventBlocker class (Francesco Montorsi)..
|
||||
- Added wxFile/DirPickerCtrl::Get/SetFile/DirName() (Francesco Montorsi)..
|
||||
- Added wxSizerFlags::Top() and Bottom().
|
||||
|
@@ -274,6 +274,18 @@ Use parameter \arg{recursive} to search in subsizers too.
|
||||
|
||||
Returns pointer to item or NULL.
|
||||
|
||||
\membersection{wxSizer::GetItemById}\label{wxsizergetitembyid}
|
||||
|
||||
\func{wxSizerItem *}{GetItemById}{\param{int }{id}, \param{bool }{recursive = false}}
|
||||
|
||||
Finds item of the sizer which has the given \arg{id}. This \arg{id} is not the
|
||||
window id but the id of the wxSizerItem itself. This is mainly useful for
|
||||
retrieving the sizers created from XRC resources.
|
||||
|
||||
Use parameter \arg{recursive} to search in subsizers too.
|
||||
|
||||
Returns pointer to item or \NULL.
|
||||
|
||||
|
||||
\membersection{wxSizer::GetSize}\label{wxsizergetsize}
|
||||
|
||||
|
@@ -88,6 +88,13 @@ Return the border attribute.
|
||||
|
||||
Return the flags attribute.
|
||||
|
||||
\membersection{wxSizerItem::GetId}\label{wxsizeritemgetid}
|
||||
|
||||
\constfunc{int}{GetId}{\void}
|
||||
|
||||
Return the numeric id of wxSizerItem, or \texttt{wxID\_NONE} if the id has
|
||||
not been set.
|
||||
|
||||
|
||||
\membersection{wxSizerItem::GetMinSize}\label{wxsizeritemgetminsize}
|
||||
|
||||
@@ -205,6 +212,12 @@ taking alignment and borders into account.
|
||||
|
||||
Set the flag item attribute.
|
||||
|
||||
\membersection{wxSizerItem::SetId}\label{wxsizeritemSetId}
|
||||
|
||||
\func{void}{SetId}{\param{int}{id}}
|
||||
|
||||
Sets the numeric id of the wxSizerItem to \arg{id}.
|
||||
|
||||
|
||||
\membersection{wxSizerItem::SetInitSize}\label{wxsizeritemsetinitsize}
|
||||
|
||||
|
@@ -506,7 +506,22 @@ END_EVENT_TABLE()
|
||||
|
||||
\end{verbatim}
|
||||
|
||||
It is also possible to access the wxSizerItem of a sizer that is part of
|
||||
a resource. This can be done using {\tt XRCSIZERITEM} as shown. The
|
||||
resource file can have something like this for a sizer item.
|
||||
|
||||
\begin{verbatim}
|
||||
<object class="spacer" name="area">
|
||||
<size>400, 300</size>
|
||||
</object>
|
||||
\end{verbatim}
|
||||
|
||||
The code can then access the sizer item by using {\tt XRCSIZERITEM} and
|
||||
{\tt XRCID} together.
|
||||
|
||||
\begin{verbatim}
|
||||
wxSizerItem* item = XRCSIZERITEM(*this, XRCID("area"));
|
||||
\end{verbatim}
|
||||
|
||||
\subsection{Adding new resource handlers}\label{newresourcehandlers}
|
||||
|
||||
|
@@ -298,6 +298,11 @@ public:
|
||||
|
||||
virtual wxRect GetRect() { return m_rect; }
|
||||
|
||||
// set a sizer item id (different from a window id, all sizer items,
|
||||
// including spacers, can have an associated id)
|
||||
void SetId(int id) { m_id = id; }
|
||||
int GetId() const { return m_id; }
|
||||
|
||||
bool IsWindow() const { return m_kind == Item_Window; }
|
||||
bool IsSizer() const { return m_kind == Item_Sizer; }
|
||||
bool IsSpacer() const { return m_kind == Item_Spacer; }
|
||||
@@ -407,6 +412,7 @@ protected:
|
||||
int m_proportion;
|
||||
int m_border;
|
||||
int m_flag;
|
||||
int m_id;
|
||||
|
||||
// on screen rectangle of this item (not including borders)
|
||||
wxRect m_rect;
|
||||
@@ -593,6 +599,7 @@ public:
|
||||
wxSizerItem* GetItem( wxWindow *window, bool recursive = false );
|
||||
wxSizerItem* GetItem( wxSizer *sizer, bool recursive = false );
|
||||
wxSizerItem* GetItem( size_t index );
|
||||
wxSizerItem* GetItemById( int id, bool recursive = false );
|
||||
|
||||
// Manage whether individual scene items are considered
|
||||
// in the layout calculations or not.
|
||||
|
@@ -320,6 +320,18 @@ private:
|
||||
#define XRCCTRL(window, id, type) \
|
||||
(wxStaticCast((window).FindWindow(XRCID(id)), type))
|
||||
|
||||
// This macro returns pointer to sizer item
|
||||
// Example:
|
||||
//
|
||||
// <object class="spacer" name="area">
|
||||
// <size>400, 300</size>
|
||||
// </object>
|
||||
//
|
||||
// wxSizerItem* item = XRCSIZERITEM(*this, wxT("area"))
|
||||
|
||||
#define XRCSIZERITEM(window, id) \
|
||||
((window).GetSizer() ? (window).GetSizer()->GetItemById(id) : NULL)
|
||||
|
||||
// wxXmlResourceHandler is an abstract base class for resource handlers
|
||||
// capable of creating a control from an XML node.
|
||||
|
||||
|
@@ -103,6 +103,7 @@ wxSizerItem::wxSizerItem()
|
||||
m_proportion = 0;
|
||||
m_border = 0;
|
||||
m_flag = 0;
|
||||
m_id = wxID_NONE;
|
||||
}
|
||||
|
||||
// window item
|
||||
@@ -132,6 +133,7 @@ wxSizerItem::wxSizerItem(wxWindow *window,
|
||||
m_proportion(proportion),
|
||||
m_border(border),
|
||||
m_flag(flag),
|
||||
m_id(wxID_NONE),
|
||||
m_userData(userData)
|
||||
{
|
||||
DoSetWindow(window);
|
||||
@@ -154,6 +156,7 @@ wxSizerItem::wxSizerItem(wxSizer *sizer,
|
||||
m_proportion(proportion),
|
||||
m_border(border),
|
||||
m_flag(flag),
|
||||
m_id(wxID_NONE),
|
||||
m_ratio(0.0),
|
||||
m_userData(userData)
|
||||
{
|
||||
@@ -183,6 +186,7 @@ wxSizerItem::wxSizerItem(int width,
|
||||
m_proportion(proportion),
|
||||
m_border(border),
|
||||
m_flag(flag),
|
||||
m_id(wxID_NONE),
|
||||
m_userData(userData)
|
||||
{
|
||||
DoSetSpacer(wxSize(width, height));
|
||||
@@ -1085,6 +1089,33 @@ wxSizerItem* wxSizer::GetItem( size_t index )
|
||||
return m_children.Item( index )->GetData();
|
||||
}
|
||||
|
||||
wxSizerItem* wxSizer::GetItemById( int id, bool recursive )
|
||||
{
|
||||
// This gets a sizer item by the id of the sizer item
|
||||
// and NOT the id of a window if the item is a window.
|
||||
|
||||
wxSizerItemList::compatibility_iterator node = m_children.GetFirst();
|
||||
while (node)
|
||||
{
|
||||
wxSizerItem *item = node->GetData();
|
||||
|
||||
if (item->GetId() == id)
|
||||
{
|
||||
return item;
|
||||
}
|
||||
else if (recursive && item->IsSizer())
|
||||
{
|
||||
wxSizerItem *subitem = item->GetSizer()->GetItemById( id, true );
|
||||
if (subitem)
|
||||
return subitem;
|
||||
}
|
||||
|
||||
node = node->GetNext();
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
bool wxSizer::Show( wxWindow *window, bool show, bool recursive )
|
||||
{
|
||||
wxSizerItem *item = GetItem( window, recursive );
|
||||
|
@@ -361,6 +361,9 @@ void wxSizerXmlHandler::SetSizerItemAttributes(wxSizerItem* sitem)
|
||||
gbsitem->SetPos(GetGBPos(wxT("cellpos")));
|
||||
gbsitem->SetSpan(GetGBSpan(wxT("cellspan")));
|
||||
}
|
||||
|
||||
// record the id of the item, if any, for use by XRCSIZERITEM()
|
||||
sitem->SetId(GetID());
|
||||
}
|
||||
|
||||
void wxSizerXmlHandler::AddSizerItem(wxSizerItem* sitem)
|
||||
|
Reference in New Issue
Block a user