m_control = control;
}
- m_toolStyle = wxTOOL_STYLE_CONTROL;
-
- m_dropdownMenu = 0;
- }
-
virtual ~wxToolBarToolBase();
// accessors
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
{
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; }
virtual void Detach() { m_tbar = NULL; }
virtual void Attach(wxToolBarBase *tbar) { m_tbar = tbar; }
+#if wxUSE_MENUS
// these methods are only for tools of wxITEM_DROPDOWN kind (but even such
// tools can have a NULL associated menu)
virtual void SetDropdownMenu(wxMenu *menu);
wxMenu *GetDropdownMenu() const { return m_dropdownMenu; }
+#endif
protected:
// common part of all ctors
m_clientData = NULL;
+ m_stretchable = false;
m_toggled = false;
m_enabled = true;
+#if wxUSE_MENUS
m_dropdownMenu = NULL;
+#endif
+
}
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
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;
wxString m_shortHelpString;
wxString m_longHelpString;
+#if wxUSE_MENUS
wxMenu *m_dropdownMenu;
+#endif
DECLARE_DYNAMIC_CLASS_NO_COPY(wxToolBarToolBase)
};
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);
// return true if this is a vertical toolbar, otherwise false
bool IsVertical() const;
+ // these methods allow to access tools by their index in the toolbar
+ size_t GetToolsCount() const { return m_tools.GetCount(); }
+ const wxToolBarToolBase *GetToolByPos(int pos) const { return m_tools[pos]; }
+
#if WXWIN_COMPATIBILITY_2_8
// the old versions of the various methods kept for compatibility
// don't use in the new code!
// implementation only from now on
// -------------------------------
- size_t GetToolsCount() const { return m_tools.GetCount(); }
-
// Do the toolbar button updates (check for EVT_UPDATE_UI handlers)
virtual void UpdateWindowUI(long flags = wxUPDATE_UI_NONE) ;
// don't want toolbars to accept the focus
virtual bool AcceptsFocus() const { return false; }
+#if wxUSE_MENUS
// Set dropdown menu
bool SetDropdownMenu(int toolid, wxMenu *menu);
+#endif
protected:
// to implement in derived classes
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
// ----------------