X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a57d600f1aa4bae88f4c9b8d89a35332c412939e..6003de2fe44e4e019580bfb42f526b8310fbb610:/src/generic/combog.cpp diff --git a/src/generic/combog.cpp b/src/generic/combog.cpp index d99937a3fe..b8a193a68c 100644 --- a/src/generic/combog.cpp +++ b/src/generic/combog.cpp @@ -86,29 +86,29 @@ // ---------------------------------------------------------------------------- -// wxGenericComboControl +// wxGenericComboCtrl // ---------------------------------------------------------------------------- -BEGIN_EVENT_TABLE(wxGenericComboControl, wxComboCtrlBase) - EVT_PAINT(wxGenericComboControl::OnPaintEvent) - EVT_MOUSE_EVENTS(wxGenericComboControl::OnMouseEvent) +BEGIN_EVENT_TABLE(wxGenericComboCtrl, wxComboCtrlBase) + EVT_PAINT(wxGenericComboCtrl::OnPaintEvent) + EVT_MOUSE_EVENTS(wxGenericComboCtrl::OnMouseEvent) END_EVENT_TABLE() -IMPLEMENT_DYNAMIC_CLASS(wxGenericComboControl, wxComboCtrlBase) +IMPLEMENT_DYNAMIC_CLASS(wxGenericComboCtrl, wxComboCtrlBase) -void wxGenericComboControl::Init() +void wxGenericComboCtrl::Init() { } -bool wxGenericComboControl::Create(wxWindow *parent, - wxWindowID id, - const wxString& value, - const wxPoint& pos, - const wxSize& size, - long style, - const wxValidator& validator, - const wxString& name) +bool wxGenericComboCtrl::Create(wxWindow *parent, + wxWindowID id, + const wxString& value, + const wxPoint& pos, + const wxSize& size, + long style, + const wxValidator& validator, + const wxString& name) { // Set border @@ -120,12 +120,12 @@ bool wxGenericComboControl::Create(wxWindow *parent, border = wxBORDER_SIMPLE; #elif defined(__WXMSW__) // For XP, have 1-width custom border, for older version use sunken - if ( wxUxThemeEngine::GetIfActive() ) + /*if ( wxUxThemeEngine::GetIfActive() ) { border = wxBORDER_NONE; m_widthCustomBorder = 1; } - else + else*/ border = wxBORDER_SUNKEN; #elif defined(__WXGTK__) border = wxBORDER_NONE; @@ -148,35 +148,35 @@ bool wxGenericComboControl::Create(wxWindow *parent, // create main window if ( !wxComboCtrlBase::Create(parent, - id, - value, - wxDefaultPosition, - wxDefaultSize, - style | wxFULL_REPAINT_ON_RESIZE, - wxDefaultValidator, - name) ) + 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; } -wxGenericComboControl::~wxGenericComboControl() +wxGenericComboCtrl::~wxGenericComboCtrl() { } -void wxGenericComboControl::OnResize() +void wxGenericComboCtrl::OnResize() { // Recalculates button and textctrl areas @@ -198,10 +198,10 @@ void wxGenericComboControl::OnResize() PositionTextCtrl( TEXTCTRLXADJUST, TEXTCTRLYADJUST ); } -void wxGenericComboControl::OnPaintEvent( wxPaintEvent& WXUNUSED(event) ) +void wxGenericComboCtrl::OnPaintEvent( wxPaintEvent& WXUNUSED(event) ) { wxSize sz = GetClientSize(); - wxBufferedPaintDC dc(this,GetBufferBitmap(sz)); + wxAutoBufferedPaintDC dc(this); const wxRect& rectb = m_btnArea; wxRect rect = m_tcArea; @@ -278,21 +278,16 @@ void wxGenericComboControl::OnPaintEvent( wxPaintEvent& WXUNUSED(event) ) } } -void wxGenericComboControl::OnMouseEvent( wxMouseEvent& event ) +void wxGenericComboCtrl::OnMouseEvent( wxMouseEvent& event ) { - bool isOnButtonArea = m_btnArea.Inside(event.m_x,event.m_y); + int mx = event.m_x; + bool isOnButtonArea = m_btnArea.Contains(mx,event.m_y); int handlerFlags = isOnButtonArea ? wxCC_MF_ON_BUTTON : 0; - // Preprocessing fabricates double-clicks and prevents - // (it may also do other common things in future) if ( PreprocessMouseEvent(event,handlerFlags) ) return; -#ifdef __WXMSW__ - const bool ctrlIsButton = true; -#else - const bool ctrlIsButton = false; -#endif + const bool ctrlIsButton = wxPlatformIs(wxOS_WINDOWS); if ( ctrlIsButton && (m_windowStyle & (wxCC_SPECIAL_DCLICK|wxCB_READONLY)) == wxCB_READONLY ) @@ -305,8 +300,11 @@ void wxGenericComboControl::OnMouseEvent( wxMouseEvent& event ) } else { - if ( isOnButtonArea || HasCapture() ) + if ( isOnButtonArea || HasCapture() || + (m_widthCustomPaint && mx < (m_tcArea.x+m_widthCustomPaint)) ) { + handlerFlags |= wxCC_MF_ON_CLICK_AREA; + if ( HandleButtonMouseEvent(event,handlerFlags) ) return; } @@ -325,11 +323,33 @@ void wxGenericComboControl::OnMouseEvent( wxMouseEvent& event ) } +bool wxGenericComboCtrl::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, - long numArg, - const wxString& strArg) +bool wxGenericComboCtrl::PerformAction(const wxControlAction& action, + long numArg, + const wxString& strArg) { bool processed = false; if ( action == wxACTION_COMBOBOX_POPUP ) @@ -365,7 +385,7 @@ bool wxGenericComboControl::PerformAction(const wxControlAction& action, // 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(wxComboCtrl, wxGenericComboControl) +IMPLEMENT_DYNAMIC_CLASS(wxComboCtrl, wxGenericComboCtrl) #endif #endif // !wxCOMBOCONTROL_FULLY_FEATURED