X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/fd69e87d2586726e57446d7208ceb8854bc74166..4304b42f1a1a586e96c645cb47d1cd3c98e3dec6:/src/gtk/tbargtk.cpp diff --git a/src/gtk/tbargtk.cpp b/src/gtk/tbargtk.cpp index c23fc6e6fb..970873c7e2 100644 --- a/src/gtk/tbargtk.cpp +++ b/src/gtk/tbargtk.cpp @@ -122,6 +122,15 @@ static gint gtk_toolbar_enter_callback( GtkWidget *WXUNUSED(widget), return FALSE; } +//----------------------------------------------------------------------------- +// InsertChild callback for wxToolBar +//----------------------------------------------------------------------------- + +static void wxInsertChildInToolBar( wxToolBar* WXUNUSED(parent), wxWindow* WXUNUSED(child) ) +{ + /* we don't do anything here but pray */ +} + //----------------------------------------------------------------------------- // wxToolBar //----------------------------------------------------------------------------- @@ -155,6 +164,7 @@ bool wxToolBar::Create( wxWindow *parent, wxWindowID id, { m_needParent = TRUE; m_blockNextEvent = FALSE; + m_insertCallback = (wxInsertChildFunction)wxInsertChildInToolBar; if (!PreCreation( parent, pos, size ) || !CreateBase( parent, id, pos, size, style, wxDefaultValidator, name )) @@ -168,6 +178,7 @@ bool wxToolBar::Create( wxWindow *parent, wxWindowID id, m_toolbar = GTK_TOOLBAR( gtk_toolbar_new( GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_ICONS ) ); +// gtk_toolbar_set_space_style( m_toolbar, GTK_TOOLBAR_SPACE_LINE ); m_separation = 5; gtk_toolbar_set_space_size( m_toolbar, m_separation ); m_hasToolAlready = FALSE; @@ -304,7 +315,7 @@ wxToolBarTool *wxToolBar::AddTool( int toolIndex, const wxBitmap& bitmap, GtkWidget *item = gtk_toolbar_append_element ( - GTK_TOOLBAR(m_toolbar), + m_toolbar, ctype, (GtkWidget *)NULL, (const char *)NULL, @@ -332,11 +343,56 @@ wxToolBarTool *wxToolBar::AddTool( int toolIndex, const wxBitmap& bitmap, return tool; } +bool wxToolBar::AddControl(wxControl *control) +{ + wxCHECK_MSG( control, FALSE, wxT("toolbar: can't insert NULL control") ); + + wxCHECK_MSG( control->GetParent() == this, FALSE, + wxT("control must have toolbar as parent") ); + + m_hasToolAlready = TRUE; + + wxToolBarTool *tool = new wxToolBarTool(control); + + gtk_toolbar_append_widget( m_toolbar, control->m_widget, (const char *) NULL, (const char *) NULL ); + + GtkRequisition req; + (* GTK_WIDGET_CLASS( GTK_OBJECT(m_widget)->klass )->size_request ) (m_widget, &req ); + m_width = req.width; + m_height = req.height; + + m_tools.Append( tool ); + + return TRUE; +} + void wxToolBar::AddSeparator() { gtk_toolbar_append_space( m_toolbar ); } +bool wxToolBar::DeleteTool(int toolIndex) +{ + wxNode *node = m_tools.First(); + while (node) + { + wxToolBarTool *tool = (wxToolBarTool*)node->Data(); + if (tool->m_index == toolIndex) + { + if (tool->m_control) + tool->m_control->Destroy(); + else + gtk_widget_destroy( tool->m_item ); + m_tools.DeleteNode( node ); + + return TRUE; + } + node = node->Next(); + } + + return FALSE; +} + void wxToolBar::ClearTools() { wxFAIL_MSG( wxT("wxToolBar::ClearTools not implemented") ); @@ -635,12 +691,12 @@ void wxToolBar::OnInternalIdle() while (node) { wxToolBarTool *tool = (wxToolBarTool*)node->Data(); - if (!tool->m_item->window) - break; + node = node->Next(); + + if (!tool->m_item || !tool->m_item->window) + continue; else gdk_window_set_cursor( tool->m_item->window, cursor.GetCursor() ); - - node = node->Next(); } }