X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/fe21801d4a3d44c86c5e0e142d77246837a83105..d0332cbc07d487c30d83515fb3351790565ec1de:/include/wx/tbarbase.h diff --git a/include/wx/tbarbase.h b/include/wx/tbarbase.h index b0be7b0e7b..451fb1a1e4 100644 --- a/include/wx/tbarbase.h +++ b/include/wx/tbarbase.h @@ -60,55 +60,45 @@ public: // ctors & dtor // ------------ - wxToolBarToolBase(wxToolBarBase *tbar = (wxToolBarBase *)NULL, + // generic ctor for any kind of tool + wxToolBarToolBase(wxToolBarBase *tbar = NULL, int toolid = wxID_SEPARATOR, const wxString& label = wxEmptyString, const wxBitmap& bmpNormal = wxNullBitmap, const wxBitmap& bmpDisabled = wxNullBitmap, wxItemKind kind = wxITEM_NORMAL, - wxObject *clientData = (wxObject *) NULL, + wxObject *clientData = NULL, const wxString& shortHelpString = wxEmptyString, const wxString& longHelpString = wxEmptyString) : m_label(label), m_shortHelpString(shortHelpString), - m_longHelpString(longHelpString), - m_dropdownMenu(NULL) + m_longHelpString(longHelpString) { - m_tbar = tbar; - m_id = toolid; - if (m_id == wxID_ANY) - m_id = wxWindow::NewControlId(); + Init + ( + tbar, + toolid == wxID_SEPARATOR ? wxTOOL_STYLE_SEPARATOR + : wxTOOL_STYLE_BUTTON, + toolid == wxID_ANY ? wxWindow::NewControlId() + : toolid, + kind + ); + m_clientData = clientData; m_bmpNormal = bmpNormal; m_bmpDisabled = bmpDisabled; - - m_kind = kind; - - m_enabled = true; - m_toggled = false; - - m_toolStyle = toolid == wxID_SEPARATOR ? wxTOOL_STYLE_SEPARATOR - : wxTOOL_STYLE_BUTTON; } + // ctor for controls only wxToolBarToolBase(wxToolBarBase *tbar, wxControl *control, const wxString& label) : m_label(label) { - m_tbar = tbar; - m_control = control; - m_id = control->GetId(); - - m_kind = wxITEM_MAX; // invalid value + Init(tbar, wxTOOL_STYLE_CONTROL, control->GetId(), wxITEM_MAX); - m_enabled = true; - m_toggled = false; - - m_toolStyle = wxTOOL_STYLE_CONTROL; - - m_dropdownMenu = 0; + m_control = control; } virtual ~wxToolBarToolBase(); @@ -121,25 +111,34 @@ public: wxControl *GetControl() const { - wxASSERT_MSG( IsControl(), _T("this toolbar tool is not a control") ); + wxASSERT_MSG( IsControl(), wxT("this toolbar tool is not a control") ); return m_control; } wxToolBarBase *GetToolBar() const { return m_tbar; } - // style + // style/kind + bool IsStretchable() const { return m_stretchable; } bool IsButton() const { return m_toolStyle == wxTOOL_STYLE_BUTTON; } bool IsControl() const { return m_toolStyle == wxTOOL_STYLE_CONTROL; } bool IsSeparator() const { return m_toolStyle == wxTOOL_STYLE_SEPARATOR; } + bool IsStretchableSpace() const { return IsSeparator() && IsStretchable(); } int GetStyle() const { return m_toolStyle; } wxItemKind GetKind() const { - wxASSERT_MSG( IsButton(), _T("only makes sense for buttons") ); + wxASSERT_MSG( IsButton(), wxT("only makes sense for buttons") ); return m_kind; } + void MakeStretchable() + { + wxASSERT_MSG( IsSeparator(), "only separators can be stretchable" ); + + m_stretchable = true; + } + // state bool IsEnabled() const { return m_enabled; } bool IsToggled() const { return m_toggled; } @@ -197,7 +196,7 @@ public: } // add tool to/remove it from a toolbar - virtual void Detach() { m_tbar = (wxToolBarBase *)NULL; } + virtual void Detach() { m_tbar = NULL; } virtual void Attach(wxToolBarBase *tbar) { m_tbar = tbar; } // these methods are only for tools of wxITEM_DROPDOWN kind (but even such @@ -206,10 +205,30 @@ public: wxMenu *GetDropdownMenu() const { return m_dropdownMenu; } protected: + // common part of all ctors + void Init(wxToolBarBase *tbar, + wxToolBarToolStyle style, + int toolid, + wxItemKind kind) + { + m_tbar = tbar; + m_toolStyle = style; + m_id = toolid; + m_kind = kind; + + m_clientData = NULL; + + m_stretchable = false; + m_toggled = false; + m_enabled = true; + + m_dropdownMenu = NULL; + } + wxToolBarBase *m_tbar; // the toolbar to which we belong (may be NULL) // tool parameters - int m_toolStyle; // see enum wxToolBarToolStyle + wxToolBarToolStyle m_toolStyle; wxWindowIDRef m_id; // the tool id, wxID_SEPARATOR for separator wxItemKind m_kind; // for normal buttons may be wxITEM_NORMAL/CHECK/RADIO @@ -220,6 +239,9 @@ protected: wxControl *m_control; }; + // true if this tool is stretchable: currently is only value for separators + bool m_stretchable; + // tool state bool m_toggled; bool m_enabled; @@ -348,6 +370,12 @@ public: virtual wxToolBarToolBase *AddSeparator(); virtual wxToolBarToolBase *InsertSeparator(size_t pos); + // add a stretchable space to the toolbar: this is similar to a separator + // except that it's always blank and that all the extra space the toolbar + // has is [equally] distributed among the stretchable spaces in it + virtual wxToolBarToolBase *AddStretchableSpace(); + virtual wxToolBarToolBase *InsertStretchableSpace(size_t pos); + // remove the tool from the toolbar: the caller is responsible for actually // deleting the pointer virtual wxToolBarToolBase *RemoveTool(int toolid); @@ -361,6 +389,9 @@ public: // must be called after all buttons have been created to finish toolbar // initialisation + // + // derived class versions should call the base one first, before doing + // platform-specific stuff virtual bool Realize(); // tools state @@ -589,6 +620,17 @@ protected: virtual wxToolBarToolBase *CreateTool(wxControl *control, const wxString& label) = 0; + // this one is not virtual but just a simple helper/wrapper around + // CreateTool() for separators + wxToolBarToolBase *CreateSeparator() + { + return CreateTool(wxID_SEPARATOR, + wxEmptyString, + wxNullBitmap, wxNullBitmap, + wxITEM_SEPARATOR, NULL, + wxEmptyString, wxEmptyString); + } + // helper functions // ---------------- @@ -602,6 +644,21 @@ protected: // un-toggle all buttons in the same radio group void UnToggleRadioGroup(wxToolBarToolBase *tool); + // make the size of the buttons big enough to fit the largest bitmap size + void AdjustToolBitmapSize(); + + // calls InsertTool() and deletes the tool if inserting it failed + wxToolBarToolBase *DoInsertNewTool(size_t pos, wxToolBarToolBase *tool) + { + if ( !InsertTool(pos, tool) ) + { + delete tool; + return NULL; + } + + return tool; + } + // the list of all our tools wxToolBarToolsList m_tools; @@ -622,7 +679,7 @@ protected: private: DECLARE_EVENT_TABLE() - DECLARE_NO_COPY_CLASS(wxToolBarBase) + wxDECLARE_NO_COPY_CLASS(wxToolBarBase); }; // deprecated function for creating the image for disabled buttons, use