added wxSizer::Get/SetContainingWindow()

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@40992 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2006-09-04 12:05:49 +00:00
parent 7f5426f09c
commit e8cfff879e
4 changed files with 54 additions and 8 deletions

View File

@@ -233,6 +233,13 @@ windows which manage it.
\helpref{wxSizer::SetVirtualSizeHints}{wxsizersetvirtualsizehints}
\membersection{wxSizer::GetContainingWindow}\label{wxsizergetcontainingwindow}
\constfunc{wxWindow *}{GetContainingWindow}{\void}
Returns the window this sizer is used in or \NULL if none.
\membersection{wxSizer::GetItem}\label{wxsizergetitem}
\func{wxSizerItem *}{GetItem}{\param{wxWindow* }{window}, \param{bool }{recursive = false}}

View File

@@ -329,7 +329,7 @@ WX_DECLARE_EXPORTED_LIST( wxSizerItem, wxSizerItemList );
class WXDLLEXPORT wxSizer: public wxObject, public wxClientDataContainer
{
public:
wxSizer() { }
wxSizer() { m_containingWindow = NULL; }
~wxSizer();
// methods for adding elements to the sizer: there are Add/Insert/Prepend
@@ -410,6 +410,10 @@ public:
inline wxSizerItem* PrependSpacer(int size);
inline wxSizerItem* PrependStretchSpacer(int prop = 1);
// set (or possibly unset if window is NULL) or get the window this sizer
// is used in
void SetContainingWindow(wxWindow *window);
wxWindow *GetContainingWindow() const { return m_containingWindow; }
#if WXWIN_COMPATIBILITY_2_6
// Deprecated in 2.6 since historically it does not delete the window,
@@ -508,6 +512,9 @@ protected:
wxPoint m_position;
wxSizerItemList m_children;
// the window this sizer is used in, can be NULL
wxWindow *m_containingWindow;
wxSize GetMaxWindowSize( wxWindow *window ) const;
wxSize GetMinWindowSize( wxWindow *window );
wxSize GetMaxClientSize( wxWindow *window ) const;

View File

@@ -506,6 +506,29 @@ wxSizerItem* wxSizer::Insert( size_t index, wxSizerItem *item )
return item;
}
void wxSizer::SetContainingWindow(wxWindow *win)
{
if ( win == m_containingWindow )
return;
m_containingWindow = win;
// set the same window for all nested sizers as well, they also are in the
// same window
for ( wxSizerItemList::compatibility_iterator node = m_children.GetFirst();
node;
node = node->GetNext() )
{
wxSizerItem *const item = node->GetData();
wxSizer *const sizer = item->GetSizer();
if ( sizer )
{
sizer->SetContainingWindow(win);
}
}
}
#if WXWIN_COMPATIBILITY_2_6
bool wxSizer::Remove( wxWindow *window )
{

View File

@@ -1650,12 +1650,21 @@ void wxWindowBase::SetSizer(wxSizer *sizer, bool deleteOld)
if ( sizer == m_windowSizer)
return;
if ( m_windowSizer )
{
m_windowSizer->SetContainingWindow(NULL);
if ( deleteOld )
delete m_windowSizer;
}
m_windowSizer = sizer;
if ( m_windowSizer )
{
m_windowSizer->SetContainingWindow((wxWindow *)this);
}
SetAutoLayout( sizer != NULL );
SetAutoLayout(m_windowSizer != NULL);
}
void wxWindowBase::SetSizerAndFit(wxSizer *sizer, bool deleteOld)