[ 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:
@@ -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;
|
||||||
|
@@ -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_
|
||||||
|
@@ -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();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user