X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/06077aaf2c11135bb9ca18ef33181ab18ac7480e..56c6aab7e6fe6dccd753fd94d07a44ded2ba70d1:/include/wx/combo.h diff --git a/include/wx/combo.h b/include/wx/combo.h index e3723d0794..a504c1543e 100644 --- a/include/wx/combo.h +++ b/include/wx/combo.h @@ -85,7 +85,9 @@ enum // Internal use: Set wxTAB_TRAVERSAL to parent when popup is dismissed wxCC_IFLAG_PARENT_TAB_TRAVERSAL = 0x0800, // Internal use: Secondary popup window type should be used (if available). - wxCC_IFLAG_USE_ALT_POPUP = 0x1000 + wxCC_IFLAG_USE_ALT_POPUP = 0x1000, + // Internal use: Skip popup animation. + wxCC_IFLAG_DISABLE_POPUP_ANIM = 0x2000 }; @@ -152,7 +154,7 @@ public: virtual void OnButtonClick(); // return true if the popup is currently shown - bool IsPopupShown() const { return m_isPopupShown; } + bool IsPopupShown() const { return m_popupWinState == Visible; } // set interface class instance derived from wxComboPopup // NULL popup can be used to indicate default in a derived class @@ -322,6 +324,15 @@ public: m_iFlags &= ~wxCC_IFLAG_USE_ALT_POPUP; } + // Call with false to disable popup animation, if any. + void EnablePopupAnimation( bool enable = true ) + { + if ( enable ) + m_iFlags &= ~wxCC_IFLAG_DISABLE_POPUP_ANIM; + else + m_iFlags |= wxCC_IFLAG_DISABLE_POPUP_ANIM; + } + // // Utilies needed by the popups or native implementations // @@ -350,7 +361,7 @@ public: bool ShouldDrawFocus() const { const wxWindow* curFocus = FindFocus(); - return ( !m_isPopupShown && + return ( !IsPopupShown() && (curFocus == this || (m_btn && curFocus == m_btn)) && (m_windowStyle & wxCB_READONLY) ); } @@ -370,6 +381,22 @@ public: // common code to be called on popup hide/dismiss void OnPopupDismiss(); + // PopupShown states + enum + { + Hidden = 0, + //Closing = 1, + Animating = 2, + Visible = 3 + }; + + bool IsPopupWindowState( int state ) const { return (state == m_popupWinState) ? true : false; } + + wxByte GetPopupWindowState() const { return m_popupWinState; } + + // Set value returned by GetMainWindowOfCompositeControl + void SetCtrlMainWnd( wxWindow* wnd ) { m_mainCtrlWnd = wnd; } + protected: // @@ -447,10 +474,30 @@ protected: // Dispatches size event and refreshes void RecalcAndRefresh(); + // Flags for DoShowPopup and AnimateShow + enum + { + ShowBelow = 0x0000, // Showing popup below the control + ShowAbove = 0x0001, // Showing popup above the control + CanDeferShow = 0x0002 // Can only return true from AnimateShow if this is set + }; + + // Shows and positions the popup. + virtual void DoShowPopup( const wxRect& rect, int flags ); + + // Implement in derived class to create a drop-down animation. + // Return true if finished immediately. Otherwise popup is only + // shown when the derived class call DoShowPopup. + // Flags are same as for DoShowPopup. + virtual bool AnimateShow( const wxRect& rect, int flags ); + #if wxUSE_TOOLTIPS virtual void DoSetToolTip( wxToolTip *tip ); #endif + virtual wxWindow *GetMainWindowOfCompositeControl() + { return m_mainCtrlWnd; } + // This is used when m_text is hidden (readonly). wxString m_valueString; @@ -479,6 +526,9 @@ protected: // this is for the popup window wxEvtHandler* m_popupWinEvtHandler; + // main (ie. topmost) window of a composite control (default = this) + wxWindow* m_mainCtrlWnd; + // used to prevent immediate re-popupping incase closed popup // by clicking on the combo control (needed because of inconsistent // transient implementation across platforms). @@ -540,7 +590,7 @@ protected: bool m_blankButtonBg; // is the popup window currenty shown? - bool m_isPopupShown; + wxByte m_popupWinState; private: void Init();