+ m_hasToolAlready = TRUE;
+
+ wxCHECK_MSG( bitmap.Ok(), (wxToolBarTool *)NULL,
+ _T("invalid bitmap for wxToolBar icon") );
+
+ wxCHECK_MSG( bitmap.GetBitmap() == NULL, (wxToolBarTool *)NULL,
+ _T("wxToolBar doesn't support GdkBitmap") );
+
+ wxCHECK_MSG( bitmap.GetPixmap() != NULL, (wxToolBarTool *)NULL,
+ _T("wxToolBar::Add needs a wxBitmap") );
+
+ GtkWidget *tool_pixmap = (GtkWidget *)NULL;
+
+ GdkPixmap *pixmap = bitmap.GetPixmap();
+
+ GdkBitmap *mask = (GdkBitmap *)NULL;
+ if ( bitmap.GetMask() )
+ mask = bitmap.GetMask()->GetBitmap();
+
+ tool_pixmap = gtk_pixmap_new( pixmap, mask );
+#if (GTK_MINOR_VERSION > 0)
+ gtk_pixmap_set_build_insensitive( GTK_PIXMAP(tool_pixmap), TRUE );
+#endif
+
+ gtk_misc_set_alignment( GTK_MISC(tool_pixmap), 0.5, 0.5 );
+
+ wxToolBarTool *tool = new wxToolBarTool( this, toolIndex, bitmap, pushedBitmap,
+ toggle, clientData,
+ helpString1, helpString2,
+ tool_pixmap );
+
+ GtkToolbarChildType ctype = toggle ? GTK_TOOLBAR_CHILD_TOGGLEBUTTON
+ : GTK_TOOLBAR_CHILD_BUTTON;
+
+ GtkWidget *item = gtk_toolbar_append_element
+ (
+ GTK_TOOLBAR(m_toolbar),
+ ctype,
+ (GtkWidget *)NULL,
+ (const char *)NULL,
+ helpString1.mbc_str(),
+ "",
+ tool_pixmap,
+ (GtkSignalFunc)gtk_toolbar_callback,
+ (gpointer)tool
+ );
+
+ tool->m_item = item;
+
+ gtk_signal_connect( GTK_OBJECT(tool->m_item),
+ "enter_notify_event",
+ GTK_SIGNAL_FUNC(gtk_toolbar_enter_callback),
+ (gpointer)tool );
+
+ m_tools.Append( tool );
+
+ return tool;
+}
+
+void wxToolBar::AddSeparator()
+{
+ gtk_toolbar_append_space( m_toolbar );
+}
+
+void wxToolBar::ClearTools()
+{
+ wxFAIL_MSG( _T("wxToolBar::ClearTools not implemented") );
+}
+
+bool wxToolBar::Realize()
+{
+ m_x = 0;
+ m_y = 0;
+ m_width = 100;
+ m_height = 0;
+
+ wxNode *node = m_tools.First();
+ while (node)
+ {
+ wxToolBarTool *tool = (wxToolBarTool*)node->Data();
+ if (tool->m_bitmap1.Ok())
+ {
+ int tool_height = tool->m_bitmap1.GetHeight();
+ if (tool_height > m_height) m_height = tool_height;
+ }
+
+ node = node->Next();
+ }
+
+ m_height += 5 + 2*m_yMargin;
+
+ return TRUE;
+}
+
+void wxToolBar::EnableTool(int toolIndex, bool enable)
+{
+ wxNode *node = m_tools.First();
+ while (node)
+ {
+ wxToolBarTool *tool = (wxToolBarTool*)node->Data();
+ if (tool->m_index == toolIndex)
+ {
+ tool->m_enabled = enable;
+
+#if (GTK_MINOR_VERSION > 0)
+ /* we don't disable the tools for GTK 1.0 as the bitmaps don't get
+ greyed anyway and this also disables tooltips */
+ if (tool->m_item)
+ gtk_widget_set_sensitive( tool->m_item, enable );
+#endif
+
+ return;
+ }
+ node = node->Next();
+ }
+
+ wxFAIL_MSG( _T("wrong toolbar index") );
+}
+
+void wxToolBar::ToggleTool( int toolIndex, bool toggle )
+{
+ wxNode *node = m_tools.First();
+ while (node)
+ {
+ wxToolBarTool *tool = (wxToolBarTool*)node->Data();
+ if (tool->m_index == toolIndex)
+ {
+ if ((tool->m_item) && (GTK_IS_TOGGLE_BUTTON(tool->m_item)))
+ {
+ tool->m_toggleState = toggle;
+
+ if (tool->m_bitmap2.Ok())
+ {
+ wxBitmap bitmap = tool->m_bitmap1;
+ if (tool->m_toggleState) bitmap = tool->m_bitmap2;
+
+ GtkPixmap *pixmap = GTK_PIXMAP( tool->m_pixmap );
+
+ GdkBitmap *mask = (GdkBitmap *) NULL;
+ if (bitmap.GetMask()) mask = bitmap.GetMask()->GetBitmap();