X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c757b5fee093bbc3686f1e474316396b742fb888..0a71f9e92f2d8b43e11299e712cb3da04660fd9e:/include/wx/pickerbase.h diff --git a/include/wx/pickerbase.h b/include/wx/pickerbase.h index 64714f4399..417767664c 100644 --- a/include/wx/pickerbase.h +++ b/include/wx/pickerbase.h @@ -13,6 +13,8 @@ #define _WX_PICKERBASE_H_BASE_ #include "wx/control.h" +#include "wx/sizer.h" +#include "wx/containr.h" class WXDLLIMPEXP_CORE wxTextCtrl; @@ -33,31 +35,68 @@ 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) + { m_container.SetContainerWindow(this); } + 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,20 +105,6 @@ 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 virtual void UpdatePickerFromTextCtrl() = 0; @@ -87,13 +112,13 @@ public: // methods that derived class must/may override protected: // utility functions - 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 +128,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(); };