From: Vadim Zeitlin <vadim@wxwidgets.org> Date: Mon, 25 Mar 2002 21:38:18 +0000 (+0000) Subject: implemented (but it doesn't work yet) the radio buttons and text in the buttons for... X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/e76c0b5fc59b06273ebbe9c1d9b2646befd0acd0 implemented (but it doesn't work yet) the radio buttons and text in the buttons for the GTK toolbars git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@14777 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/gtk/tbargtk.h b/include/wx/gtk/tbargtk.h index 5f02de2186..7c46a9dc34 100644 --- a/include/wx/gtk/tbargtk.h +++ b/include/wx/gtk/tbargtk.h @@ -54,6 +54,8 @@ public: virtual void SetToolShortHelp(int id, const wxString& helpString); + virtual void SetWindowStyleFlag( long style ); + // implementation from now on // -------------------------- @@ -70,6 +72,9 @@ protected: // common part of all ctors void Init(); + // set the GTK toolbar style and orientation + void GtkSetStyle(); + // implement base class pure virtuals virtual bool DoInsertTool(size_t pos, wxToolBarToolBase *tool); virtual bool DoDeleteTool(size_t pos, wxToolBarToolBase *tool); @@ -79,9 +84,10 @@ protected: virtual void DoSetToggle(wxToolBarToolBase *tool, bool toggle); virtual wxToolBarToolBase *CreateTool(int id, + const wxString& label, const wxBitmap& bitmap1, const wxBitmap& bitmap2, - bool toggle, + wxItemKind kind, wxObject *clientData, const wxString& shortHelpString, const wxString& longHelpString); diff --git a/include/wx/gtk1/tbargtk.h b/include/wx/gtk1/tbargtk.h index 5f02de2186..7c46a9dc34 100644 --- a/include/wx/gtk1/tbargtk.h +++ b/include/wx/gtk1/tbargtk.h @@ -54,6 +54,8 @@ public: virtual void SetToolShortHelp(int id, const wxString& helpString); + virtual void SetWindowStyleFlag( long style ); + // implementation from now on // -------------------------- @@ -70,6 +72,9 @@ protected: // common part of all ctors void Init(); + // set the GTK toolbar style and orientation + void GtkSetStyle(); + // implement base class pure virtuals virtual bool DoInsertTool(size_t pos, wxToolBarToolBase *tool); virtual bool DoDeleteTool(size_t pos, wxToolBarToolBase *tool); @@ -79,9 +84,10 @@ protected: virtual void DoSetToggle(wxToolBarToolBase *tool, bool toggle); virtual wxToolBarToolBase *CreateTool(int id, + const wxString& label, const wxBitmap& bitmap1, const wxBitmap& bitmap2, - bool toggle, + wxItemKind kind, wxObject *clientData, const wxString& shortHelpString, const wxString& longHelpString); diff --git a/include/wx/tbarbase.h b/include/wx/tbarbase.h index 469c4f36a1..1ba060a436 100644 --- a/include/wx/tbarbase.h +++ b/include/wx/tbarbase.h @@ -66,23 +66,26 @@ public: wxToolBarToolBase(wxToolBarBase *tbar = (wxToolBarBase *)NULL, int id = wxID_SEPARATOR, - const wxBitmap& bitmap1 = wxNullBitmap, - const wxBitmap& bitmap2 = wxNullBitmap, - bool toggle = FALSE, + const wxString& label = wxEmptyString, + const wxBitmap& bmpNormal = wxNullBitmap, + const wxBitmap& bmpDisabled = wxNullBitmap, + wxItemKind kind = wxITEM_NORMAL, wxObject *clientData = (wxObject *) NULL, const wxString& shortHelpString = wxEmptyString, const wxString& longHelpString = wxEmptyString) - : m_shortHelpString(shortHelpString), + : m_label(label), + m_shortHelpString(shortHelpString), m_longHelpString(longHelpString) { m_tbar = tbar; m_id = id; m_clientData = clientData; - m_bitmap1 = bitmap1; - m_bitmap2 = bitmap2; + m_bmpNormal = bmpNormal; + m_bmpDisabled = bmpDisabled; + + m_kind = kind; - m_isToggle = toggle; m_enabled = TRUE; m_toggled = FALSE; @@ -96,7 +99,8 @@ public: m_control = control; m_id = control->GetId(); - m_isToggle = FALSE; + m_kind = wxITEM_MAX; // invalid value + m_enabled = TRUE; m_toggled = FALSE; @@ -125,15 +129,22 @@ public: bool IsControl() const { return m_toolStyle == wxTOOL_STYLE_CONTROL; } bool IsSeparator() const { return m_toolStyle == wxTOOL_STYLE_SEPARATOR; } int GetStyle() const { return m_toolStyle; } + wxItemKind GetKind() const + { + wxASSERT_MSG( IsButton(), _T("only makes sense for buttons") ); + + return m_kind; + } // state bool IsEnabled() const { return m_enabled; } bool IsToggled() const { return m_toggled; } - bool CanBeToggled() const { return m_isToggle; } + bool CanBeToggled() const + { return m_kind == wxITEM_CHECK || m_kind == wxITEM_RADIO; } // attributes - const wxBitmap& GetNormalBitmap() const { return m_bitmap1; } - const wxBitmap& GetDisabledBitmap() const { return m_bitmap2; } + const wxBitmap& GetNormalBitmap() const { return m_bmpNormal; } + const wxBitmap& GetDisabledBitmap() const { return m_bmpDisabled; } const wxBitmap& GetBitmap() const { return IsEnabled() ? GetNormalBitmap() : GetDisabledBitmap(); } @@ -164,8 +175,8 @@ public: void Toggle() { Toggle(!IsToggled()); } - void SetNormalBitmap(const wxBitmap& bmp) { m_bitmap1 = bmp; } - void SetDisabledBitmap(const wxBitmap& bmp) { m_bitmap2 = bmp; } + void SetNormalBitmap(const wxBitmap& bmp) { m_bmpNormal = bmp; } + void SetDisabledBitmap(const wxBitmap& bmp) { m_bmpDisabled = bmp; } void SetLabel(const wxString& label) { m_label = label; } @@ -197,8 +208,10 @@ public: protected: wxToolBarBase *m_tbar; // the toolbar to which we belong (may be NULL) - int m_toolStyle; // see enum wxToolBarToolStyle - int m_id; // the tool id, wxID_SEPARATOR for separator + // tool parameters + int m_toolStyle; // see enum wxToolBarToolStyle + int m_id; // the tool id, wxID_SEPARATOR for separator + wxItemKind m_kind; // for normal buttons may be wxITEM_NORMAL/CHECK/RADIO // as controls have their own client data, no need to waste memory union @@ -209,12 +222,11 @@ protected: // tool state bool m_toggled; - bool m_isToggle; bool m_enabled; - // normal and disabled bitmaps - wxBitmap m_bitmap1; - wxBitmap m_bitmap2; + // normal and disabled bitmaps for the tool, both can be invalid + wxBitmap m_bmpNormal; + wxBitmap m_bmpDisabled; // the button label wxString m_label; @@ -240,44 +252,60 @@ public: // toolbar construction // -------------------- - // the most commonly used version of AddTool() + // the full AddTool() function + // + // If bmpDisabled is wxNullBitmap, a shadowed version of the normal bitmap + // is created and used as the disabled image. wxToolBarToolBase *AddTool(int id, + const wxString& label, const wxBitmap& bitmap, - const wxString& shortHelpString = wxEmptyString, - const wxString& longHelpString = wxEmptyString) + const wxBitmap& bmpDisabled, + wxItemKind kind = wxITEM_NORMAL, + const wxString& shortHelp = wxEmptyString, + const wxString& longHelp = wxEmptyString, + wxObject *data = NULL) { - return AddTool(id, bitmap, wxNullBitmap, FALSE, NULL, - shortHelpString, longHelpString); + return DoAddTool(id, label, bitmap, bmpDisabled, kind, + shortHelp, longHelp, data); } - // If pushedBitmap is NULL, a reversed version of bitmap is created and - // used as the pushed/toggled image. If toggle is TRUE, the button toggles - // between the two states. + // the most common AddTool() version wxToolBarToolBase *AddTool(int id, + const wxString& label, const wxBitmap& bitmap, - const wxBitmap& pushedBitmap, - bool toggle = FALSE, - wxObject *clientData = NULL, - const wxString& shortHelpString = wxEmptyString, - const wxString& longHelpString = wxEmptyString) + const wxString& shortHelp = wxEmptyString, + wxItemKind kind = wxITEM_NORMAL) { - return AddTool(id, bitmap, pushedBitmap, toggle, - -1, -1, clientData, shortHelpString, longHelpString); + return AddTool(id, label, bitmap, wxNullBitmap, kind, shortHelp); + } + + // add a check tool, i.e. a tool which can be toggled + wxToolBarToolBase *AddCheckTool(int id, + const wxString& label, + const wxBitmap& bitmap, + const wxBitmap& bmpDisabled = wxNullBitmap, + const wxString& shortHelp = wxEmptyString, + const wxString& longHelp = wxEmptyString, + wxObject *data = NULL) + { + return AddTool(id, label, bitmap, bmpDisabled, wxITEM_CHECK, + shortHelp, longHelp, data); + } + + // add a radio tool, i.e. a tool which can be toggled and releases any + // other toggled radio tools in the same group when it happens + wxToolBarToolBase *AddRadioTool(int id, + const wxString& label, + const wxBitmap& bitmap, + const wxBitmap& bmpDisabled = wxNullBitmap, + const wxString& shortHelp = wxEmptyString, + const wxString& longHelp = wxEmptyString, + wxObject *data = NULL) + { + return AddTool(id, label, bitmap, bmpDisabled, wxITEM_RADIO, + shortHelp, longHelp, data); } - // the old version of AddTool() kept for compatibility - virtual wxToolBarToolBase *AddTool - ( - int id, - const wxBitmap& bitmap, - const wxBitmap& pushedBitmap, - bool toggle, - wxCoord xPos, - wxCoord yPos = -1, - wxObject *clientData = NULL, - const wxString& helpString1 = wxEmptyString, - const wxString& helpString2 = wxEmptyString - ); // insert the new tool at the given position, if pos == GetToolsCount(), it // is equivalent to AddTool() @@ -285,12 +313,13 @@ public: ( size_t pos, int id, + const wxString& label, const wxBitmap& bitmap, - const wxBitmap& pushedBitmap = wxNullBitmap, - bool toggle = FALSE, - wxObject *clientData = NULL, - const wxString& help1 = wxEmptyString, - const wxString& help2 = wxEmptyString + const wxBitmap& bmpDisabled = wxNullBitmap, + wxItemKind kind = wxITEM_NORMAL, + const wxString& shortHelp = wxEmptyString, + const wxString& longHelp = wxEmptyString, + wxObject *clientData = NULL ); // add an arbitrary control to the toolbar, return TRUE if ok (notice that @@ -354,12 +383,9 @@ public: virtual void SetToolSeparation(int separation) { m_toolSeparation = separation; } - virtual wxSize GetToolMargins() { return GetMargins(); } - virtual int GetToolPacking() { return m_toolPacking; } - virtual int GetToolSeparation() { return m_toolSeparation; } - - // for compatibility - wxSize GetMargins() const { return wxSize(m_xMargin, m_yMargin); } + virtual wxSize GetToolMargins() const { return wxSize(m_xMargin, m_yMargin); } + virtual int GetToolPacking() const { return m_toolPacking; } + virtual int GetToolSeparation() const { return m_toolSeparation; } // toolbar geometry // ---------------- @@ -393,6 +419,64 @@ public: // return TRUE if this is a vertical toolbar, otherwise FALSE bool IsVertical() const { return HasFlag(wxTB_VERTICAL); } + + // the old versions of the various methods kept for compatibility + // don't use in the new code! + // -------------------------------------------------------------- + + wxToolBarToolBase *AddTool(int id, + const wxBitmap& bitmap, + const wxBitmap& bmpDisabled, + bool toggle = FALSE, + wxObject *clientData = NULL, + const wxString& shortHelpString = wxEmptyString, + const wxString& longHelpString = wxEmptyString) + { + return AddTool(id, wxEmptyString, + bitmap, bmpDisabled, + toggle ? wxITEM_CHECK : wxITEM_NORMAL, + shortHelpString, longHelpString, clientData); + } + + wxToolBarToolBase *AddTool(int id, + const wxBitmap& bitmap, + const wxString& shortHelpString = wxEmptyString, + const wxString& longHelpString = wxEmptyString) + { + return AddTool(id, wxEmptyString, + bitmap, wxNullBitmap, wxITEM_NORMAL, + shortHelpString, longHelpString, NULL); + } + + wxToolBarToolBase *AddTool(int id, + const wxBitmap& bitmap, + const wxBitmap& bmpDisabled, + bool toggle, + wxCoord xPos, + wxCoord yPos = -1, + wxObject *clientData = NULL, + const wxString& shortHelp = wxEmptyString, + const wxString& longHelp = wxEmptyString) + { + return DoAddTool(id, wxEmptyString, bitmap, bmpDisabled, + toggle ? wxITEM_CHECK : wxITEM_NORMAL, + shortHelp, longHelp, clientData, xPos, yPos); + } + + wxToolBarToolBase *InsertTool(size_t pos, + int id, + const wxBitmap& bitmap, + const wxBitmap& bmpDisabled = wxNullBitmap, + bool toggle = FALSE, + wxObject *clientData = NULL, + const wxString& shortHelp = wxEmptyString, + const wxString& longHelp = wxEmptyString) + { + return InsertTool(pos, id, wxEmptyString, bitmap, bmpDisabled, + toggle ? wxITEM_CHECK : wxITEM_NORMAL, + shortHelp, longHelp, clientData); + } + // event handlers // -------------- @@ -422,6 +506,9 @@ public: virtual wxSize GetDefaultButtonSize() const { return GetToolSize(); } #endif // WXWIN_COMPATIBILITY + // use GetToolMargins() instead + wxSize GetMargins() const { return GetToolMargins(); } + // implementation only from now on // ------------------------------- @@ -439,6 +526,22 @@ protected: // to implement in derived classes // ------------------------------- + // create a new toolbar tool and add it to the toolbar, this is typically + // implemented by just calling InsertTool() + virtual wxToolBarToolBase *DoAddTool + ( + int id, + const wxString& label, + const wxBitmap& bitmap, + const wxBitmap& bmpDisabled, + wxItemKind kind, + const wxString& shortHelp = wxEmptyString, + const wxString& longHelp = wxEmptyString, + wxObject *clientData = NULL, + wxCoord xPos = -1, + wxCoord yPos = -1 + ); + // the tool is not yet inserted into m_tools list when this function is // called and will only be added to it if this function succeeds virtual bool DoInsertTool(size_t pos, wxToolBarToolBase *tool) = 0; @@ -458,12 +561,14 @@ protected: // the functions to create toolbar tools virtual wxToolBarToolBase *CreateTool(int id, - const wxBitmap& bitmap1, - const wxBitmap& bitmap2, - bool toggle, + const wxString& label, + const wxBitmap& bmpNormal, + const wxBitmap& bmpDisabled, + wxItemKind kind, wxObject *clientData, - const wxString& shortHelpString, - const wxString& longHelpString) = 0; + const wxString& shortHelp, + const wxString& longHelp) = 0; + virtual wxToolBarToolBase *CreateTool(wxControl *control) = 0; // helper functions diff --git a/include/wx/tbarsmpl.h b/include/wx/tbarsmpl.h index 195b930f34..b6b5d229e7 100644 --- a/include/wx/tbarsmpl.h +++ b/include/wx/tbarsmpl.h @@ -54,19 +54,6 @@ public: virtual ~wxToolBarSimple(); // override/implement base class virtuals - virtual wxToolBarToolBase *AddTool - ( - int id, - const wxBitmap& bitmap, - const wxBitmap& pushedBitmap, - bool toggle, - wxCoord xPos, - wxCoord yPos = -1, - wxObject *clientData = NULL, - const wxString& helpString1 = wxEmptyString, - const wxString& helpString2 = wxEmptyString - ); - virtual wxToolBarToolBase *FindToolForPosition(wxCoord x, wxCoord y) const; virtual bool Realize(); @@ -119,6 +106,20 @@ protected: void Init(); // implement base class pure virtuals + virtual wxToolBarToolBase *DoAddTool + ( + int id, + const wxString& label, + const wxBitmap& bitmap, + const wxBitmap& bmpDisabled, + wxItemKind kind, + const wxString& shortHelp = wxEmptyString, + const wxString& longHelp = wxEmptyString, + wxObject *clientData = NULL, + wxCoord xPos = -1, + wxCoord yPos = -1 + ); + virtual bool DoInsertTool(size_t pos, wxToolBarToolBase *tool); virtual bool DoDeleteTool(size_t pos, wxToolBarToolBase *tool); @@ -127,12 +128,13 @@ protected: virtual void DoSetToggle(wxToolBarToolBase *tool, bool toggle); virtual wxToolBarToolBase *CreateTool(int id, - const wxBitmap& bitmap1, - const wxBitmap& bitmap2, - bool toggle, + const wxString& label, + const wxBitmap& bmpNormal, + const wxBitmap& bmpDisabled, + wxItemKind kind, wxObject *clientData, - const wxString& shortHelpString, - const wxString& longHelpString); + const wxString& shortHelp, + const wxString& longHelp); virtual wxToolBarToolBase *CreateTool(wxControl *control); // helpers diff --git a/src/common/tbarbase.cpp b/src/common/tbarbase.cpp index 93d6bbfc3f..eb371ebc84 100644 --- a/src/common/tbarbase.cpp +++ b/src/common/tbarbase.cpp @@ -74,7 +74,7 @@ bool wxToolBarToolBase::Enable(bool enable) bool wxToolBarToolBase::Toggle(bool toggle) { - wxASSERT_MSG( m_isToggle, _T("can't toggle this tool") ); + wxASSERT_MSG( CanBeToggled(), _T("can't toggle this tool") ); if ( m_toggled == toggle ) return FALSE; @@ -86,10 +86,11 @@ bool wxToolBarToolBase::Toggle(bool toggle) bool wxToolBarToolBase::SetToggle(bool toggle) { - if ( m_isToggle == toggle ) + wxItemKind kind = toggle ? wxITEM_CHECK : wxITEM_NORMAL; + if ( m_kind == kind ) return FALSE; - m_isToggle = toggle; + m_kind = kind; return TRUE; } @@ -132,34 +133,36 @@ wxToolBarBase::wxToolBarBase() m_maxRows = m_maxCols = 0; } -wxToolBarToolBase *wxToolBarBase::AddTool(int id, - const wxBitmap& bitmap, - const wxBitmap& pushedBitmap, - bool toggle, - wxCoord WXUNUSED(xPos), - wxCoord WXUNUSED(yPos), - wxObject *clientData, - const wxString& helpString1, - const wxString& helpString2) +wxToolBarToolBase *wxToolBarBase::DoAddTool(int id, + const wxString& label, + const wxBitmap& bitmap, + const wxBitmap& bmpDisabled, + wxItemKind kind, + const wxString& shortHelp, + const wxString& longHelp, + wxObject *clientData, + wxCoord WXUNUSED(xPos), + wxCoord WXUNUSED(yPos)) { - return InsertTool(GetToolsCount(), id, bitmap, pushedBitmap, - toggle, clientData, helpString1, helpString2); + return InsertTool(GetToolsCount(), id, label, bitmap, bmpDisabled, + kind, shortHelp, longHelp, clientData); } wxToolBarToolBase *wxToolBarBase::InsertTool(size_t pos, int id, + const wxString& label, const wxBitmap& bitmap, - const wxBitmap& pushedBitmap, - bool toggle, - wxObject *clientData, - const wxString& helpString1, - const wxString& helpString2) + const wxBitmap& bmpDisabled, + wxItemKind kind, + const wxString& shortHelp, + const wxString& longHelp, + wxObject *clientData) { wxCHECK_MSG( pos <= GetToolsCount(), (wxToolBarToolBase *)NULL, _T("invalid position in wxToolBar::InsertTool()") ); - wxToolBarToolBase *tool = CreateTool(id, bitmap, pushedBitmap, toggle, - clientData, helpString1, helpString2); + wxToolBarToolBase *tool = CreateTool(id, label, bitmap, bmpDisabled, kind, + clientData, shortHelp, longHelp); if ( !tool || !DoInsertTool(pos, tool) ) { @@ -214,8 +217,9 @@ wxToolBarToolBase *wxToolBarBase::InsertSeparator(size_t pos) _T("invalid position in wxToolBar::InsertSeparator()") ); wxToolBarToolBase *tool = CreateTool(wxID_SEPARATOR, + wxEmptyString, wxNullBitmap, wxNullBitmap, - FALSE, (wxObject *)NULL, + wxITEM_SEPARATOR, (wxObject *)NULL, wxEmptyString, wxEmptyString); if ( !tool || !DoInsertTool(pos, tool) ) diff --git a/src/generic/tbarsmpl.cpp b/src/generic/tbarsmpl.cpp index 1a0cddfd35..543aff8fc5 100644 --- a/src/generic/tbarsmpl.cpp +++ b/src/generic/tbarsmpl.cpp @@ -48,14 +48,15 @@ class WXDLLEXPORT wxToolBarToolSimple : public wxToolBarToolBase public: wxToolBarToolSimple(wxToolBarSimple *tbar, int id, - const wxBitmap& bitmap1, - const wxBitmap& bitmap2, - bool toggle, + const wxString& label, + const wxBitmap& bmpNormal, + const wxBitmap& bmpDisabled, + wxItemKind kind, wxObject *clientData, - const wxString& shortHelpString, - const wxString& longHelpString) - : wxToolBarToolBase(tbar, id, bitmap1, bitmap2, toggle, - clientData, shortHelpString, longHelpString) + const wxString& shortHelp, + const wxString& longHelp) + : wxToolBarToolBase(tbar, id, label, bmpNormal, bmpDisabled, kind, + clientData, shortHelp, longHelp) { } @@ -73,10 +74,10 @@ public: wxCoord GetWidth() const { return m_width; } wxCoord GetHeight() const { return m_height; } - wxCoord m_x; - wxCoord m_y; - wxCoord m_width; - wxCoord m_height; + wxCoord m_x; + wxCoord m_y; + wxCoord m_width; + wxCoord m_height; }; // ---------------------------------------------------------------------------- @@ -108,15 +109,16 @@ END_EVENT_TABLE() // ---------------------------------------------------------------------------- wxToolBarToolBase *wxToolBarSimple::CreateTool(int id, - const wxBitmap& bitmap1, - const wxBitmap& bitmap2, - bool toggle, + const wxString& label, + const wxBitmap& bmpNormal, + const wxBitmap& bmpDisabled, + wxItemKind kind, wxObject *clientData, - const wxString& shortHelpString, - const wxString& longHelpString) + const wxString& shortHelp, + const wxString& longHelp) { - return new wxToolBarToolSimple(this, id, bitmap1, bitmap2, toggle, - clientData, shortHelpString, longHelpString); + return new wxToolBarToolSimple(this, id, label, bmpNormal, bmpDisabled, + kind, clientData, shortHelp, longHelp); } wxToolBarToolBase *wxToolBarSimple::CreateTool(wxControl *control) @@ -162,23 +164,24 @@ void wxToolBarSimple::Init() m_yScrollLinesPerPage = 0; } -wxToolBarToolBase *wxToolBarSimple::AddTool(int id, - const wxBitmap& bitmap, - const wxBitmap& pushedBitmap, - bool toggle, - wxCoord xPos, - wxCoord yPos, - wxObject *clientData, - const wxString& helpString1, - const wxString& helpString2) +wxToolBarToolBase *wxToolBarSimple::DoAddTool(int id, + const wxString& label, + const wxBitmap& bitmap, + const wxBitmap& bmpDisabled, + wxItemKind kind, + const wxString& shortHelp, + const wxString& longHelp, + wxObject *clientData, + wxCoord xPos, + wxCoord yPos) { // rememeber the position for DoInsertTool() m_xPos = xPos; m_yPos = yPos; - return wxToolBarBase::AddTool(id, bitmap, pushedBitmap, toggle, - xPos, yPos, clientData, - helpString1, helpString2); + return wxToolBarBase::DoAddTool(id, label, bitmap, bmpDisabled, kind, + shortHelp, longHelp, + clientData, xPos, yPos); } bool wxToolBarSimple::DoInsertTool(size_t WXUNUSED(pos), diff --git a/src/gtk/tbargtk.cpp b/src/gtk/tbargtk.cpp index 1a23a85040..a311d9aee9 100644 --- a/src/gtk/tbargtk.cpp +++ b/src/gtk/tbargtk.cpp @@ -43,6 +43,28 @@ extern bool g_isIdle; extern bool g_blockEventsOnDrag; extern wxCursor g_globalCursor; +// ---------------------------------------------------------------------------- +// private functions +// ---------------------------------------------------------------------------- + +// translate wxWindows toolbar style flags to GTK orientation and style +static void GetGtkStyle(long style, + GtkOrientation *orient, GtkToolbarStyle *gtkStyle) +{ + *orient = style & wxTB_VERTICAL ? GTK_ORIENTATION_VERTICAL + : GTK_ORIENTATION_HORIZONTAL; + + + if ( style & wxTB_TEXT ) + { + *gtkStyle = style & wxTB_NOICONS ? GTK_TOOLBAR_TEXT : GTK_TOOLBAR_BOTH; + } + else // no text, hence we must have the icons or what would we show? + { + *gtkStyle = GTK_TOOLBAR_ICONS; + } +} + // ---------------------------------------------------------------------------- // wxToolBarTool // ---------------------------------------------------------------------------- @@ -52,13 +74,14 @@ class wxToolBarTool : public wxToolBarToolBase public: wxToolBarTool(wxToolBar *tbar, int id, + const wxString& label, const wxBitmap& bitmap1, const wxBitmap& bitmap2, - bool toggle, + wxItemKind kind, wxObject *clientData, const wxString& shortHelpString, const wxString& longHelpString) - : wxToolBarToolBase(tbar, id, bitmap1, bitmap2, toggle, + : wxToolBarToolBase(tbar, id, label, bitmap1, bitmap2, kind, clientData, shortHelpString, longHelpString) { Init(); @@ -70,6 +93,27 @@ public: Init(); } + // this is only called for the normal buttons, i.e. not separators nor + // controls + GtkToolbarChildType GetGtkChildType() const + { + switch ( GetKind() ) + { + case wxITEM_CHECK: + return GTK_TOOLBAR_CHILD_TOGGLEBUTTON; + + case wxITEM_RADIO: + return GTK_TOOLBAR_CHILD_RADIOBUTTON; + + default: + wxFAIL_MSG( _T("unknown toolbar child type") ); + // fall through + + case wxITEM_NORMAL: + return GTK_TOOLBAR_CHILD_BUTTON; + } + } + GtkWidget *m_item; GtkWidget *m_pixmap; @@ -167,14 +211,15 @@ void wxToolBarTool::Init() } wxToolBarToolBase *wxToolBar::CreateTool(int id, + const wxString& text, const wxBitmap& bitmap1, const wxBitmap& bitmap2, - bool toggle, + wxItemKind kind, wxObject *clientData, const wxString& shortHelpString, const wxString& longHelpString) { - return new wxToolBarTool(this, id, bitmap1, bitmap2, toggle, + return new wxToolBarTool(this, id, text, bitmap1, bitmap2, kind, clientData, shortHelpString, longHelpString); } @@ -219,15 +264,15 @@ bool wxToolBar::Create( wxWindow *parent, return FALSE; } - GtkOrientation orient = style & wxTB_VERTICAL ? GTK_ORIENTATION_VERTICAL - : GTK_ORIENTATION_HORIZONTAL; - #ifdef __WXGTK20__ m_toolbar = GTK_TOOLBAR( gtk_toolbar_new() ); - gtk_toolbar_set_orientation(m_toolbar, orient); - gtk_toolbar_set_style(m_toolbar, GTK_TOOLBAR_ICONS); + GtkSetStyle(); #else - m_toolbar = GTK_TOOLBAR( gtk_toolbar_new( orient, GTK_TOOLBAR_ICONS ) ); + GtkOrientation orient; + GtkToolbarStyle gtkStyle; + GetGtkStyle(style, &orient, >kStyle); + + m_toolbar = GTK_TOOLBAR( gtk_toolbar_new(orient, gtkStyle) ); #endif SetToolSeparation(7); @@ -293,6 +338,24 @@ bool wxToolBar::Create( wxWindow *parent, return TRUE; } +void wxToolBar::GtkSetStyle() +{ + GtkOrientation orient; + GtkToolbarStyle style; + GetGtkStyle(GetWindowStyle(), &orient, &style); + + gtk_toolbar_set_orientation(m_toolbar, orient); + gtk_toolbar_set_style(m_toolbar, style); +} + +void wxToolBar::SetWindowStyleFlag( long style ) +{ + wxToolBarBase::SetWindowStyleFlag(style); + + if ( m_toolbar ) + GtkSetStyle(); +} + bool wxToolBar::DoInsertTool(size_t pos, wxToolBarToolBase *toolBase) { wxToolBarTool *tool = (wxToolBarTool *)toolBase; @@ -337,11 +400,9 @@ bool wxToolBar::DoInsertTool(size_t pos, wxToolBarToolBase *toolBase) tool->m_item = gtk_toolbar_insert_element ( m_toolbar, - tool->CanBeToggled() - ? GTK_TOOLBAR_CHILD_TOGGLEBUTTON - : GTK_TOOLBAR_CHILD_BUTTON, + tool->GetGtkChildType(), (GtkWidget *)NULL, - (const char *)NULL, + tool->GetLabel().mbc_str(), tool->GetShortHelp().mbc_str(), "", // tooltip_private_text (?) tool->m_pixmap, diff --git a/src/gtk1/tbargtk.cpp b/src/gtk1/tbargtk.cpp index 1a23a85040..a311d9aee9 100644 --- a/src/gtk1/tbargtk.cpp +++ b/src/gtk1/tbargtk.cpp @@ -43,6 +43,28 @@ extern bool g_isIdle; extern bool g_blockEventsOnDrag; extern wxCursor g_globalCursor; +// ---------------------------------------------------------------------------- +// private functions +// ---------------------------------------------------------------------------- + +// translate wxWindows toolbar style flags to GTK orientation and style +static void GetGtkStyle(long style, + GtkOrientation *orient, GtkToolbarStyle *gtkStyle) +{ + *orient = style & wxTB_VERTICAL ? GTK_ORIENTATION_VERTICAL + : GTK_ORIENTATION_HORIZONTAL; + + + if ( style & wxTB_TEXT ) + { + *gtkStyle = style & wxTB_NOICONS ? GTK_TOOLBAR_TEXT : GTK_TOOLBAR_BOTH; + } + else // no text, hence we must have the icons or what would we show? + { + *gtkStyle = GTK_TOOLBAR_ICONS; + } +} + // ---------------------------------------------------------------------------- // wxToolBarTool // ---------------------------------------------------------------------------- @@ -52,13 +74,14 @@ class wxToolBarTool : public wxToolBarToolBase public: wxToolBarTool(wxToolBar *tbar, int id, + const wxString& label, const wxBitmap& bitmap1, const wxBitmap& bitmap2, - bool toggle, + wxItemKind kind, wxObject *clientData, const wxString& shortHelpString, const wxString& longHelpString) - : wxToolBarToolBase(tbar, id, bitmap1, bitmap2, toggle, + : wxToolBarToolBase(tbar, id, label, bitmap1, bitmap2, kind, clientData, shortHelpString, longHelpString) { Init(); @@ -70,6 +93,27 @@ public: Init(); } + // this is only called for the normal buttons, i.e. not separators nor + // controls + GtkToolbarChildType GetGtkChildType() const + { + switch ( GetKind() ) + { + case wxITEM_CHECK: + return GTK_TOOLBAR_CHILD_TOGGLEBUTTON; + + case wxITEM_RADIO: + return GTK_TOOLBAR_CHILD_RADIOBUTTON; + + default: + wxFAIL_MSG( _T("unknown toolbar child type") ); + // fall through + + case wxITEM_NORMAL: + return GTK_TOOLBAR_CHILD_BUTTON; + } + } + GtkWidget *m_item; GtkWidget *m_pixmap; @@ -167,14 +211,15 @@ void wxToolBarTool::Init() } wxToolBarToolBase *wxToolBar::CreateTool(int id, + const wxString& text, const wxBitmap& bitmap1, const wxBitmap& bitmap2, - bool toggle, + wxItemKind kind, wxObject *clientData, const wxString& shortHelpString, const wxString& longHelpString) { - return new wxToolBarTool(this, id, bitmap1, bitmap2, toggle, + return new wxToolBarTool(this, id, text, bitmap1, bitmap2, kind, clientData, shortHelpString, longHelpString); } @@ -219,15 +264,15 @@ bool wxToolBar::Create( wxWindow *parent, return FALSE; } - GtkOrientation orient = style & wxTB_VERTICAL ? GTK_ORIENTATION_VERTICAL - : GTK_ORIENTATION_HORIZONTAL; - #ifdef __WXGTK20__ m_toolbar = GTK_TOOLBAR( gtk_toolbar_new() ); - gtk_toolbar_set_orientation(m_toolbar, orient); - gtk_toolbar_set_style(m_toolbar, GTK_TOOLBAR_ICONS); + GtkSetStyle(); #else - m_toolbar = GTK_TOOLBAR( gtk_toolbar_new( orient, GTK_TOOLBAR_ICONS ) ); + GtkOrientation orient; + GtkToolbarStyle gtkStyle; + GetGtkStyle(style, &orient, >kStyle); + + m_toolbar = GTK_TOOLBAR( gtk_toolbar_new(orient, gtkStyle) ); #endif SetToolSeparation(7); @@ -293,6 +338,24 @@ bool wxToolBar::Create( wxWindow *parent, return TRUE; } +void wxToolBar::GtkSetStyle() +{ + GtkOrientation orient; + GtkToolbarStyle style; + GetGtkStyle(GetWindowStyle(), &orient, &style); + + gtk_toolbar_set_orientation(m_toolbar, orient); + gtk_toolbar_set_style(m_toolbar, style); +} + +void wxToolBar::SetWindowStyleFlag( long style ) +{ + wxToolBarBase::SetWindowStyleFlag(style); + + if ( m_toolbar ) + GtkSetStyle(); +} + bool wxToolBar::DoInsertTool(size_t pos, wxToolBarToolBase *toolBase) { wxToolBarTool *tool = (wxToolBarTool *)toolBase; @@ -337,11 +400,9 @@ bool wxToolBar::DoInsertTool(size_t pos, wxToolBarToolBase *toolBase) tool->m_item = gtk_toolbar_insert_element ( m_toolbar, - tool->CanBeToggled() - ? GTK_TOOLBAR_CHILD_TOGGLEBUTTON - : GTK_TOOLBAR_CHILD_BUTTON, + tool->GetGtkChildType(), (GtkWidget *)NULL, - (const char *)NULL, + tool->GetLabel().mbc_str(), tool->GetShortHelp().mbc_str(), "", // tooltip_private_text (?) tool->m_pixmap,