X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c757b5fee093bbc3686f1e474316396b742fb888..f77c0fe312a1dedde4a86c9b967d095802c10384:/include/wx/pickerbase.h diff --git a/include/wx/pickerbase.h b/include/wx/pickerbase.h index 64714f4399..b7a696d7eb 100644 --- a/include/wx/pickerbase.h +++ b/include/wx/pickerbase.h @@ -13,8 +13,11 @@ #define _WX_PICKERBASE_H_BASE_ #include "wx/control.h" +#include "wx/sizer.h" +#include "wx/containr.h" -class WXDLLIMPEXP_CORE wxTextCtrl; +class WXDLLIMPEXP_FWD_CORE wxTextCtrl; +class WXDLLIMPEXP_FWD_CORE wxToolTip; extern WXDLLEXPORT_DATA(const wxChar) wxButtonNameStr[]; @@ -33,31 +36,67 @@ class WXDLLIMPEXP_CORE wxPickerBase : public wxControl { public: // ctor: text is the associated text control - wxPickerBase() : m_text(NULL), m_picker(NULL), - m_margin(5), m_textProportion(2) {} - virtual ~wxPickerBase(); + wxPickerBase() : m_text(NULL), m_picker(NULL), m_sizer(NULL) + { WX_INIT_CONTROL_CONTAINER(); } + virtual ~wxPickerBase() {} // if present, intercepts wxPB_USE_TEXTCTRL style and creates the text control // The 3rd argument is the initial wxString to display in the text control - bool CreateBase(wxWindow *parent, wxWindowID id, - const wxString& text = wxEmptyString, - const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, long style = 0, - const wxValidator& validator = wxDefaultValidator, - const wxString& name = wxButtonNameStr); - + bool CreateBase(wxWindow *parent, + wxWindowID id, + const wxString& text = wxEmptyString, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = 0, + const wxValidator& validator = wxDefaultValidator, + const wxString& name = wxButtonNameStr); public: // public API // margin between the text control and the picker - void SetInternalMargin(int newmargin); - int GetInternalMargin() const { return m_margin; } - - // proportion of the text control respect the picker - // (which has a fixed proportion value of 1) - void SetTextCtrlProportion(int prop) { wxASSERT(prop>=1); m_textProportion=prop; } - int GetTextCtrlProportion() const { return m_textProportion; } + void SetInternalMargin(int newmargin) + { GetTextCtrlItem()->SetBorder(newmargin); m_sizer->Layout(); } + int GetInternalMargin() const + { return GetTextCtrlItem()->GetBorder(); } + + // proportion of the text control + void SetTextCtrlProportion(int prop) + { GetTextCtrlItem()->SetProportion(prop); m_sizer->Layout(); } + int GetTextCtrlProportion() const + { return GetTextCtrlItem()->GetProportion(); } + + // proportion of the picker control + void SetPickerCtrlProportion(int prop) + { GetPickerCtrlItem()->SetProportion(prop); m_sizer->Layout(); } + int GetPickerCtrlProportion() const + { return GetPickerCtrlItem()->GetProportion(); } + + bool IsTextCtrlGrowable() const + { return (GetTextCtrlItem()->GetFlag() & wxGROW) != 0; } + void SetTextCtrlGrowable(bool grow = true) + { + int f = GetDefaultTextCtrlFlag(); + if ( grow ) + f |= wxGROW; + else + f &= ~wxGROW; + + GetTextCtrlItem()->SetFlag(f); + } + + bool IsPickerCtrlGrowable() const + { return (GetPickerCtrlItem()->GetFlag() & wxGROW) != 0; } + void SetPickerCtrlGrowable(bool grow = true) + { + int f = GetDefaultPickerCtrlFlag(); + if ( grow ) + f |= wxGROW; + else + f &= ~wxGROW; + + GetPickerCtrlItem()->SetFlag(f); + } bool HasTextCtrl() const { return m_text != NULL; } @@ -66,34 +105,24 @@ public: // public API wxControl *GetPickerCtrl() { return m_picker; } -public: // wxWindow overrides - - void DoSetSizeHints(int minW, int minH, - int maxW = wxDefaultCoord, int maxH = wxDefaultCoord, - int incW = wxDefaultCoord, int incH = wxDefaultCoord ); - -protected: - void DoSetSize(int x, int y, - int width, int height, - int sizeFlags = wxSIZE_AUTO); - - wxSize DoGetBestSize() const; - - -public: // methods that derived class must/may override - + // methods that derived class must/may override virtual void UpdatePickerFromTextCtrl() = 0; virtual void UpdateTextCtrlFromPicker() = 0; -protected: // utility functions +protected: + // overridden base class methods +#if wxUSE_TOOLTIPS + virtual void DoSetToolTip(wxToolTip *tip); +#endif // wxUSE_TOOLTIPS - inline int GetTextCtrlWidth(int given); // event handlers void OnTextCtrlDelete(wxWindowDestroyEvent &); void OnTextCtrlUpdate(wxCommandEvent &); void OnTextCtrlKillFocus(wxFocusEvent &); + void OnSize(wxSizeEvent &); + // returns the set of styles for the attached wxTextCtrl // from given wxPickerBase's styles virtual long GetTextCtrlStyle(long style) const @@ -103,15 +132,56 @@ protected: // utility functions virtual long GetPickerStyle(long style) const { return (style & wxWINDOW_STYLE_MASK); } + + wxSizerItem *GetPickerCtrlItem() const + { + if (this->HasTextCtrl()) + return m_sizer->GetItem((size_t)1); + return m_sizer->GetItem((size_t)0); + } + + wxSizerItem *GetTextCtrlItem() const + { + wxASSERT(this->HasTextCtrl()); + return m_sizer->GetItem((size_t)0); + } + + int GetDefaultPickerCtrlFlag() const + { + // on macintosh, without additional borders + // there's not enough space for focus rect + return wxALIGN_CENTER_VERTICAL|wxGROW +#ifdef __WXMAC__ + | wxTOP | wxRIGHT | wxBOTTOM +#endif + ; + } + + int GetDefaultTextCtrlFlag() const + { + // on macintosh, without wxALL there's not enough space for focus rect + return wxALIGN_CENTER_VERTICAL +#ifdef __WXMAC__ + | wxALL +#else + | wxRIGHT +#endif + ; + } + + void PostCreation(); + protected: wxTextCtrl *m_text; // can be NULL wxControl *m_picker; - - int m_margin; // distance between subcontrols - int m_textProportion; // proportion between textctrl and other item + wxBoxSizer *m_sizer; private: DECLARE_ABSTRACT_CLASS(wxPickerBase) + DECLARE_EVENT_TABLE() + + // This class must be something just like a panel... + WX_DECLARE_CONTROL_CONTAINER(); };