[ 1493802 ] Allow multiple wxComboCtrl::SetPopupControl calls.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@39311 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Włodzimierz Skiba
2006-05-24 09:29:06 +00:00
parent 9eddec696f
commit 7ca4ac6383
3 changed files with 36 additions and 14 deletions

View File

@@ -375,6 +375,9 @@ protected:
// Creates popup window, calls interface->Create(), etc // Creates popup window, calls interface->Create(), etc
void CreatePopup(); void CreatePopup();
// Destroy popup window and all related constructs
void DestroyPopup();
// override the base class virtuals involved in geometry calculations // override the base class virtuals involved in geometry calculations
virtual void DoMoveWindow(int x, int y, int width, int height); virtual void DoMoveWindow(int x, int y, int width, int height);
virtual wxSize DoGetBestSize() const; virtual wxSize DoGetBestSize() const;

View File

@@ -125,7 +125,7 @@ protected:
// sends combobox select event from the parent combo control // sends combobox select event from the parent combo control
void SendComboBoxEvent( int selection ); void SendComboBoxEvent( int selection );
// gets value, sends event and dismisses // gets value, sends event and dismisses
void DismissWithEvent(); void DismissWithEvent();
@@ -221,7 +221,7 @@ public:
const wxPoint& pos, const wxPoint& pos,
const wxSize& size, const wxSize& size,
const wxArrayString& choices, const wxArrayString& choices,
long style = 0, long style,
const wxValidator& validator = wxDefaultValidator, const wxValidator& validator = wxDefaultValidator,
const wxString& name = wxComboBoxNameStr); const wxString& name = wxComboBoxNameStr);
@@ -262,6 +262,13 @@ public:
virtual int GetSelection() const; virtual int GetSelection() const;
virtual void SetSelection(int n) { Select(n); } virtual void SetSelection(int n) { Select(n); }
// Prevent a method from being hidden
virtual void SetSelection(long from, long to)
{
wxComboCtrl::SetSelection(from,to);
}
wxCONTROL_ITEMCONTAINER_CLIENTDATAOBJECT_RECAST wxCONTROL_ITEMCONTAINER_CLIENTDATAOBJECT_RECAST
protected: protected:
@@ -294,5 +301,6 @@ private:
#endif // wxUSE_ODCOMBOBOX #endif // wxUSE_ODCOMBOBOX
#endif #endif
// _WX_ODCOMBO_H_ // _WX_ODCOMBO_H_

View File

@@ -774,15 +774,7 @@ wxComboCtrlBase::~wxComboCtrlBase()
m_toplevEvtHandler = (wxEvtHandler*) NULL; m_toplevEvtHandler = (wxEvtHandler*) NULL;
#endif #endif
if ( m_popup ) DestroyPopup();
m_popup->RemoveEventHandler(m_popupExtraHandler);
delete m_popupExtraHandler;
HidePopup();
delete m_popupInterface;
delete m_winPopup;
RemoveEventHandler(m_extraEvtHandler); RemoveEventHandler(m_extraEvtHandler);
@@ -1531,19 +1523,38 @@ void wxComboCtrlBase::CreatePopup()
popupInterface->m_iFlags |= wxCP_IFLAG_CREATED; popupInterface->m_iFlags |= wxCP_IFLAG_CREATED;
} }
// Destroy popup window and the child control
void wxComboCtrlBase::DestroyPopup()
{
if ( m_popup )
m_popup->RemoveEventHandler(m_popupExtraHandler);
delete m_popupExtraHandler;
HidePopup();
delete m_popupInterface;
if ( m_winPopup )
m_winPopup->Destroy();
m_popupInterface = (wxComboPopup*) NULL;
m_winPopup = (wxWindow*) NULL;
m_popup = (wxWindow*) NULL;
}
void wxComboCtrlBase::SetPopupControl( wxComboPopup* iface ) void wxComboCtrlBase::SetPopupControl( wxComboPopup* iface )
{ {
wxCHECK_RET( iface, wxT("no popup interface set for wxComboCtrl") ); wxCHECK_RET( iface, wxT("no popup interface set for wxComboCtrl") );
delete m_popupInterface; DestroyPopup();
delete m_winPopup;
iface->InitBase(this); iface->InitBase(this);
iface->Init(); iface->Init();
m_popupInterface = iface; m_popupInterface = iface;
if ( !iface->LazyCreate() || m_winPopup ) if ( !iface->LazyCreate() )
{ {
CreatePopup(); CreatePopup();
} }