#if wxUSE_COMBOCTRL
+#include "wx/combobox.h"
+
#ifndef WX_PRECOMP
#include "wx/log.h"
- #include "wx/combobox.h"
#include "wx/dcclient.h"
#include "wx/settings.h"
#include "wx/dialog.h"
m_extraEvtHandler = inputHandler;
}
-void wxComboCtrlBase::CreateTextCtrl( int extraStyle, const wxValidator& validator )
+void
+wxComboCtrlBase::CreateTextCtrl(int style, const wxValidator& validator)
{
if ( !(m_windowStyle & wxCB_READONLY) )
{
- m_text = new wxTextCtrl(this,
- wxID_ANY,
- m_valueString,
- wxDefaultPosition,
- wxDefaultSize,
- // wxTE_PROCESS_TAB is needed because on Windows, wxTAB_TRAVERSAL is
- // not used by the wxPropertyGrid and therefore the tab is
- // processed by looking at ancestors to see if they have
- // wxTAB_TRAVERSAL. The navigation event is then sent to
- // the wrong window.
- wxTE_PROCESS_TAB |
- wxTE_PROCESS_ENTER |
- extraStyle,
- validator);
+ // wxTE_PROCESS_TAB is needed because on Windows, wxTAB_TRAVERSAL is
+ // not used by the wxPropertyGrid and therefore the tab is processed by
+ // looking at ancestors to see if they have wxTAB_TRAVERSAL. The
+ // navigation event is then sent to the wrong window.
+ style |= wxTE_PROCESS_TAB;
+
+ if ( HasFlag(wxTE_PROCESS_ENTER) )
+ style |= wxTE_PROCESS_ENTER;
+
+ m_text = new wxTextCtrl(this, wxID_ANY, m_valueString,
+ wxDefaultPosition, wxDefaultSize,
+ style, validator);
// This is required for some platforms (GTK+ atleast)
m_text->SetSizeHints(2,4);
if ( (sz.y-(customBorder*2)) < butHeight && btnWidth == 0 )
{
int newY = butHeight+(customBorder*2);
- SetClientSize(-1,newY);
+ SetClientSize(wxDefaultCoord,newY);
sz.y = newY;
}
}
// ----------------------------------------------------------------------------
// draw focus background on area in a way typical on platform
-void wxComboCtrlBase::DrawFocusBackground( wxDC& dc, const wxRect& rect, int flags )
+void wxComboCtrlBase::DrawFocusBackground( wxDC& dc, const wxRect& rect, int flags ) const
{
wxSize sz = GetClientSize();
bool isEnabled;
wxRect selRect(rect);
selRect.y += focusSpacingY;
selRect.height -= (focusSpacingY*2);
- selRect.x += m_widthCustomPaint + focusSpacingX;
- selRect.width -= m_widthCustomPaint + (focusSpacingX*2);
+
+ int wcp = 0;
+
+ if ( !(flags & wxCONTROL_ISSUBMENU) )
+ wcp += m_widthCustomPaint;
+
+ selRect.x += wcp + focusSpacingX;
+ selRect.width -= wcp + (focusSpacingX*2);
wxColour bgCol;
void wxComboCtrlBase::OnTextCtrlEvent(wxCommandEvent& event)
{
- // Change event id and relay it forward
+ // Change event id, object and string before relaying it forward
event.SetId(GetId());
+ wxString s = event.GetString();
+ event.SetEventObject(this);
+ event.SetString(s);
event.Skip();
}
if ( m_winPopup )
m_winPopup->Destroy();
+ m_popupExtraHandler = (wxEvtHandler*) NULL;
m_popupInterface = (wxComboPopup*) NULL;
m_winPopup = (wxWindow*) NULL;
m_popup = (wxWindow*) NULL;
}
-void wxComboCtrlBase::SetPopupControl( wxComboPopup* iface )
+void wxComboCtrlBase::DoSetPopupControl(wxComboPopup* iface)
{
wxCHECK_RET( iface, wxT("no popup interface set for wxComboCtrl") );