]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/pickerbase.h
corrected a target name
[wxWidgets.git] / include / wx / pickerbase.h
index 64714f4399487a1526f5a445d63298e7b13bdf81..2176cfc5dd0e95d89140683343726c9a65923e58 100644 (file)
@@ -13,6 +13,7 @@
 #define _WX_PICKERBASE_H_BASE_
 
 #include "wx/control.h"
+#include "wx/sizer.h"
 
 class WXDLLIMPEXP_CORE wxTextCtrl;
 
@@ -33,9 +34,9 @@ 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
@@ -51,13 +52,48 @@ public:
 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 +102,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 +109,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 +125,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();
 };