mirror of
https://github.com/UberGames/GtkRadiant.git
synced 2024-11-25 05:11:43 +00:00
* sample plugin
git-svn-id: svn://svn.icculus.org/gtkradiant/GtkRadiant/branches/ZeroRadiant@205 8a3a26a2-13c4-0310-b231-cf6edde360e5
This commit is contained in:
parent
8999fcc3a7
commit
a5664116d3
5 changed files with 350 additions and 0 deletions
|
@ -112,6 +112,7 @@ class Config:
|
|||
'plugins/imagem8/imagem8.vcproj',
|
||||
'plugins/spritemodel/spritemodel.vcproj',
|
||||
'plugins/textool/TexTool.vcproj',
|
||||
# 'plugins/sample/sample.vcproj',
|
||||
'plugins/map/map.vcproj',
|
||||
'plugins/mapxml/mapxml.vcproj',
|
||||
'plugins/shaders/shaders.vcproj',
|
||||
|
|
209
plugins/sample/plugin.cpp
Normal file
209
plugins/sample/plugin.cpp
Normal file
|
@ -0,0 +1,209 @@
|
|||
/*
|
||||
Copyright (C) 1999-2007 id Software, Inc. and contributors.
|
||||
For a list of contributors, see the accompanying CONTRIBUTORS file.
|
||||
|
||||
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 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
|
||||
*/
|
||||
|
||||
#include "plugin.h"
|
||||
|
||||
#define CMD_SEP "-"
|
||||
#define CMD_ABOUT "About..."
|
||||
// =============================================================================
|
||||
// Globals
|
||||
|
||||
// function tables
|
||||
_QERFuncTable_1 g_FuncTable;
|
||||
_QERQglTable g_QglTable;
|
||||
_QERFileSystemTable g_FileSystemTable;
|
||||
_QEREntityTable g_EntityTable;
|
||||
_QERAppDataTable g_DataTable;
|
||||
|
||||
// the gtk widget
|
||||
void *g_pMainWidget;
|
||||
|
||||
// =============================================================================
|
||||
// plugin implementation
|
||||
|
||||
#define PLUGIN_NAME "Sample plugin"
|
||||
|
||||
//backwards for some reason
|
||||
static const char *PLUGIN_COMMANDS = CMD_ABOUT ";-";
|
||||
static const char *PLUGIN_ABOUT = "Sample plugin\n";
|
||||
|
||||
void DoSample (void)
|
||||
{
|
||||
Sys_Printf("Sample button hit");
|
||||
}
|
||||
|
||||
#define NUM_TOOLBAR_BUTTONS 1
|
||||
typedef struct toolbar_button_info_s
|
||||
{
|
||||
char *image;
|
||||
char *text;
|
||||
char *tip;
|
||||
void (*func)();
|
||||
IToolbarButton::EType type;
|
||||
} toolbar_button_info_t;
|
||||
|
||||
static const toolbar_button_info_t toolbar_buttons[NUM_TOOLBAR_BUTTONS] =
|
||||
{
|
||||
{
|
||||
"sample.bmp",
|
||||
"Sample",
|
||||
"Sample image",
|
||||
DoSample,
|
||||
IToolbarButton::eToggleButton
|
||||
},
|
||||
};
|
||||
|
||||
class SampleButton : public IToolbarButton
|
||||
{
|
||||
public:
|
||||
const toolbar_button_info_s *bi;
|
||||
virtual const char* getImage() const
|
||||
{
|
||||
return bi->image;
|
||||
}
|
||||
virtual const char* getText() const
|
||||
{
|
||||
return bi->text;
|
||||
}
|
||||
virtual const char* getTooltip() const
|
||||
{
|
||||
return bi->tip;
|
||||
}
|
||||
virtual void activate() const
|
||||
{
|
||||
bi->func();
|
||||
return ;
|
||||
}
|
||||
virtual EType getType() const
|
||||
{
|
||||
return bi->type;
|
||||
}
|
||||
};
|
||||
|
||||
SampleButton g_samplebuttons[NUM_TOOLBAR_BUTTONS];
|
||||
|
||||
unsigned int ToolbarButtonCount (void)
|
||||
{
|
||||
return NUM_TOOLBAR_BUTTONS;
|
||||
}
|
||||
|
||||
const IToolbarButton* GetToolbarButton (unsigned int index)
|
||||
{
|
||||
g_samplebuttons[index].bi = &toolbar_buttons[index];
|
||||
return &g_samplebuttons[index];
|
||||
}
|
||||
|
||||
extern "C" const char* QERPlug_Init (void *hApp, void* pMainWidget)
|
||||
{
|
||||
g_pMainWidget = pMainWidget;
|
||||
|
||||
return PLUGIN_NAME;
|
||||
}
|
||||
|
||||
extern "C" const char* QERPlug_GetName (void)
|
||||
{
|
||||
return (char *) PLUGIN_NAME;
|
||||
}
|
||||
|
||||
extern "C" const char* QERPlug_GetCommandList (void)
|
||||
{
|
||||
return (char *) PLUGIN_COMMANDS;
|
||||
}
|
||||
|
||||
extern "C" void QERPlug_Dispatch (const char *p, vec3_t vMin, vec3_t vMax, bool bSingleBrush)
|
||||
{
|
||||
if (!strcmp(p, CMD_ABOUT)) {
|
||||
g_FuncTable.m_pfnMessageBox(NULL, PLUGIN_ABOUT, "About", MB_OK, NULL);
|
||||
} else {
|
||||
Sys_Printf("Message: %s\n", p);
|
||||
}
|
||||
}
|
||||
|
||||
// =============================================================================
|
||||
// SYNAPSE
|
||||
|
||||
CSynapseServer* g_pSynapseServer = NULL;
|
||||
CSynapseClientSample g_SynapseClient;
|
||||
|
||||
#if __GNUC__ >= 4
|
||||
#pragma GCC visibility push(default)
|
||||
#endif
|
||||
extern "C" CSynapseClient* SYNAPSE_DLL_EXPORT Synapse_EnumerateInterfaces (const char *version, CSynapseServer *pServer)
|
||||
{
|
||||
#if __GNUC__ >= 4
|
||||
#pragma GCC visibility pop
|
||||
#endif
|
||||
if (strcmp(version, SYNAPSE_VERSION)) {
|
||||
Syn_Printf("ERROR: synapse API version mismatch: should be '" SYNAPSE_VERSION "', got '%s'\n", version);
|
||||
return NULL;
|
||||
}
|
||||
g_pSynapseServer = pServer;
|
||||
g_pSynapseServer->IncRef();
|
||||
Set_Syn_Printf(g_pSynapseServer->Get_Syn_Printf());
|
||||
|
||||
g_SynapseClient.AddAPI(TOOLBAR_MAJOR, SAMPLE_MINOR, sizeof(_QERPlugToolbarTable));
|
||||
g_SynapseClient.AddAPI(PLUGIN_MAJOR, SAMPLE_MINOR, sizeof(_QERPluginTable));
|
||||
|
||||
g_SynapseClient.AddAPI(RADIANT_MAJOR, NULL, sizeof(g_FuncTable), SYN_REQUIRE, &g_FuncTable);
|
||||
g_SynapseClient.AddAPI(QGL_MAJOR, NULL, sizeof(g_QglTable), SYN_REQUIRE, &g_QglTable);
|
||||
g_SynapseClient.AddAPI(VFS_MAJOR, "*", sizeof(g_FileSystemTable), SYN_REQUIRE, &g_FileSystemTable);
|
||||
// get worldspawn
|
||||
g_SynapseClient.AddAPI(ENTITY_MAJOR, NULL, sizeof(g_EntityTable), SYN_REQUIRE, &g_EntityTable);
|
||||
// selected brushes
|
||||
g_SynapseClient.AddAPI(DATA_MAJOR, NULL, sizeof(g_DataTable), SYN_REQUIRE, &g_DataTable);
|
||||
|
||||
return &g_SynapseClient;
|
||||
}
|
||||
|
||||
bool CSynapseClientSample::RequestAPI (APIDescriptor_t *pAPI)
|
||||
{
|
||||
if (!strcmp(pAPI->major_name, PLUGIN_MAJOR)) {
|
||||
_QERPluginTable* pTable= static_cast<_QERPluginTable*>(pAPI->mpTable);
|
||||
|
||||
pTable->m_pfnQERPlug_Init = QERPlug_Init;
|
||||
pTable->m_pfnQERPlug_GetName = QERPlug_GetName;
|
||||
pTable->m_pfnQERPlug_GetCommandList = QERPlug_GetCommandList;
|
||||
pTable->m_pfnQERPlug_Dispatch = QERPlug_Dispatch;
|
||||
return true;
|
||||
} else if (!strcmp(pAPI->major_name, TOOLBAR_MAJOR)) {
|
||||
_QERPlugToolbarTable* pTable= static_cast<_QERPlugToolbarTable*>(pAPI->mpTable);
|
||||
|
||||
pTable->m_pfnToolbarButtonCount = &ToolbarButtonCount;
|
||||
pTable->m_pfnGetToolbarButton = &GetToolbarButton;
|
||||
return true;
|
||||
}
|
||||
|
||||
Syn_Printf("ERROR: RequestAPI( '%s' ) not found in '%s'\n", pAPI->major_name, GetInfo());
|
||||
return false;
|
||||
}
|
||||
|
||||
#include "version.h"
|
||||
|
||||
const char* CSynapseClientSample::GetInfo()
|
||||
{
|
||||
return PLUGIN_NAME " plugin built " __DATE__ " " RADIANT_VERSION;
|
||||
}
|
||||
|
||||
const char* CSynapseClientSample::GetName()
|
||||
{
|
||||
return PLUGIN_NAME;
|
||||
}
|
||||
|
67
plugins/sample/plugin.h
Normal file
67
plugins/sample/plugin.h
Normal file
|
@ -0,0 +1,67 @@
|
|||
/*
|
||||
Copyright (C) 1999-2007 id Software, Inc. and contributors.
|
||||
For a list of contributors, see the accompanying CONTRIBUTORS file.
|
||||
|
||||
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 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
|
||||
*/
|
||||
|
||||
#ifndef _PLUGIN_H_
|
||||
#define _PLUGIN_H_
|
||||
|
||||
/*!
|
||||
\todo need general notice about lib purpose etc.
|
||||
and the external dependencies (such as GLib, STL, mathlib etc.)
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
// for CPtrArray for idata.h
|
||||
#include "missing.h"
|
||||
|
||||
#include "synapse.h"
|
||||
#include "iplugin.h"
|
||||
#include "itoolbar.h"
|
||||
#define USE_QERTABLE_DEFINE
|
||||
#include "qerplugin.h"
|
||||
#include "igl.h"
|
||||
#include "ifilesystem.h"
|
||||
#include "ientity.h"
|
||||
#include "idata.h"
|
||||
|
||||
extern _QERFuncTable_1 g_FuncTable;
|
||||
extern _QERQglTable g_QglTable;
|
||||
extern _QERFileSystemTable g_FileSystemTable;
|
||||
extern _QEREntityTable g_EntityTable;
|
||||
extern _QERAppDataTable g_DataTable;
|
||||
extern void *g_pMainWidget;
|
||||
|
||||
extern CSynapseServer* g_pSynapseServer;
|
||||
|
||||
class CSynapseClientSample : public CSynapseClient
|
||||
{
|
||||
public:
|
||||
// CSynapseClient API
|
||||
bool RequestAPI(APIDescriptor_t *pAPI);
|
||||
const char* GetInfo();
|
||||
const char* GetName();
|
||||
|
||||
CSynapseClientSample() { }
|
||||
virtual ~CSynapseClientSample() { }
|
||||
};
|
||||
|
||||
#define SAMPLE_MINOR "sample"
|
||||
|
||||
#endif // _PLUGIN_H_
|
8
plugins/sample/sample.def
Normal file
8
plugins/sample/sample.def
Normal file
|
@ -0,0 +1,8 @@
|
|||
; sample.def : Declares the module parameters for the DLL.
|
||||
|
||||
LIBRARY "SAMPLE"
|
||||
DESCRIPTION 'SAMPLE Windows Dynamic Link Library'
|
||||
|
||||
EXPORTS
|
||||
; Explicit exports can go here
|
||||
Synapse_EnumerateInterfaces @1
|
65
plugins/sample/sample.vcproj
Normal file
65
plugins/sample/sample.vcproj
Normal file
|
@ -0,0 +1,65 @@
|
|||
<?xml version="1.0" ?><VisualStudioProject Name="sample" ProjectGUID="{65D02375-63EE-4A8A-9F8E-504B1D5A1D02}" ProjectType="Visual C++" RootNamespace="sample" Version="8.00">
|
||||
<Platforms>
|
||||
<Platform Name="Win32"/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration CharacterSet="2" ConfigurationType="1" IntermediateDirectory="$(ConfigurationName)" Name="Debug|Win32" OutputDirectory="$(SolutionDir)$(ConfigurationName)">
|
||||
<Tool Name="VCPreBuildEventTool"/>
|
||||
<Tool Name="VCCustomBuildTool"/>
|
||||
<Tool Name="VCXMLDataGeneratorTool"/>
|
||||
<Tool Name="VCWebServiceProxyGeneratorTool"/>
|
||||
<Tool Name="VCMIDLTool"/>
|
||||
<Tool AdditionalIncludeDirectories=""$(SolutionDir)\include";"$(SolutionDir)\libs";"$(SolutionDir)\..\STLPort\stlport";"$(SolutionDir)\..\gtk2\include";"$(SolutionDir)\..\gtk2\include\glib-2.0";"$(SolutionDir)\..\gtk2\lib\glib-2.0\include";"$(SolutionDir)\..\libxml2\include"" BasicRuntimeChecks="3" DebugInformationFormat="4" Detect64BitPortabilityProblems="true" DisableSpecificWarnings="4996;4244;4267" MinimalRebuild="true" Name="VCCLCompilerTool" Optimization="0" PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS" RuntimeLibrary="3" WarningLevel="3"/>
|
||||
<Tool Name="VCManagedResourceCompilerTool"/>
|
||||
<Tool Name="VCResourceCompilerTool"/>
|
||||
<Tool Name="VCPreLinkEventTool"/>
|
||||
<Tool GenerateDebugInformation="true" Name="VCLinkerTool" TargetMachine="1"/>
|
||||
<Tool Name="VCALinkTool"/>
|
||||
<Tool Name="VCManifestTool"/>
|
||||
<Tool Name="VCXDCMakeTool"/>
|
||||
<Tool Name="VCBscMakeTool"/>
|
||||
<Tool Name="VCFxCopTool"/>
|
||||
<Tool Name="VCAppVerifierTool"/>
|
||||
<Tool Name="VCWebDeploymentTool"/>
|
||||
<Tool Name="VCPostBuildEventTool"/>
|
||||
</Configuration>
|
||||
<Configuration CharacterSet="2" ConfigurationType="1" IntermediateDirectory="$(ConfigurationName)" Name="Release|Win32" OutputDirectory="$(SolutionDir)$(ConfigurationName)" WholeProgramOptimization="1">
|
||||
<Tool Name="VCPreBuildEventTool"/>
|
||||
<Tool Name="VCCustomBuildTool"/>
|
||||
<Tool Name="VCXMLDataGeneratorTool"/>
|
||||
<Tool Name="VCWebServiceProxyGeneratorTool"/>
|
||||
<Tool Name="VCMIDLTool"/>
|
||||
<Tool AdditionalIncludeDirectories=""$(SolutionDir)\include";"$(SolutionDir)\libs";"$(SolutionDir)\..\STLPort\stlport";"$(SolutionDir)\..\gtk2\include";"$(SolutionDir)\..\gtk2\include\glib-2.0";"$(SolutionDir)\..\gtk2\lib\glib-2.0\include";"$(SolutionDir)\..\libxml2\include"" DebugInformationFormat="3" Detect64BitPortabilityProblems="true" DisableSpecificWarnings="4996;4244;4267" Name="VCCLCompilerTool" PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS" RuntimeLibrary="2" WarningLevel="3"/>
|
||||
<Tool Name="VCManagedResourceCompilerTool"/>
|
||||
<Tool Name="VCResourceCompilerTool"/>
|
||||
<Tool Name="VCPreLinkEventTool"/>
|
||||
<Tool EnableCOMDATFolding="2" GenerateDebugInformation="true" Name="VCLinkerTool" OptimizeReferences="2" TargetMachine="1"/>
|
||||
<Tool Name="VCALinkTool"/>
|
||||
<Tool Name="VCManifestTool"/>
|
||||
<Tool Name="VCXDCMakeTool"/>
|
||||
<Tool Name="VCBscMakeTool"/>
|
||||
<Tool Name="VCFxCopTool"/>
|
||||
<Tool Name="VCAppVerifierTool"/>
|
||||
<Tool Name="VCWebDeploymentTool"/>
|
||||
<Tool Name="VCPostBuildEventTool"/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" Name="Source Files">
|
||||
<File RelativePath=".\plugin.cpp">
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter Filter="h;hpp;hxx;hm;inl" Name="Header Files">
|
||||
<File RelativePath=".\plugin.h">
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" Name="Resource Files">
|
||||
</Filter>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
Loading…
Reference in a new issue