#ifndef _WX_PICKERBASE_H_BASE_
#define _WX_PICKERBASE_H_BASE_
-#include "wx/defs.h"
#include "wx/control.h"
-#include "wx/textctrl.h"
+#include "wx/sizer.h"
+
+class WXDLLIMPEXP_CORE wxTextCtrl;
+
+extern WXDLLEXPORT_DATA(const wxChar) wxButtonNameStr[];
// ----------------------------------------------------------------------------
// wxPickerBase is the base class for the picker controls which support
{
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; }
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 );
-
- 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;
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
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();
};