2 BobToolz plugin for GtkRadiant
\r
3 Copyright (C) 2001 Gordon Biggans
\r
5 This library is free software; you can redistribute it and/or
\r
6 modify it under the terms of the GNU Lesser General Public
\r
7 License as published by the Free Software Foundation; either
\r
8 version 2.1 of the License, or (at your option) any later version.
\r
10 This library is distributed in the hope that it will be useful,
\r
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
\r
13 Lesser General Public License for more details.
\r
15 You should have received a copy of the GNU Lesser General Public
\r
16 License along with this library; if not, write to the Free Software
\r
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
\r
22 #include "funchandlers.h"
\r
25 #include "dialogs/dialogs-gtk.h"
\r
26 #include "../../libs/cmdlib.h"
\r
28 // Radiant function table
\r
29 _QERFuncTable_1 g_FuncTable;
\r
30 _QERAppDataTable g_AppDataTable;
\r
31 _QERBrushTable g_BrushTable;
\r
32 _QERShadersTable g_ShadersTable; // vvvvvvvvvvvvvvvvvvvv
\r
33 _QERSelectedFaceTable g_SelectedFaceTable; // to get texture sizes
\r
34 _QERQglTable g_QglTable; // for path plotting (hooking to DBobView)
\r
35 _QERUITable g_MessageTable; // for path plotting (listening for update)
\r
36 _QEREntityTable g_EntityTable;
\r
39 char* PLUGIN_NAME = "bobToolz";
\r
41 // commands in the menu
\r
42 static char* PLUGIN_COMMANDS = "About...,-,Reset Textures...,PitOMatic,-,Vis Viewer,Brush Cleanup,Polygon Builder,Caulk Selection,-,Tree Planter,Drop Entity,Plot Splines,-,Merge Patches,Split patches,Turn edge";
\r
45 GtkWidget *g_pRadiantWnd = NULL;
\r
47 static const char *PLUGIN_ABOUT = "bobToolz for SDRadiant\n"
\r
48 "by digibob (digibob@splashdamage.com)\n"
\r
49 "http://www.splashdamage.com\n\n"
\r
50 "Additional Contributors:\n"
\r
51 "MarsMattel, RR2DO2\n";
\r
53 extern "C" const char* QERPlug_Init( void* hApp, void* pMainWidget ) {
\r
54 g_pRadiantWnd = (GtkWidget*)pMainWidget;
\r
56 return "bobToolz for GTKradiant";
\r
59 extern "C" const char* QERPlug_GetName() {
\r
63 extern "C" const char* QERPlug_GetCommandList() {
\r
64 return PLUGIN_COMMANDS;
\r
67 extern "C" void QERPlug_Dispatch (const char *p, vec3_t vMin, vec3_t vMax, bool bSingleBrush) {
\r
70 if( !stricmp( p, "brush cleanup" ) ) {
\r
72 } else if( !stricmp( p, "polygon builder" ) ) {
\r
74 } else if( !stricmp( p, "caulk selection" ) ) {
\r
76 } else if( !stricmp( p, "tree planter" ) ) {
\r
78 } else if( !stricmp( p, "plot splines" ) ) {
\r
80 } else if( !stricmp( p, "drop entity" ) ) {
\r
82 } else if( !stricmp( p, "merge patches" ) ) {
\r
84 } else if( !stricmp( p, "split patches" ) ) {
\r
86 } else if( !stricmp( p, "turn edge" ) ) {
\r
88 } else if( !stricmp(p, "reset textures...") ) {
\r
90 } else if( !stricmp(p, "pitomatic") ) {
\r
91 DoPitBuilder(vMin, vMax);
\r
92 } else if( !stricmp(p, "vis viewer") ) {
\r
94 } else if( !stricmp(p, "about...") ) {
\r
95 DoMessageBox(PLUGIN_ABOUT, "About", IDOK);
\r
99 #define NUM_TOOLBARBUTTONS 9
\r
101 unsigned int ToolbarButtonCount( void ) {
\r
102 return NUM_TOOLBARBUTTONS;
\r
105 // Load a xpm file and return a pixmap widget.
\r
106 GtkWidget* new_pixmap (char* filename) {
\r
107 GdkPixmap *gdkpixmap;
\r
111 g_FuncTable.m_pfnLoadBitmap(filename, (void **)&gdkpixmap, (void **)&mask);
\r
112 pixmap = gtk_pixmap_new (gdkpixmap, mask);
\r
114 gdk_pixmap_unref (gdkpixmap);
\r
115 gdk_pixmap_unref (mask);
\r
120 class CBobtoolzToolbarButton : public IToolbarButton
\r
123 virtual const char* getImage() const
\r
126 case 0: return "bobtoolz_cleanup.bmp";
\r
127 case 1: return "bobtoolz_poly.bmp";
\r
128 case 2: return "bobtoolz_caulk.bmp";
\r
129 case 3: return "bobtoolz_treeplanter.bmp";
\r
130 case 4: return "bobtoolz_trainpathplot.bmp";
\r
131 case 5: return "bobtoolz_dropent.bmp";
\r
132 case 6: return "bobtoolz_merge.bmp";
\r
133 case 7: return "bobtoolz_split.bmp";
\r
134 case 8: return "bobtoolz_turnedge.bmp";
\r
138 virtual EType getType() const
\r
141 case 3: return eToggleButton;
\r
142 default: return eButton;
\r
145 virtual const char* getText() const
\r
148 case 0: return "Cleanup";
\r
149 case 1: return "Polygons";
\r
150 case 2: return "Caulk";
\r
151 case 3: return "Tree Planter";
\r
152 case 4: return "Plot Splines";
\r
153 case 5: return "Drop Entity";
\r
154 case 6: return "Merge Patches";
\r
155 case 7: return "Split Patches";
\r
156 case 8: return "Flip Terrain";
\r
160 virtual const char* getTooltip() const
\r
163 case 0: return "Brush Cleanup";
\r
164 case 1: return "Polygons";
\r
165 case 2: return "Caulk selection";
\r
166 case 3: return "Tree Planter";
\r
167 case 4: return "Plot Splines";
\r
168 case 5: return "Drop Entity";
\r
169 case 6: return "Merge Patches";
\r
170 case 7: return "Split Patches";
\r
171 case 8: return "Flip Terrain";
\r
176 virtual void activate() const
\r
181 case 0: DoFixBrushes(); break;
\r
182 case 1: DoPolygonsTB(); break;
\r
183 case 2: DoCaulkSelection(); break;
\r
184 case 3: DoTreePlanter(); break;
\r
185 case 4: DoTrainPathPlot(); break;
\r
186 case 5: DoDropEnts(); break;
\r
187 case 6: DoMergePatches(); break;
\r
188 case 7: DoSplitPatch(); break;
\r
189 case 8: DoFlipTerrain(); break;
\r
196 CBobtoolzToolbarButton g_bobtoolzToolbarButtons[NUM_TOOLBARBUTTONS];
\r
198 const IToolbarButton* GetToolbarButton(unsigned int index)
\r
200 g_bobtoolzToolbarButtons[index].mIndex = index;
\r
201 return &g_bobtoolzToolbarButtons[index];
\r
204 // =============================================================================
\r
207 class CSynapseClientBobtoolz : public CSynapseClient
\r
210 // CSynapseClient API
\r
211 bool RequestAPI(APIDescriptor_t *pAPI);
\r
212 const char* GetInfo();
\r
214 CSynapseClientBobtoolz() { }
\r
215 virtual ~CSynapseClientBobtoolz() { }
\r
219 CSynapseServer* g_pSynapseServer = NULL;
\r
220 CSynapseClientBobtoolz g_SynapseClient;
\r
223 #pragma GCC visibility push(default)
\r
225 extern "C" CSynapseClient* SYNAPSE_DLL_EXPORT Synapse_EnumerateInterfaces( const char *version, CSynapseServer *pServer ) {
\r
227 #pragma GCC visibility pop
\r
229 if (strcmp(version, SYNAPSE_VERSION))
\r
231 Syn_Printf("ERROR: synapse API version mismatch: should be '" SYNAPSE_VERSION "', got '%s'\n", version);
\r
234 g_pSynapseServer = pServer;
\r
235 g_pSynapseServer->IncRef();
\r
236 Set_Syn_Printf(g_pSynapseServer->Get_Syn_Printf());
\r
238 g_SynapseClient.AddAPI(TOOLBAR_MAJOR, BOBTOOLZ_MINOR, sizeof(_QERPlugToolbarTable));
\r
239 g_SynapseClient.AddAPI(PLUGIN_MAJOR, BOBTOOLZ_MINOR, sizeof(_QERPluginTable));
\r
241 g_SynapseClient.AddAPI(DATA_MAJOR, NULL, sizeof(g_AppDataTable), SYN_REQUIRE, &g_AppDataTable);
\r
242 g_SynapseClient.AddAPI(BRUSH_MAJOR, NULL, sizeof(g_BrushTable), SYN_REQUIRE, &g_BrushTable);
\r
243 g_SynapseClient.AddAPI(SHADERS_MAJOR, "*", sizeof(g_ShadersTable), SYN_REQUIRE, &g_ShadersTable);
\r
244 g_SynapseClient.AddAPI(ENTITY_MAJOR, NULL, sizeof(g_EntityTable), SYN_REQUIRE, &g_EntityTable);
\r
245 g_SynapseClient.AddAPI(SELECTEDFACE_MAJOR, NULL, sizeof(g_SelectedFaceTable), SYN_REQUIRE, &g_SelectedFaceTable);
\r
246 g_SynapseClient.AddAPI(UI_MAJOR, NULL, sizeof(g_MessageTable), SYN_REQUIRE, &g_MessageTable);
\r
247 g_SynapseClient.AddAPI(RADIANT_MAJOR, NULL, sizeof(g_FuncTable), SYN_REQUIRE, &g_FuncTable);
\r
248 g_SynapseClient.AddAPI(QGL_MAJOR, NULL, sizeof(g_QglTable), SYN_REQUIRE, &g_QglTable);
\r
250 return &g_SynapseClient;
\r
253 bool CSynapseClientBobtoolz::RequestAPI(APIDescriptor_t *pAPI)
\r
255 if( !strcmp(pAPI->minor_name, BOBTOOLZ_MINOR) )
\r
257 if( !strcmp(pAPI->major_name, PLUGIN_MAJOR) )
\r
259 _QERPluginTable* pTable= static_cast<_QERPluginTable*>(pAPI->mpTable);
\r
261 pTable->m_pfnQERPlug_Init = QERPlug_Init;
\r
262 pTable->m_pfnQERPlug_GetName = QERPlug_GetName;
\r
263 pTable->m_pfnQERPlug_GetCommandList = QERPlug_GetCommandList;
\r
264 pTable->m_pfnQERPlug_Dispatch = QERPlug_Dispatch;
\r
268 else if( !strcmp(pAPI->major_name, TOOLBAR_MAJOR) )
\r
270 _QERPlugToolbarTable* pTable= static_cast<_QERPlugToolbarTable*>(pAPI->mpTable);
\r
272 pTable->m_pfnToolbarButtonCount = &ToolbarButtonCount;
\r
273 pTable->m_pfnGetToolbarButton = &GetToolbarButton;
\r
279 Syn_Printf("ERROR: RequestAPI( '%s' ) not found in '%s'\n", pAPI->major_name, GetInfo());
\r
283 #include "version.h"
\r
285 const char* CSynapseClientBobtoolz::GetInfo()
\r
287 return "bobToolz module built " __DATE__ " " RADIANT_VERSION;
\r
290 char* GetFilename(char* buffer, const char* filename) {
\r
291 strcpy(buffer, g_pSynapseServer->GetModuleFilename(&g_SynapseClient));
\r
292 StripFilename( buffer );
\r
293 strcat(buffer, "/");
\r
294 strcat(buffer, filename);
\r
295 buffer = UnixToDosPath(buffer);
\r