X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=radiant%2Fplugintoolbar.cpp;h=4312252719f35e2216669ae56c40e89fe4db6ded;hb=ab35d2859c400749e32f801ad8cc5284ac0a0078;hp=6486e1bd176725c99f6e235b4bf466a97933d61e;hpb=e2b92e121264da56e42426150f338c6e2220fc09;p=xonotic%2Fnetradiant.git diff --git a/radiant/plugintoolbar.cpp b/radiant/plugintoolbar.cpp index 6486e1bd..43122527 100644 --- a/radiant/plugintoolbar.cpp +++ b/radiant/plugintoolbar.cpp @@ -21,6 +21,7 @@ #include "plugintoolbar.h" +#include #include "itoolbar.h" #include "modulesystem.h" @@ -32,101 +33,113 @@ #include "mainframe.h" #include "plugin.h" -ui::Image new_plugin_image( const char* filename ){ - { - StringOutputStream fullpath( 256 ); - fullpath << GameToolsPath_get() << g_pluginsDir << "bitmaps/" << filename; - if ( auto image = image_new_from_file_with_mask(fullpath.c_str()) ) return image; - } - - { - StringOutputStream fullpath( 256 ); - fullpath << AppPath_get() << g_pluginsDir << "bitmaps/" << filename; - if ( auto image = image_new_from_file_with_mask(fullpath.c_str()) ) return image; - } - - { - StringOutputStream fullpath( 256 ); - fullpath << AppPath_get() << g_modulesDir << "bitmaps/" << filename; - if ( auto image = image_new_from_file_with_mask(fullpath.c_str()) ) return image; - } - - return image_new_missing(); +ui::Image new_plugin_image(const char *filename) +{ + { + StringOutputStream fullpath(256); + fullpath << GameToolsPath_get() << g_pluginsDir << "bitmaps/" << filename; + if (auto image = image_new_from_file_with_mask(fullpath.c_str())) { return image; } + } + + { + StringOutputStream fullpath(256); + fullpath << AppPath_get() << g_pluginsDir << "bitmaps/" << filename; + if (auto image = image_new_from_file_with_mask(fullpath.c_str())) { return image; } + } + + { + StringOutputStream fullpath(256); + fullpath << AppPath_get() << g_modulesDir << "bitmaps/" << filename; + if (auto image = image_new_from_file_with_mask(fullpath.c_str())) { return image; } + } + + return image_new_missing(); } -void toolbar_insert( GtkToolbar *toolbar, const char* icon, const char* text, const char* tooltip, IToolbarButton::EType type, GCallback handler, gpointer data ){ - if (type == IToolbarButton::eSpace) { - auto it = ui::Widget(GTK_WIDGET(gtk_separator_tool_item_new())); - it.show(); - gtk_container_add(GTK_CONTAINER(toolbar), GTK_WIDGET(it)); - return; - } - if (type == IToolbarButton::eButton) { - auto button = gtk_tool_button_new(GTK_WIDGET(new_plugin_image(icon)), text); - gtk_widget_set_tooltip_text(GTK_WIDGET(button), tooltip); - gtk_widget_show_all(GTK_WIDGET(button)); - g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(handler), data); - gtk_container_add(GTK_CONTAINER(toolbar), GTK_WIDGET(button)); - return; - } - if (type == IToolbarButton::eToggleButton) { - auto button = gtk_toggle_tool_button_new(); - gtk_tool_button_set_icon_widget(GTK_TOOL_BUTTON(button), GTK_WIDGET(new_plugin_image(icon))); - gtk_tool_button_set_label(GTK_TOOL_BUTTON(button), text); - gtk_widget_set_tooltip_text(GTK_WIDGET(button), tooltip); - gtk_widget_show_all(GTK_WIDGET(button)); - g_signal_connect(G_OBJECT(button), "toggled", G_CALLBACK(handler), data); - gtk_container_add(GTK_CONTAINER(toolbar), GTK_WIDGET(button)); - return; - } - ERROR_MESSAGE( "invalid toolbar button type" ); +void +toolbar_insert(ui::Toolbar toolbar, const char *icon, const char *text, const char *tooltip, IToolbarButton::EType type, + GCallback handler, gpointer data) +{ + if (type == IToolbarButton::eSpace) { + auto it = ui::ToolItem::from(gtk_separator_tool_item_new()); + it.show(); + toolbar.add(it); + return; + } + if (type == IToolbarButton::eButton) { + auto button = ui::ToolButton::from(gtk_tool_button_new(new_plugin_image(icon), text)); + gtk_widget_set_tooltip_text(button, tooltip); + gtk_widget_show_all(button); + button.connect("clicked", G_CALLBACK(handler), data); + toolbar.add(button); + return; + } + if (type == IToolbarButton::eToggleButton) { + auto button = ui::ToolButton::from(gtk_toggle_tool_button_new()); + gtk_tool_button_set_icon_widget(button, new_plugin_image(icon)); + gtk_tool_button_set_label(button, text); + gtk_widget_set_tooltip_text(button, tooltip); + gtk_widget_show_all(button); + button.connect("toggled", G_CALLBACK(handler), data); + toolbar.add(button); + return; + } + ERROR_MESSAGE("invalid toolbar button type"); } -void ActivateToolbarButton( GtkToolButton *widget, gpointer data ){ - (const_cast( reinterpret_cast( data )))->activate(); +void ActivateToolbarButton(ui::ToolButton widget, gpointer data) +{ + (const_cast( reinterpret_cast( data )))->activate(); } -void PlugInToolbar_AddButton( GtkToolbar* toolbar, const IToolbarButton* button ){ - toolbar_insert( toolbar, button->getImage(), button->getText(), button->getTooltip(), button->getType(), G_CALLBACK( ActivateToolbarButton ), reinterpret_cast( const_cast( button ) ) ); +void PlugInToolbar_AddButton(ui::Toolbar toolbar, const IToolbarButton *button) +{ + toolbar_insert(toolbar, button->getImage(), button->getText(), button->getTooltip(), button->getType(), + G_CALLBACK(ActivateToolbarButton), + reinterpret_cast( const_cast( button ))); } -ui::Toolbar g_plugin_toolbar{nullptr}; - -void PluginToolbar_populate(){ - class AddToolbarItemVisitor : public ToolbarModules::Visitor - { - GtkToolbar* m_toolbar; -public: - AddToolbarItemVisitor( GtkToolbar* toolbar ) - : m_toolbar( toolbar ){ - } - void visit( const char* name, const _QERPlugToolbarTable& table ) const { - const std::size_t count = table.m_pfnToolbarButtonCount(); - for ( std::size_t i = 0; i < count; ++i ) - { - PlugInToolbar_AddButton( m_toolbar, table.m_pfnGetToolbarButton( i ) ); - } - } - - } visitor( g_plugin_toolbar ); - - Radiant_getToolbarModules().foreachModule( visitor ); +ui::Toolbar g_plugin_toolbar{ui::null}; + +void PluginToolbar_populate() +{ + class AddToolbarItemVisitor : public ToolbarModules::Visitor { + ui::Toolbar m_toolbar; + public: + AddToolbarItemVisitor(ui::Toolbar toolbar) + : m_toolbar(toolbar) + { + } + + void visit(const char *name, const _QERPlugToolbarTable &table) const + { + const std::size_t count = table.m_pfnToolbarButtonCount(); + for (std::size_t i = 0; i < count; ++i) { + PlugInToolbar_AddButton(m_toolbar, table.m_pfnGetToolbarButton(i)); + } + } + + } visitor(g_plugin_toolbar); + + Radiant_getToolbarModules().foreachModule(visitor); } -void PluginToolbar_clear(){ - container_remove_all( g_plugin_toolbar ); +void PluginToolbar_clear() +{ + container_remove_all(g_plugin_toolbar); } -ui::Toolbar create_plugin_toolbar(){ +ui::Toolbar create_plugin_toolbar() +{ - auto toolbar = ui::Toolbar(GTK_TOOLBAR( gtk_toolbar_new() )); - gtk_orientable_set_orientation( GTK_ORIENTABLE(toolbar), GTK_ORIENTATION_HORIZONTAL ); - gtk_toolbar_set_style( toolbar, GTK_TOOLBAR_ICONS ); - toolbar.show(); + auto toolbar = ui::Toolbar::from(gtk_toolbar_new()); + gtk_orientable_set_orientation(GTK_ORIENTABLE(toolbar), GTK_ORIENTATION_HORIZONTAL); + gtk_toolbar_set_style(toolbar, GTK_TOOLBAR_ICONS); + toolbar.show(); - g_plugin_toolbar = toolbar; + g_plugin_toolbar = toolbar; - PluginToolbar_populate(); + PluginToolbar_populate(); - return toolbar; + return toolbar; }