]> git.xonotic.org Git - xonotic/netradiant.git/blobdiff - contrib/meshtex/PluginModule.cpp
Merge commit '4645e19ce9e8f8034233ac965a4103a13b75714c' into garux-merge
[xonotic/netradiant.git] / contrib / meshtex / PluginModule.cpp
diff --git a/contrib/meshtex/PluginModule.cpp b/contrib/meshtex/PluginModule.cpp
new file mode 100644 (file)
index 0000000..6a2032e
--- /dev/null
@@ -0,0 +1,159 @@
+/**
+ * @file PluginModule.cpp
+ * Implements the PluginModule class.
+ * @ingroup generic-plugin
+ */
+
+/*
+ * Copyright 2012 Joel Baxter
+ *
+ * This file is part of MeshTex.
+ *
+ * MeshTex 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.
+ *
+ * MeshTex 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 MeshTex.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "PluginModule.h"
+#include "GenericPluginUI.h"
+
+
+/**
+ * Plugin function table.
+ */
+_QERPluginTable PluginModule::_pluginAPI;
+
+/**
+ * Default constructor. Initialize the function table.
+ */
+PluginModule::PluginModule()
+{
+   _pluginAPI.m_pfnQERPlug_Init = &QERPluginInit;
+   _pluginAPI.m_pfnQERPlug_GetName = &QERPluginGetName;
+   _pluginAPI.m_pfnQERPlug_GetCommandList = &QERPluginGetCommandList;
+   _pluginAPI.m_pfnQERPlug_GetCommandTitleList = &QERPluginGetCommandTitleList;
+   _pluginAPI.m_pfnQERPlug_Dispatch = &QERPluginDispatch;
+}
+
+/**
+ * Destructor.
+ */
+PluginModule::~PluginModule()
+{
+}
+
+/**
+ * Fetch a pointer to the function table.
+ */
+_QERPluginTable *
+PluginModule::getTable()
+{
+   return &_pluginAPI;
+}
+
+/**
+ * Initialize plugin.
+ *
+ * @param hApp        Dummy arg; ignored.
+ * @param pMainWidget Main window widget.
+ *
+ * @return The plugin name.
+ */
+const char *
+PluginModule::QERPluginInit(void *hApp,
+                            void *pMainWidget)
+{
+   // Inform the UI of the main app window.
+   UIInstance().SetWindow((GtkWidget *)pMainWidget);
+   // Return the plugin name.
+   return PLUGIN_NAME;
+}
+
+/**
+ * Get the plugin's name.
+ *
+ * @return The plugin name.
+ */
+const char *
+PluginModule::QERPluginGetName()
+{
+   // Return the plugin name.
+   return PLUGIN_NAME;
+}
+
+/**
+ * Get the command list for the plugin menu, as a semicolon-separated string
+ * of tokens representing each command.
+ *
+ * @return The command list string.
+ */
+const char *
+PluginModule::QERPluginGetCommandList()
+{
+   // Bail out if the plugin menu doesn't exist.
+   if (UIInstance().MainMenu() == NULL)
+   {
+      return "";
+   }
+   // Get the command list from the menu.
+   return UIInstance().MainMenu()->GetCommandList().c_str();
+}
+
+/**
+ * Get the command label list for the plugin menu, as a semicolon-separated
+ * string of labels to appear in the menu.
+ *
+ * @return The command label list string.
+ */
+const char *
+PluginModule::QERPluginGetCommandTitleList()
+{
+   // Bail out if the plugin menu doesn't exist.
+   if (UIInstance().MainMenu() == NULL)
+   {
+      return "";
+   }
+   // Get the command label list from the menu.
+   return UIInstance().MainMenu()->GetCommandLabelList().c_str();
+}
+
+/**
+ * Invoke a plugin command.
+ *
+ * @param command      The command token.
+ * @param vMin         3-element float vector definining min corner of
+ *                     selection.
+ * @param vMax         3-element float vector definining max corner of
+ *                     selection.
+ * @param bSingleBrush Dummy arg; ignored.
+ */
+void
+PluginModule::QERPluginDispatch(const char *command,
+                                float *vMin,
+                                float *vMax,
+                                bool bSingleBrush)
+{
+   // Bail out if the plugin menu doesn't exist.
+   if (UIInstance().MainMenu() == NULL)
+   {
+      // XXX This shouldn't happen; might as well drop an ASSERT or error
+      // message in here. First make sure there's no odd Radiant-exiting
+      // corner case race that could trigger it though.
+      return;
+   }
+   // Send the command dispatch to the menu.
+   // XXX For my particular use case I don't need vMin or vMax, but for
+   // generality's sake those values should be passed along here, and then I
+   // can drop them when the flow gets to MeshTex-specific code... that will
+   // require changes for several types/signatures though.
+   UIInstance().MainMenu()->Dispatch(command);
+}