added wxSizerItem::AssignXXX() methods replacing the old SetXXX() but freeing the current item contents (modified patch 1687785)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@45172 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -224,7 +224,7 @@ public:
|
|||||||
{
|
{
|
||||||
Init(flags);
|
Init(flags);
|
||||||
|
|
||||||
SetWindow(window);
|
DoSetWindow(window);
|
||||||
}
|
}
|
||||||
|
|
||||||
// subsizer
|
// subsizer
|
||||||
@@ -239,7 +239,7 @@ public:
|
|||||||
{
|
{
|
||||||
Init(flags);
|
Init(flags);
|
||||||
|
|
||||||
SetSizer(sizer);
|
DoSetSizer(sizer);
|
||||||
}
|
}
|
||||||
|
|
||||||
// spacer
|
// spacer
|
||||||
@@ -255,7 +255,7 @@ public:
|
|||||||
{
|
{
|
||||||
Init(flags);
|
Init(flags);
|
||||||
|
|
||||||
SetSpacer(width, height);
|
DoSetSpacer(wxSize(width, height));
|
||||||
}
|
}
|
||||||
|
|
||||||
wxSizerItem();
|
wxSizerItem();
|
||||||
@@ -340,20 +340,51 @@ public:
|
|||||||
wxPoint GetPosition() const
|
wxPoint GetPosition() const
|
||||||
{ return m_pos; }
|
{ return m_pos; }
|
||||||
|
|
||||||
|
// these functions delete the current contents of the item if it's a sizer
|
||||||
|
// or a spacer but not if it is a window
|
||||||
|
void AssignWindow(wxWindow *window)
|
||||||
|
{
|
||||||
|
Free();
|
||||||
|
DoSetWindow(window);
|
||||||
|
}
|
||||||
|
|
||||||
// these functions do not free old sizer/spacer
|
void AssignSizer(wxSizer *sizer)
|
||||||
void SetWindow(wxWindow *window);
|
{
|
||||||
void SetSizer(wxSizer *sizer);
|
Free();
|
||||||
void SetSpacer(const wxSize& size);
|
DoSetSizer(sizer);
|
||||||
void SetSpacer(int width, int height) { SetSpacer(wxSize(width, height)); }
|
}
|
||||||
|
|
||||||
|
void AssignSpacer(const wxSize& size)
|
||||||
|
{
|
||||||
|
Free();
|
||||||
|
DoSetSpacer(size);
|
||||||
|
}
|
||||||
|
|
||||||
|
void AssignSpacer(int w, int h) { AssignSpacer(wxSize(w, h)); }
|
||||||
|
|
||||||
|
#if WXWIN_COMPATIBILITY_2_8
|
||||||
|
// these functions do not free the old sizer/spacer and so can easily
|
||||||
|
// provoke the memory leaks and so shouldn't be used, use Assign() instead
|
||||||
|
wxDEPRECATED( void SetWindow(wxWindow *window) );
|
||||||
|
wxDEPRECATED( void SetSizer(wxSizer *sizer) );
|
||||||
|
wxDEPRECATED( void SetSpacer(const wxSize& size) );
|
||||||
|
wxDEPRECATED( void SetSpacer(int width, int height) );
|
||||||
|
#endif // WXWIN_COMPATIBILITY_2_8
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// common part of several ctors
|
// common part of several ctors
|
||||||
void Init() { m_userData = NULL; }
|
void Init() { m_userData = NULL; m_kind = Item_None; }
|
||||||
|
|
||||||
// common part of ctors taking wxSizerFlags
|
// common part of ctors taking wxSizerFlags
|
||||||
void Init(const wxSizerFlags& flags);
|
void Init(const wxSizerFlags& flags);
|
||||||
|
|
||||||
|
// free current contents
|
||||||
|
void Free();
|
||||||
|
|
||||||
|
// common parts of Set/AssignXXX()
|
||||||
|
void DoSetWindow(wxWindow *window);
|
||||||
|
void DoSetSizer(wxSizer *sizer);
|
||||||
|
void DoSetSpacer(const wxSize& size);
|
||||||
|
|
||||||
// discriminated union: depending on m_kind one of the fields is valid
|
// discriminated union: depending on m_kind one of the fields is valid
|
||||||
enum
|
enum
|
||||||
@@ -848,6 +879,31 @@ private:
|
|||||||
// inline functions implementation
|
// inline functions implementation
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#if WXWIN_COMPATIBILITY_2_8
|
||||||
|
|
||||||
|
inline void wxSizerItem::SetWindow(wxWindow *window)
|
||||||
|
{
|
||||||
|
DoSetWindow(window);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void wxSizerItem::SetSizer(wxSizer *sizer)
|
||||||
|
{
|
||||||
|
DoSetSizer(sizer);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void wxSizerItem::SetSpacer(const wxSize& size)
|
||||||
|
{
|
||||||
|
DoSetSpacer(size);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void wxSizerItem::SetSpacer(int width, int height)
|
||||||
|
{
|
||||||
|
DoSetSpacer(wxSize(width, height));
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // WXWIN_COMPATIBILITY_2_8
|
||||||
|
|
||||||
|
|
||||||
inline wxSizerItem*
|
inline wxSizerItem*
|
||||||
wxSizer::Add( wxSizerItem *item )
|
wxSizer::Add( wxSizerItem *item )
|
||||||
{
|
{
|
||||||
@@ -1002,5 +1058,4 @@ wxSizer::InsertStretchSpacer(size_t index, int prop)
|
|||||||
return Insert(index, 0, 0, prop);
|
return Insert(index, 0, 0, prop);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#endif // __WXSIZER_H__
|
#endif // __WXSIZER_H__
|
||||||
|
@@ -103,12 +103,10 @@ wxSizerItem::wxSizerItem()
|
|||||||
m_proportion = 0;
|
m_proportion = 0;
|
||||||
m_border = 0;
|
m_border = 0;
|
||||||
m_flag = 0;
|
m_flag = 0;
|
||||||
|
|
||||||
m_kind = Item_None;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// window item
|
// window item
|
||||||
void wxSizerItem::SetWindow(wxWindow *window)
|
void wxSizerItem::DoSetWindow(wxWindow *window)
|
||||||
{
|
{
|
||||||
wxCHECK_RET( window, _T("NULL window in wxSizerItem::SetWindow()") );
|
wxCHECK_RET( window, _T("NULL window in wxSizerItem::SetWindow()") );
|
||||||
|
|
||||||
@@ -130,16 +128,17 @@ wxSizerItem::wxSizerItem(wxWindow *window,
|
|||||||
int flag,
|
int flag,
|
||||||
int border,
|
int border,
|
||||||
wxObject* userData)
|
wxObject* userData)
|
||||||
: m_proportion(proportion),
|
: m_kind(Item_None),
|
||||||
|
m_proportion(proportion),
|
||||||
m_border(border),
|
m_border(border),
|
||||||
m_flag(flag),
|
m_flag(flag),
|
||||||
m_userData(userData)
|
m_userData(userData)
|
||||||
{
|
{
|
||||||
SetWindow(window);
|
DoSetWindow(window);
|
||||||
}
|
}
|
||||||
|
|
||||||
// sizer item
|
// sizer item
|
||||||
void wxSizerItem::SetSizer(wxSizer *sizer)
|
void wxSizerItem::DoSetSizer(wxSizer *sizer)
|
||||||
{
|
{
|
||||||
m_kind = Item_Sizer;
|
m_kind = Item_Sizer;
|
||||||
m_sizer = sizer;
|
m_sizer = sizer;
|
||||||
@@ -150,19 +149,21 @@ wxSizerItem::wxSizerItem(wxSizer *sizer,
|
|||||||
int flag,
|
int flag,
|
||||||
int border,
|
int border,
|
||||||
wxObject* userData)
|
wxObject* userData)
|
||||||
: m_proportion(proportion),
|
: m_kind(Item_None),
|
||||||
|
m_sizer(NULL),
|
||||||
|
m_proportion(proportion),
|
||||||
m_border(border),
|
m_border(border),
|
||||||
m_flag(flag),
|
m_flag(flag),
|
||||||
m_ratio(0.0),
|
m_ratio(0.0),
|
||||||
m_userData(userData)
|
m_userData(userData)
|
||||||
{
|
{
|
||||||
SetSizer(sizer);
|
DoSetSizer(sizer);
|
||||||
|
|
||||||
// m_minSize is set later
|
// m_minSize is set later
|
||||||
}
|
}
|
||||||
|
|
||||||
// spacer item
|
// spacer item
|
||||||
void wxSizerItem::SetSpacer(const wxSize& size)
|
void wxSizerItem::DoSetSpacer(const wxSize& size)
|
||||||
{
|
{
|
||||||
m_kind = Item_Spacer;
|
m_kind = Item_Spacer;
|
||||||
m_spacer = new wxSizerSpacer(size);
|
m_spacer = new wxSizerSpacer(size);
|
||||||
@@ -176,19 +177,25 @@ wxSizerItem::wxSizerItem(int width,
|
|||||||
int flag,
|
int flag,
|
||||||
int border,
|
int border,
|
||||||
wxObject* userData)
|
wxObject* userData)
|
||||||
: m_minSize(width, height), // minimal size is the initial size
|
: m_kind(Item_None),
|
||||||
|
m_sizer(NULL),
|
||||||
|
m_minSize(width, height), // minimal size is the initial size
|
||||||
m_proportion(proportion),
|
m_proportion(proportion),
|
||||||
m_border(border),
|
m_border(border),
|
||||||
m_flag(flag),
|
m_flag(flag),
|
||||||
m_userData(userData)
|
m_userData(userData)
|
||||||
{
|
{
|
||||||
SetSpacer(width, height);
|
DoSetSpacer(wxSize(width, height));
|
||||||
}
|
}
|
||||||
|
|
||||||
wxSizerItem::~wxSizerItem()
|
wxSizerItem::~wxSizerItem()
|
||||||
{
|
{
|
||||||
delete m_userData;
|
delete m_userData;
|
||||||
|
Free();
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxSizerItem::Free()
|
||||||
|
{
|
||||||
switch ( m_kind )
|
switch ( m_kind )
|
||||||
{
|
{
|
||||||
case Item_None:
|
case Item_None:
|
||||||
@@ -210,6 +217,8 @@ wxSizerItem::~wxSizerItem()
|
|||||||
default:
|
default:
|
||||||
wxFAIL_MSG( _T("unexpected wxSizerItem::m_kind") );
|
wxFAIL_MSG( _T("unexpected wxSizerItem::m_kind") );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_kind = Item_None;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxSize wxSizerItem::GetSpacer() const
|
wxSize wxSizerItem::GetSpacer() const
|
||||||
|
Reference in New Issue
Block a user