]> git.xonotic.org Git - xonotic/netradiant.git/blobdiff - radiant/pluginmenu.cpp
fix typo
[xonotic/netradiant.git] / radiant / pluginmenu.cpp
index 0fe758ed16b3b1fab10006116fad2dc238bca3b1..e13a82197d558aa6baaf0ca84ecc4b6f3c4caae7 100644 (file)
@@ -1,30 +1,29 @@
 /*
-Copyright (C) 1999-2006 Id Software, Inc. and contributors.
-For a list of contributors, see the accompanying CONTRIBUTORS file.
+   Copyright (C) 1999-2006 Id Software, Inc. and contributors.
+   For a list of contributors, see the accompanying CONTRIBUTORS file.
 
-This file is part of GtkRadiant.
+   This file is part of GtkRadiant.
 
-GtkRadiant is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
+   GtkRadiant is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
 
-GtkRadiant is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
+   GtkRadiant is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
 
-You should have received a copy of the GNU General Public License
-along with GtkRadiant; if not, write to the Free Software
-Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-*/
+   You should have received a copy of the GNU General Public License
+   along with GtkRadiant; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ */
 
 #include "pluginmenu.h"
 
-#include "stream/textstream.h"
+#include <gtk/gtk.h>
 
-#include <gtk/gtkmenu.h>
-#include <gtk/gtkmenuitem.h>
+#include "stream/textstream.h"
 
 #include "gtkutil/pointer.h"
 #include "gtkutil/menu.h"
@@ -36,161 +35,147 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
 int m_nNextPlugInID = 0;
 
-void plugin_activated(GtkWidget* widget, gpointer data)
+void plugin_activated(ui::Widget widget, gpointer data)
 {
-  const char* str = (const char*)g_object_get_data(G_OBJECT(widget),"command");
-  GetPlugInMgr().Dispatch(gpointer_to_int(data), str);
+    const char *str = (const char *) g_object_get_data(G_OBJECT(widget), "command");
+    GetPlugInMgr().Dispatch(gpointer_to_int(data), str);
 }
 
 #include <stack>
-typedef std::stack<GtkWidget*> WidgetStack;
 
-void PlugInMenu_Add(GtkMenu* plugin_menu, IPlugIn* pPlugIn)
+void PlugInMenu_Add(ui::Menu plugin_menu, IPlugIn *pPlugIn)
 {
-  GtkWidget *menu, *item, *parent, *subMenu;
-  const char *menuText, *menuCommand;
-  WidgetStack menuStack;
-  
-  parent = gtk_menu_item_new_with_label (pPlugIn->getMenuName());
-  gtk_widget_show (parent);
-  gtk_container_add (GTK_CONTAINER (plugin_menu), parent);
-
-  std::size_t nCount = pPlugIn->getCommandCount();
-  if (nCount > 0)
-  {
-    menu = gtk_menu_new();
-    if (g_Layout_enableDetachableMenus.m_value)
-      menu_tearoff (GTK_MENU(menu));
-    while (nCount > 0)
-    {
-      menuText = pPlugIn->getCommandTitle(--nCount);
-      menuCommand = pPlugIn->getCommand(nCount);
-      
-      if (menuText != 0 && strlen(menuText) > 0)
-      {
-        if (!strcmp(menuText, "-"))
-        {
-          item = gtk_menu_item_new();
-          gtk_widget_set_sensitive (item, FALSE);
-        }
-        else if (!strcmp(menuText, ">"))
-        {
-          menuText = pPlugIn->getCommandTitle(--nCount);
-          menuCommand = pPlugIn->getCommand(nCount);
-          if (!strcmp(menuText, "-") || !strcmp(menuText, ">") || !strcmp(menuText, "<"))
-          {
-            globalErrorStream() << pPlugIn->getMenuName() << " Invalid title (" << menuText << ") for submenu.\n";
-            continue;
-          }
-          
-          item = gtk_menu_item_new_with_label(menuText);
-          gtk_widget_show (item);
-          gtk_container_add (GTK_CONTAINER (menu), item);
-          
-          subMenu = gtk_menu_new();
-          gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), subMenu);
-          menuStack.push(menu);
-          menu = subMenu;
-          continue;
+    ui::Widget item{ui::null}, parent{ui::null};
+    ui::Menu menu{ui::null}, subMenu{ui::null};
+    const char *menuText, *menuCommand;
+    std::stack<ui::Menu> menuStack;
+
+    parent = ui::MenuItem(pPlugIn->getMenuName());
+    parent.show();
+    plugin_menu.add(parent);
+
+    std::size_t nCount = pPlugIn->getCommandCount();
+    if (nCount > 0) {
+        menu = ui::Menu(ui::New);
+        if (g_Layout_enableDetachableMenus.m_value) {
+            menu_tearoff(menu);
         }
-        else if (!strcmp(menuText, "<"))
-        {
-          if (!menuStack.empty())
-          {
-              menu = menuStack.top();
-              menuStack.pop();
-          }
-          else
-          {
-            globalErrorStream() << pPlugIn->getMenuName() << ": Attempt to end non-existent submenu ignored.\n";
-          }
-          continue;
+        while (nCount > 0) {
+            menuText = pPlugIn->getCommandTitle(--nCount);
+            menuCommand = pPlugIn->getCommand(nCount);
+
+            if (menuText != 0 && strlen(menuText) > 0) {
+                if (!strcmp(menuText, "-")) {
+                    item = ui::Widget::from(gtk_menu_item_new());
+                    gtk_widget_set_sensitive(item, FALSE);
+                } else if (!strcmp(menuText, ">")) {
+                    menuText = pPlugIn->getCommandTitle(--nCount);
+                    menuCommand = pPlugIn->getCommand(nCount);
+                    if (!strcmp(menuText, "-") || !strcmp(menuText, ">") || !strcmp(menuText, "<")) {
+                        globalErrorStream() << pPlugIn->getMenuName() << " Invalid title (" << menuText
+                                            << ") for submenu.\n";
+                        continue;
+                    }
+
+                    item = ui::MenuItem(menuText);
+                    item.show();
+                    menu.add(item);
+
+                    subMenu = ui::Menu(ui::New);
+                    gtk_menu_item_set_submenu(GTK_MENU_ITEM(item), subMenu);
+                    menuStack.push(menu);
+                    menu = subMenu;
+                    continue;
+                } else if (!strcmp(menuText, "<")) {
+                    if (!menuStack.empty()) {
+                        menu = menuStack.top();
+                        menuStack.pop();
+                    } else {
+                        globalErrorStream() << pPlugIn->getMenuName()
+                                            << ": Attempt to end non-existent submenu ignored.\n";
+                    }
+                    continue;
+                } else {
+                    item = ui::MenuItem(menuText);
+                    g_object_set_data(G_OBJECT(item), "command",
+                                      const_cast<gpointer>( static_cast<const void *>( menuCommand )));
+                    item.connect("activate", G_CALLBACK(plugin_activated), gint_to_pointer(m_nNextPlugInID));
+                }
+                item.show();
+                menu.add(item);
+                pPlugIn->addMenuID(m_nNextPlugInID++);
+            }
         }
-        else
-        {
-          item = gtk_menu_item_new_with_label (menuText);
-          g_object_set_data(G_OBJECT(item),"command", const_cast<gpointer>(static_cast<const void*>(menuCommand)));
-          g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(plugin_activated), gint_to_pointer(m_nNextPlugInID));
+        if (!menuStack.empty()) {
+            std::size_t size = menuStack.size();
+            if (size != 0) {
+                globalErrorStream() << pPlugIn->getMenuName() << " mismatched > <. " << Unsigned(size)
+                                    << " submenu(s) not closed.\n";
+            }
+            for (std::size_t i = 0; i < (size - 1); i++) {
+                menuStack.pop();
+            }
+            menu = menuStack.top();
+            menuStack.pop();
         }
-        gtk_widget_show (item);
-        gtk_container_add (GTK_CONTAINER (menu), item);
-        pPlugIn->addMenuID(m_nNextPlugInID++);
-      }
-    }
-    if (!menuStack.empty())
-    {
-      std::size_t size = menuStack.size();
-      if (size != 0)
-      {
-        globalErrorStream() << pPlugIn->getMenuName() << " mismatched > <. " << Unsigned(size) << " submenu(s) not closed.\n";
-      }
-      for (std::size_t i = 0; i < (size -1); i++)
-      {
-        menuStack.pop();
-      }
-      menu = menuStack.top();
-      menuStack.pop();
+        gtk_menu_item_set_submenu(GTK_MENU_ITEM(parent), menu);
     }
-    gtk_menu_item_set_submenu (GTK_MENU_ITEM (parent), menu);
-  }
 }
 
-GtkMenu* g_plugins_menu = 0;
-GtkMenuItem* g_plugins_menu_separator = 0;
+ui::Menu g_plugins_menu{ui::null};
+ui::MenuItem g_plugins_menu_separator{ui::null};
 
 void PluginsMenu_populate()
 {
-  class PluginsMenuConstructor : public PluginsVisitor
-  {
-    GtkMenu* m_menu;
-  public:
-    PluginsMenuConstructor(GtkMenu* menu) : m_menu(menu)
-    {
-    }
-    void visit(IPlugIn& plugin)
-    {
-      PlugInMenu_Add(m_menu, &plugin);
-    }
-  };
-  
-  PluginsMenuConstructor constructor(g_plugins_menu);
-  GetPlugInMgr().constructMenu(constructor);
+    class PluginsMenuConstructor : public PluginsVisitor {
+        ui::Menu m_menu;
+    public:
+        PluginsMenuConstructor(ui::Menu menu) : m_menu(menu)
+        {
+        }
+
+        void visit(IPlugIn &plugin)
+        {
+            PlugInMenu_Add(m_menu, &plugin);
+        }
+    };
+
+    PluginsMenuConstructor constructor(g_plugins_menu);
+    GetPlugInMgr().constructMenu(constructor);
 }
 
 void PluginsMenu_clear()
 {
-  m_nNextPlugInID = 0;
-
-  GList* lst = g_list_find (gtk_container_children(GTK_CONTAINER(g_plugins_menu)), GTK_WIDGET(g_plugins_menu_separator));
-  while (lst->next)
-  {
-    gtk_container_remove (GTK_CONTAINER(g_plugins_menu), GTK_WIDGET (lst->next->data));
-    lst = g_list_find (gtk_container_children(GTK_CONTAINER(g_plugins_menu)),  GTK_WIDGET(g_plugins_menu_separator));
-  }
+    m_nNextPlugInID = 0;
+
+    GList *lst = g_list_find(gtk_container_get_children(GTK_CONTAINER(g_plugins_menu)),
+                             g_plugins_menu_separator._handle);
+    while (lst->next) {
+        g_plugins_menu.remove(ui::Widget::from(lst->next->data));
+        lst = g_list_find(gtk_container_get_children(GTK_CONTAINER(g_plugins_menu)), g_plugins_menu_separator._handle);
+    }
 }
 
-GtkMenuItem* create_plugins_menu()
+ui::MenuItem create_plugins_menu()
 {
-  // Plugins menu
-  GtkMenuItem* plugins_menu_item = new_sub_menu_item_with_mnemonic("_Plugins");
-  GtkMenu* menu = GTK_MENU(gtk_menu_item_get_submenu(plugins_menu_item));
-  if (g_Layout_enableDetachableMenus.m_value)
-  {
-    menu_tearoff(menu);
-  }
+    // Plugins menu
+    auto plugins_menu_item = new_sub_menu_item_with_mnemonic("_Plugins");
+    auto menu = ui::Menu::from(gtk_menu_item_get_submenu(plugins_menu_item));
+    if (g_Layout_enableDetachableMenus.m_value) {
+        menu_tearoff(menu);
+    }
 
-  g_plugins_menu = menu;
+    g_plugins_menu = menu;
 
-  //TODO: some modules/plugins do not yet support refresh
+    //TODO: some modules/plugins do not yet support refresh
 #if 0
-  create_menu_item_with_mnemonic(menu, "Refresh", FreeCaller<Restart>());
+    create_menu_item_with_mnemonic( menu, "Refresh", makeCallbackF(Restart) );
 
-  // NOTE: the seperator is used when doing a refresh of the list, everything past the seperator is removed
-  g_plugins_menu_separator = menu_separator(menu);
+    // NOTE: the seperator is used when doing a refresh of the list, everything past the seperator is removed
+    g_plugins_menu_separator = menu_separator( menu );
 #endif
 
-  PluginsMenu_populate();
+    PluginsMenu_populate();
 
-  return plugins_menu_item;
+    return plugins_menu_item;
 }
-