X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6d0ce565ff6a0db2e7c6e3240ef4cf6fe7950a35..1bc7969717b319226d221ab84ebda3298d928b0c:/include/wx/combo.h diff --git a/include/wx/combo.h b/include/wx/combo.h index a1ef01b268..fdece4b675 100644 --- a/include/wx/combo.h +++ b/include/wx/combo.h @@ -1,8 +1,8 @@ /////////////////////////////////////////////////////////////////////////////// // Name: wx/combo.h -// Purpose: wxComboControl declaration +// Purpose: wxComboCtrl declaration // Author: Jaakko Salli -// Modified by: +// Modified by: // Created: Apr-30-2006 // RCS-ID: $Id$ // Copyright: (c) Jaakko Salli @@ -15,7 +15,7 @@ /* A few words about all the classes defined in this file are probably in - order: why do we need extra wxComboControl and wxComboPopup classes? + order: why do we need extra wxComboCtrl and wxComboPopup classes? This is because a traditional combobox is a combination of a text control (with a button allowing to open the pop down list) with a listbox and @@ -23,9 +23,9 @@ combinations - in fact, we want to allow anything at all to be used as pop down list, not just a wxListBox. - So we define a base wxComboControl which can use any control as pop down + So we define a base wxComboCtrl which can use any control as pop down list and wxComboBox deriving from it which implements the standard wxWidgets - combobox API. wxComboControl needs to be told somehow which control to use + combobox API. wxComboCtrl needs to be told somehow which control to use and this is done by SetPopupControl(). However, we need something more than just a wxControl in this method as, for example, we need to call SetSelection("initial text value") and wxControl doesn't have such method. @@ -40,19 +40,17 @@ #include "wx/defs.h" -#if wxUSE_COMBOCONTROL +#if wxUSE_COMBOCTRL - -#include "wx/textctrl.h" -#include "wx/button.h" -#include "wx/combobox.h" +#include "wx/control.h" #include "wx/renderer.h" // this is needed for wxCONTROL_XXX flags +#include "wx/bitmap.h" // wxBitmap used by-value - +class WXDLLIMPEXP_CORE wxTextCtrl; class WXDLLEXPORT wxComboPopup; // -// New window styles for wxComboControlBase +// New window styles for wxComboCtrlBase // enum { @@ -69,7 +67,7 @@ enum }; -// wxComboControl internal flags +// wxComboCtrl internal flags enum { // First those that can be passed to Customize. @@ -100,8 +98,8 @@ enum }; -// Namespace for wxComboControl feature flags -struct wxComboControlFeatures +// Namespace for wxComboCtrl feature flags +struct wxComboCtrlFeatures { enum { @@ -128,12 +126,12 @@ struct wxComboControlFeatures }; -class WXDLLEXPORT wxComboControlBase : public wxControl +class WXDLLEXPORT wxComboCtrlBase : public wxControl { friend class wxComboPopup; public: // ctors and such - wxComboControlBase() : wxControl() { Init(); } + wxComboCtrlBase() : wxControl() { Init(); } bool Create(wxWindow *parent, wxWindowID id, @@ -144,7 +142,7 @@ public: const wxValidator& validator, const wxString& name); - virtual ~wxComboControlBase(); + virtual ~wxComboCtrlBase(); // show/hide popup window virtual void ShowPopup(); @@ -158,10 +156,17 @@ public: // set interface class instance derived from wxComboPopup // NULL popup can be used to indicate default in a derived class - virtual void SetPopupControl( wxComboPopup* popup ); + void SetPopupControl( wxComboPopup* popup ) + { + DoSetPopupControl(popup); + } // get interface class instance derived from wxComboPopup - wxComboPopup* GetPopupControl() const { return m_popupInterface; } + wxComboPopup* GetPopupControl() + { + EnsurePopupControl(); + return m_popupInterface; + } // get the popup window containing the popup control wxWindow *GetPopupWindow() const { return m_winPopup; } @@ -177,9 +182,6 @@ public: virtual bool Enable(bool enable = true); virtual bool Show(bool show = true); virtual bool SetFont(const wxFont& font); -#if wxUSE_TOOLTIPS - virtual void DoSetToolTip( wxToolTip *tip ); -#endif // wxTextCtrl methods - for readonly combo they should return // without errors. @@ -305,7 +307,7 @@ public: // flags: wxRendererNative flags: wxCONTROL_ISSUBMENU: is drawing a list item instead of combo control // wxCONTROL_SELECTED: list item is selected // wxCONTROL_DISABLED: control/item is disabled - virtual void DrawFocusBackground( wxDC& dc, const wxRect& rect, int flags ); + virtual void DrawFocusBackground( wxDC& dc, const wxRect& rect, int flags ) const; // Returns true if focus indicator should be drawn in the control. bool ShouldDrawFocus() const @@ -376,10 +378,15 @@ protected: // Creates popup window, calls interface->Create(), etc void CreatePopup(); + // Destroy popup window and all related constructs + void DestroyPopup(); + // override the base class virtuals involved in geometry calculations - virtual void DoMoveWindow(int x, int y, int width, int height); virtual wxSize DoGetBestSize() const; + // NULL popup can be used to indicate default in a derived class + virtual void DoSetPopupControl(wxComboPopup* popup); + // ensures there is atleast the default popup void EnsurePopupControl(); @@ -398,12 +405,16 @@ protected: void OnTextCtrlEvent(wxCommandEvent& event); void OnSysColourChanged(wxSysColourChangedEvent& event); - // Set customization flags (directs how wxComboControlBase helpers behave) + // Set customization flags (directs how wxComboCtrlBase helpers behave) void Customize( wxUint32 flags ) { m_iFlags |= flags; } // Dispatches size event and refreshes void RecalcAndRefresh(); +#if wxUSE_TOOLTIPS + virtual void DoSetToolTip( wxToolTip *tip ); +#endif + // Used by OnPaints of derived classes wxBitmap& GetBufferBitmap(const wxSize& sz) const; @@ -509,30 +520,30 @@ private: DECLARE_EVENT_TABLE() - DECLARE_ABSTRACT_CLASS(wxComboControlBase) + DECLARE_ABSTRACT_CLASS(wxComboCtrlBase) }; // ---------------------------------------------------------------------------- // wxComboPopup is the interface which must be implemented by a control to be -// used as a popup by wxComboControl +// used as a popup by wxComboCtrl // ---------------------------------------------------------------------------- // wxComboPopup internal flags enum { - wxCP_IFLAG_CREATED = 0x0001 // Set by wxComboControlBase after Create is called + wxCP_IFLAG_CREATED = 0x0001 // Set by wxComboCtrlBase after Create is called }; class WXDLLEXPORT wxComboPopup { - friend class wxComboControlBase; + friend class wxComboCtrlBase; public: wxComboPopup() { - m_combo = (wxComboControlBase*) NULL; + m_combo = (wxComboCtrlBase*) NULL; m_iFlags = 0; } @@ -568,12 +579,12 @@ public: // Default implementation draws value as string. virtual void PaintComboControl( wxDC& dc, const wxRect& rect ); - // Receives key events from the parent wxComboControl. + // Receives key events from the parent wxComboCtrl. // Events not handled should be skipped, as usual. virtual void OnComboKeyEvent( wxKeyEvent& event ); // Implement if you need to support special action when user - // double-clicks on the parent wxComboControl. + // double-clicks on the parent wxComboCtrl. virtual void OnComboDoubleClick(); // Return final size of popup. Called on every popup, just prior to OnShow. @@ -603,17 +614,17 @@ public: } // Default PaintComboControl behaviour - static void DefaultPaintComboControl( wxComboControlBase* combo, + static void DefaultPaintComboControl( wxComboCtrlBase* combo, wxDC& dc, const wxRect& rect ); protected: - wxComboControlBase* m_combo; + wxComboCtrlBase* m_combo; wxUint32 m_iFlags; private: - // Called in wxComboControlBase::SetPopupControl - void InitBase(wxComboControlBase *combo) + // Called in wxComboCtrlBase::SetPopupControl + void InitBase(wxComboCtrlBase *combo) { m_combo = combo; } @@ -633,7 +644,7 @@ private: // Any ports may need generic as an alternative #include "wx/generic/combo.h" -#endif // wxUSE_COMBOCONTROL +#endif // wxUSE_COMBOCTRL #endif // _WX_COMBOCONTROL_H_BASE_