Revert making wxComboCtrl a wxCompositeWindow
Commit 70e9dbd756
has fixed #18394 but unfortunately it also caused several other issues observed e.g. in #18540. Apparently wxComboCtrl doesn't fit well to the wxCompositeWindow framework - especially when wxCB_READONLY flag is set and there is no main editor control what is problematic for wxCompositeWindow implementation. At the moment it is more pragmatic to go back to the original wxComboCtrl concept as a plain compound control to fix the regression and try to fix #18394 in an alternative way.
Closes #18540.
See #18394.
This commit is contained in:
@@ -46,7 +46,6 @@
|
||||
#include "wx/bitmap.h" // wxBitmap used by-value
|
||||
#include "wx/textentry.h"
|
||||
#include "wx/time.h" // needed for wxMilliClock_t
|
||||
#include "wx/compositewin.h" // wxComboCtrlBase declaration
|
||||
|
||||
class WXDLLIMPEXP_FWD_CORE wxTextCtrl;
|
||||
class WXDLLIMPEXP_FWD_CORE wxComboPopup;
|
||||
@@ -141,14 +140,14 @@ struct wxComboCtrlFeatures
|
||||
};
|
||||
|
||||
|
||||
class WXDLLIMPEXP_CORE wxComboCtrlBase : public wxCompositeWindow<wxControl>,
|
||||
class WXDLLIMPEXP_CORE wxComboCtrlBase : public wxControl,
|
||||
public wxTextEntry
|
||||
{
|
||||
friend class wxComboPopup;
|
||||
friend class wxComboPopupEvtHandler;
|
||||
public:
|
||||
// ctors and such
|
||||
wxComboCtrlBase() : wxCompositeWindow<wxControl>(), wxTextEntry() { Init(); }
|
||||
wxComboCtrlBase() : wxControl(), wxTextEntry() { Init(); }
|
||||
|
||||
bool Create(wxWindow *parent,
|
||||
wxWindowID id,
|
||||
@@ -473,6 +472,7 @@ public:
|
||||
{ return m_mainCtrlWnd; }
|
||||
|
||||
// also set the embedded wxTextCtrl colours
|
||||
virtual bool SetForegroundColour(const wxColour& colour) wxOVERRIDE;
|
||||
virtual bool SetBackgroundColour(const wxColour& colour) wxOVERRIDE;
|
||||
|
||||
protected:
|
||||
@@ -598,6 +598,10 @@ protected:
|
||||
// Flags are same as for DoShowPopup.
|
||||
virtual bool AnimateShow( const wxRect& rect, int flags );
|
||||
|
||||
#if wxUSE_TOOLTIPS
|
||||
virtual void DoSetToolTip( wxToolTip *tip ) wxOVERRIDE;
|
||||
#endif
|
||||
|
||||
// protected wxTextEntry methods
|
||||
virtual void DoSetValue(const wxString& value, int flags) wxOVERRIDE;
|
||||
virtual wxString DoGetValue() const wxOVERRIDE;
|
||||
@@ -607,8 +611,6 @@ protected:
|
||||
virtual bool DoSetMargins(const wxPoint& pt) wxOVERRIDE;
|
||||
virtual wxPoint DoGetMargins() const wxOVERRIDE;
|
||||
|
||||
virtual wxWindowList GetCompositeWindowParts() const wxOVERRIDE;
|
||||
|
||||
// This is used when m_text is hidden (readonly).
|
||||
wxString m_valueString;
|
||||
|
||||
|
@@ -1535,6 +1535,37 @@ bool wxComboCtrlBase::SetFont ( const wxFont& font )
|
||||
return true;
|
||||
}
|
||||
|
||||
#if wxUSE_TOOLTIPS
|
||||
void wxComboCtrlBase::DoSetToolTip(wxToolTip *tooltip)
|
||||
{
|
||||
wxControl::DoSetToolTip(tooltip);
|
||||
|
||||
// Set tool tip for button and text box
|
||||
if ( tooltip )
|
||||
{
|
||||
const wxString &tip = tooltip->GetTip();
|
||||
if ( m_text ) m_text->SetToolTip(tip);
|
||||
if ( m_btn ) m_btn->SetToolTip(tip);
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( m_text ) m_text->SetToolTip( NULL );
|
||||
if ( m_btn ) m_btn->SetToolTip( NULL );
|
||||
}
|
||||
}
|
||||
#endif // wxUSE_TOOLTIPS
|
||||
|
||||
bool wxComboCtrlBase::SetForegroundColour(const wxColour& colour)
|
||||
{
|
||||
if ( wxControl::SetForegroundColour(colour) )
|
||||
{
|
||||
if ( m_text )
|
||||
m_text->SetForegroundColour(colour);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool wxComboCtrlBase::SetBackgroundColour(const wxColour& colour)
|
||||
{
|
||||
if ( m_text )
|
||||
@@ -2717,16 +2748,6 @@ void wxComboCtrlBase::SetTextCtrlStyle( int style )
|
||||
m_text->SetWindowStyle(style);
|
||||
}
|
||||
|
||||
wxWindowList wxComboCtrlBase::GetCompositeWindowParts() const
|
||||
{
|
||||
wxWindowList parts;
|
||||
if ( m_text )
|
||||
parts.push_back(m_text);
|
||||
if ( m_btn )
|
||||
parts.push_back(m_btn);
|
||||
return parts;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// wxTextEntry interface
|
||||
// ----------------------------------------------------------------------------
|
||||
|
Reference in New Issue
Block a user