/////////////////////////////////////////////////////////////////////////////
-// Name: combog.cpp
-// Purpose: Generic wxComboControl
+// Name: src/generic/combog.cpp
+// Purpose: Generic wxComboCtrl
// Author: Jaakko Salli
// Modified by:
// Created: Apr-30-2006
#pragma hdrstop
#endif
-#if wxUSE_COMBOCONTROL
+#if wxUSE_COMBOCTRL
+
+#include "wx/combo.h"
#ifndef WX_PRECOMP
#include "wx/log.h"
#include "wx/dcbuffer.h"
-#include "wx/combo.h"
-
-
// ----------------------------------------------------------------------------
// Some constant adjustments to make the generic more bearable
// wxGenericComboControl
// ----------------------------------------------------------------------------
-BEGIN_EVENT_TABLE(wxGenericComboControl, wxComboControlBase)
+BEGIN_EVENT_TABLE(wxGenericComboControl, wxComboCtrlBase)
EVT_PAINT(wxGenericComboControl::OnPaintEvent)
EVT_MOUSE_EVENTS(wxGenericComboControl::OnMouseEvent)
END_EVENT_TABLE()
-IMPLEMENT_DYNAMIC_CLASS(wxGenericComboControl, wxComboControlBase)
+IMPLEMENT_DYNAMIC_CLASS(wxGenericComboControl, wxComboCtrlBase)
void wxGenericComboControl::Init()
{
m_iFlags |= wxCC_POPUP_ON_MOUSE_UP;
// create main window
- if ( !wxComboControlBase::Create(parent,
- id,
- value,
- wxDefaultPosition,
- wxDefaultSize,
- style | wxFULL_REPAINT_ON_RESIZE,
- wxDefaultValidator,
- name) )
+ if ( !wxComboCtrlBase::Create(parent,
+ id,
+ value,
+ pos,
+ size,
+ style | wxFULL_REPAINT_ON_RESIZE,
+ wxDefaultValidator,
+ name) )
return false;
// Create textctrl, if necessary
CreateTextCtrl( wxNO_BORDER, validator );
// Add keyboard input handlers for main control and textctrl
- InstallInputHandlers( true );
+ InstallInputHandlers();
// Set background
SetBackgroundStyle( wxBG_STYLE_CUSTOM ); // for double-buffering
- // SetSize should be called last
- SetSize(pos.x,pos.y,size.x,size.y);
+ // SetBestSize should be called last
+ SetBestSize(size);
return true;
}
DrawButton(dc,rectb,true);
// paint required portion on the control
- if ( !m_text || m_widthCustomPaint )
+ if ( (!m_text || m_widthCustomPaint) )
{
wxASSERT( m_widthCustomPaint >= 0 );
dc.SetFont( GetFont() );
dc.SetClippingRegion(rect);
- m_popupInterface->PaintComboControl(dc,rect);
+ if ( m_popupInterface )
+ m_popupInterface->PaintComboControl(dc,rect);
+ else
+ wxComboPopup::DefaultPaintComboControl(this,dc,rect);
}
}
if ( PreprocessMouseEvent(event,handlerFlags) )
return;
- if ( (m_windowStyle & (wxCC_SPECIAL_DCLICK|wxCB_READONLY)) == wxCB_READONLY )
+ const bool ctrlIsButton = wxPlatformIs(wxOS_WINDOWS);
+
+ if ( ctrlIsButton &&
+ (m_windowStyle & (wxCC_SPECIAL_DCLICK|wxCB_READONLY)) == wxCB_READONLY )
{
// if no textctrl and no special double-click, then the entire control acts
// as a button
}
+bool wxGenericComboControl::IsKeyPopupToggle(const wxKeyEvent& event) const
+{
+ int keycode = event.GetKeyCode();
+ bool isPopupShown = IsPopupShown();
+
+ // This code is AFAIK appropriate for wxGTK.
+
+ if ( isPopupShown )
+ {
+ if ( keycode == WXK_ESCAPE ||
+ ( keycode == WXK_UP && event.AltDown() ) )
+ return true;
+ }
+ else
+ {
+ if ( keycode == WXK_DOWN && event.AltDown() )
+ return true;
+ }
+
+ return false;
+}
+
#ifdef __WXUNIVERSAL__
bool wxGenericComboControl::PerformAction(const wxControlAction& action,
#endif // __WXUNIVERSAL__
-// If native wxComboControl was not defined, then prepare a simple
+// If native wxComboCtrl was not defined, then prepare a simple
// front-end so that wxRTTI works as expected.
#ifndef _WX_COMBOCONTROL_H_
-IMPLEMENT_DYNAMIC_CLASS(wxComboControl, wxGenericComboControl)
+IMPLEMENT_DYNAMIC_CLASS(wxComboCtrl, wxGenericComboControl)
#endif
#endif // !wxCOMBOCONTROL_FULLY_FEATURED
-#endif // wxUSE_COMBOCONTROL
+#endif // wxUSE_COMBOCTRL