netradiant-custom/contrib/meshtex/PluginModule.cpp
2021-05-24 20:23:09 +03:00

160 lines
4.1 KiB
C++

/**
* @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 defining min corner of
* selection.
* @param vMax 3-element float vector defining 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);
}