X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/17a1ebd101f0653e69736416a2a28d0ada423141..b5a9b87e1620e52f1f13d2619b4677f2b365c93f:/src/gtk1/tbargtk.cpp diff --git a/src/gtk1/tbargtk.cpp b/src/gtk1/tbargtk.cpp index 555803cd80..be2f5ff3c6 100644 --- a/src/gtk1/tbargtk.cpp +++ b/src/gtk1/tbargtk.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: tbargtk.cpp +// Name: src/gtk1/tbargtk.cpp // Purpose: GTK toolbar // Author: Robert Roebling // Modified: 13.12.99 by VZ to derive from wxToolBarBase @@ -19,14 +19,16 @@ // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" -#include "wx/toolbar.h" - #if wxUSE_TOOLBAR_NATIVE -#include "wx/frame.h" +#include "wx/toolbar.h" + +#ifndef WX_PRECOMP + #include "wx/frame.h" +#endif #include -#include "wx/gtk/private.h" +#include "wx/gtk1/private.h" // ---------------------------------------------------------------------------- // globals @@ -56,11 +58,7 @@ static void GetGtkStyle(long style, { *gtkStyle = style & wxTB_NOICONS ? GTK_TOOLBAR_TEXT - : ( -#ifdef __WXGTK20__ - style & wxTB_HORZ_LAYOUT ? GTK_TOOLBAR_BOTH_HORIZ : -#endif // __WXGTK20__ - GTK_TOOLBAR_BOTH); + : GTK_TOOLBAR_BOTH; } else // no text, hence we must have the icons or what would we show? { @@ -90,8 +88,8 @@ public: Init(); } - wxToolBarTool(wxToolBar *tbar, wxControl *control) - : wxToolBarToolBase(tbar, control) + wxToolBarTool(wxToolBar *tbar, wxControl *control, const wxString& label) + : wxToolBarToolBase(tbar, control, label) { Init(); } @@ -114,7 +112,7 @@ public: return GTK_TOOLBAR_CHILD_RADIOBUTTON; default: - wxFAIL_MSG( _T("unknown toolbar child type") ); + wxFAIL_MSG( wxT("unknown toolbar child type") ); // fall through case wxITEM_NORMAL: @@ -127,13 +125,8 @@ public: if (bitmap.Ok()) { GdkBitmap *mask = bitmap.GetMask() ? bitmap.GetMask()->GetBitmap() - : (GdkBitmap *)NULL; -#ifdef __WXGTK20__ - if (bitmap.HasPixbuf()) - gtk_image_set_from_pixbuf( GTK_IMAGE(m_pixmap), bitmap.GetPixbuf() ); - else -#endif // !__WXGTK20__ - gtk_pixmap_set( GTK_PIXMAP(m_pixmap), bitmap.GetPixmap(), mask ); + : NULL; + gtk_pixmap_set( GTK_PIXMAP(m_pixmap), bitmap.GetPixmap(), mask ); } } @@ -237,7 +230,7 @@ static void wxInsertChildInToolBar( wxToolBar* WXUNUSED(parent), void wxToolBarTool::Init() { m_item = - m_pixmap = (GtkWidget *)NULL; + m_pixmap = NULL; } wxToolBarToolBase *wxToolBar::CreateTool(int id, @@ -253,9 +246,10 @@ wxToolBarToolBase *wxToolBar::CreateTool(int id, clientData, shortHelpString, longHelpString); } -wxToolBarToolBase *wxToolBar::CreateTool(wxControl *control) +wxToolBarToolBase * +wxToolBar::CreateTool(wxControl *control, const wxString& label) { - return new wxToolBarTool(this, control); + return new wxToolBarTool(this, control, label); } //----------------------------------------------------------------------------- @@ -264,7 +258,7 @@ wxToolBarToolBase *wxToolBar::CreateTool(wxControl *control) void wxToolBar::Init() { - m_toolbar = (GtkToolbar *)NULL; + m_toolbar = NULL; m_blockEvent = false; m_defaultWidth = 32; m_defaultHeight = 32; @@ -292,20 +286,13 @@ bool wxToolBar::Create( wxWindow *parent, return false; } -#ifdef __WXGTK20__ - m_toolbar = GTK_TOOLBAR( gtk_toolbar_new() ); - GtkSetStyle(); + FixupStyle(); - // Doesn't work this way. - // GtkToolbarSpaceStyle space_style = GTK_TOOLBAR_SPACE_EMPTY; - // gtk_widget_style_set (GTK_WIDGET (m_toolbar), "space_style", &space_style, NULL); -#else GtkOrientation orient; GtkToolbarStyle gtkStyle; GetGtkStyle(style, &orient, >kStyle); m_toolbar = GTK_TOOLBAR( gtk_toolbar_new(orient, gtkStyle) ); -#endif SetToolSeparation(7); @@ -328,11 +315,8 @@ bool wxToolBar::Create( wxWindow *parent, gtk_toolbar_set_tooltips( GTK_TOOLBAR(m_toolbar), TRUE ); - // FIXME: there is no such function for toolbars in 2.0 -#ifndef __WXGTK20__ if (style & wxTB_FLAT) gtk_toolbar_set_button_relief( GTK_TOOLBAR(m_toolbar), GTK_RELIEF_NONE ); -#endif m_parent->DoAddChild( this ); @@ -363,13 +347,9 @@ bool wxToolBar::DoInsertTool(size_t pos, wxToolBarToolBase *toolBase) { wxToolBarTool *tool = (wxToolBarTool *)toolBase; -#ifndef __WXGTK20__ // if we have inserted a space before all the tools we must change the GTK // index by 1 size_t posGtk = m_xMargin > 1 ? pos + 1 : pos; -#else - size_t posGtk = pos; -#endif if ( tool->IsButton() ) { @@ -386,28 +366,16 @@ bool wxToolBar::DoInsertTool(size_t pos, wxToolBarToolBase *toolBase) wxCHECK_MSG( bitmap.GetPixmap() != NULL, false, wxT("wxToolBar::Add needs a wxBitmap") ); - GtkWidget *tool_pixmap = (GtkWidget *)NULL; + GtkWidget *tool_pixmap = NULL; + GdkPixmap *pixmap = bitmap.GetPixmap(); -#ifdef __WXGTK20__ - if (bitmap.HasPixbuf()) - { - tool_pixmap = gtk_image_new(); - tool->m_pixmap = tool_pixmap; - tool->SetPixmap(bitmap); - } - else -#endif - { - GdkPixmap *pixmap = bitmap.GetPixmap(); - - GdkBitmap *mask = (GdkBitmap *)NULL; - if ( bitmap.GetMask() ) - mask = bitmap.GetMask()->GetBitmap(); + GdkBitmap *mask = NULL; + if ( bitmap.GetMask() ) + mask = bitmap.GetMask()->GetBitmap(); - tool_pixmap = gtk_pixmap_new( pixmap, mask ); - gtk_pixmap_set_build_insensitive( GTK_PIXMAP(tool_pixmap), TRUE ); - } + tool_pixmap = gtk_pixmap_new( pixmap, mask ); + gtk_pixmap_set_build_insensitive( GTK_PIXMAP(tool_pixmap), TRUE ); gtk_misc_set_alignment( GTK_MISC(tool_pixmap), 0.5, 0.5 ); @@ -471,7 +439,7 @@ bool wxToolBar::DoInsertTool(size_t pos, wxToolBarToolBase *toolBase) if ( !tool->m_item ) { - wxFAIL_MSG( _T("gtk_toolbar_insert_element() failed") ); + wxFAIL_MSG( wxT("gtk_toolbar_insert_element() failed") ); return false; } @@ -514,25 +482,26 @@ bool wxToolBar::DoInsertTool(size_t pos, wxToolBarToolBase *toolBase) return true; } -bool wxToolBar::DoDeleteTool(size_t pos, wxToolBarToolBase *toolBase) +bool wxToolBar::DoDeleteTool(size_t WXUNUSED(pos), wxToolBarToolBase *toolBase) { wxToolBarTool *tool = (wxToolBarTool *)toolBase; switch ( tool->GetStyle() ) { case wxTOOL_STYLE_CONTROL: - tool->GetControl()->Destroy(); + // don't destroy the control here as we can be called from + // RemoveTool() and then we need to keep the control alive; + // while if we're called from DeleteTool() the control will + // be destroyed when wxToolBarToolBase itself is deleted break; case wxTOOL_STYLE_BUTTON: gtk_widget_destroy( tool->m_item ); break; -#ifdef __WXGTK20__ - case wxTOOL_STYLE_SEPARATOR: - gtk_toolbar_remove_space( m_toolbar, pos ); - break; -#endif + default: + wxFAIL_MSG( "unknown tool style" ); + return false; } InvalidateBestSize(); @@ -574,7 +543,7 @@ void wxToolBar::DoSetToggle(wxToolBarToolBase * WXUNUSED(tool), bool WXUNUSED(toggle)) { // VZ: absolutely no idea about how to do it - wxFAIL_MSG( _T("not implemented") ); + wxFAIL_MSG( wxT("not implemented") ); } // ---------------------------------------------------------------------------- @@ -585,9 +554,9 @@ wxToolBarToolBase *wxToolBar::FindToolForPosition(wxCoord WXUNUSED(x), wxCoord WXUNUSED(y)) const { // VZ: GTK+ doesn't seem to have such thing - wxFAIL_MSG( _T("wxToolBar::FindToolForPosition() not implemented") ); + wxFAIL_MSG( wxT("wxToolBar::FindToolForPosition() not implemented") ); - return (wxToolBarToolBase *)NULL; + return NULL; } void wxToolBar::SetMargins( int x, int y ) @@ -595,10 +564,8 @@ void wxToolBar::SetMargins( int x, int y ) wxCHECK_RET( GetToolsCount() == 0, wxT("wxToolBar::SetMargins must be called before adding tools.") ); -#ifndef __WXGTK20__ if (x > 1) gtk_toolbar_append_space( m_toolbar ); // oh well -#endif m_xMargin = x; m_yMargin = y; @@ -606,10 +573,7 @@ void wxToolBar::SetMargins( int x, int y ) void wxToolBar::SetToolSeparation( int separation ) { - // FIXME: this function disappeared -#ifndef __WXGTK20__ gtk_toolbar_set_space_size( m_toolbar, separation ); -#endif m_toolSeparation = separation; } @@ -683,15 +647,11 @@ void wxToolBar::OnInternalIdle() wxVisualAttributes wxToolBar::GetClassDefaultAttributes(wxWindowVariant WXUNUSED(variant)) { -#ifdef __WXGTK20__ - return GetDefaultAttributesFromGTKWidget(gtk_toolbar_new); -#else wxVisualAttributes attr; GtkWidget* widget = gtk_toolbar_new(GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_BOTH); attr = GetDefaultAttributesFromGTKWidget(widget); gtk_widget_destroy(widget); return attr; -#endif } #endif // wxUSE_TOOLBAR_NATIVE