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
222 extern "C" CSynapseClient* SYNAPSE_DLL_EXPORT Synapse_EnumerateInterfaces (const char *version, CSynapseServer *pServer)
\r
224 if (strcmp(version, SYNAPSE_VERSION))
\r
226 Syn_Printf("ERROR: synapse API version mismatch: should be '" SYNAPSE_VERSION "', got '%s'\n", version);
\r
229 g_pSynapseServer = pServer;
\r
230 g_pSynapseServer->IncRef();
\r
231 Set_Syn_Printf(g_pSynapseServer->Get_Syn_Printf());
\r
233 g_SynapseClient.AddAPI(TOOLBAR_MAJOR, BOBTOOLZ_MINOR, sizeof(_QERPlugToolbarTable));
\r
234 g_SynapseClient.AddAPI(PLUGIN_MAJOR, BOBTOOLZ_MINOR, sizeof(_QERPluginTable));
\r
236 g_SynapseClient.AddAPI(DATA_MAJOR, NULL, sizeof(g_AppDataTable), SYN_REQUIRE, &g_AppDataTable);
\r
237 g_SynapseClient.AddAPI(BRUSH_MAJOR, NULL, sizeof(g_BrushTable), SYN_REQUIRE, &g_BrushTable);
\r
238 g_SynapseClient.AddAPI(SHADERS_MAJOR, "*", sizeof(g_ShadersTable), SYN_REQUIRE, &g_ShadersTable);
\r
239 g_SynapseClient.AddAPI(ENTITY_MAJOR, NULL, sizeof(g_EntityTable), SYN_REQUIRE, &g_EntityTable);
\r
240 g_SynapseClient.AddAPI(SELECTEDFACE_MAJOR, NULL, sizeof(g_SelectedFaceTable), SYN_REQUIRE, &g_SelectedFaceTable);
\r
241 g_SynapseClient.AddAPI(UI_MAJOR, NULL, sizeof(g_MessageTable), SYN_REQUIRE, &g_MessageTable);
\r
242 g_SynapseClient.AddAPI(RADIANT_MAJOR, NULL, sizeof(g_FuncTable), SYN_REQUIRE, &g_FuncTable);
\r
243 g_SynapseClient.AddAPI(QGL_MAJOR, NULL, sizeof(g_QglTable), SYN_REQUIRE, &g_QglTable);
\r
245 return &g_SynapseClient;
\r
248 bool CSynapseClientBobtoolz::RequestAPI(APIDescriptor_t *pAPI)
\r
250 if( !strcmp(pAPI->minor_name, BOBTOOLZ_MINOR) )
\r
252 if( !strcmp(pAPI->major_name, PLUGIN_MAJOR) )
\r
254 _QERPluginTable* pTable= static_cast<_QERPluginTable*>(pAPI->mpTable);
\r
256 pTable->m_pfnQERPlug_Init = QERPlug_Init;
\r
257 pTable->m_pfnQERPlug_GetName = QERPlug_GetName;
\r
258 pTable->m_pfnQERPlug_GetCommandList = QERPlug_GetCommandList;
\r
259 pTable->m_pfnQERPlug_Dispatch = QERPlug_Dispatch;
\r
263 else if( !strcmp(pAPI->major_name, TOOLBAR_MAJOR) )
\r
265 _QERPlugToolbarTable* pTable= static_cast<_QERPlugToolbarTable*>(pAPI->mpTable);
\r
267 pTable->m_pfnToolbarButtonCount = &ToolbarButtonCount;
\r
268 pTable->m_pfnGetToolbarButton = &GetToolbarButton;
\r
274 Syn_Printf("ERROR: RequestAPI( '%s' ) not found in '%s'\n", pAPI->major_name, GetInfo());
\r
278 #include "version.h"
\r
280 const char* CSynapseClientBobtoolz::GetInfo()
\r
282 return "bobToolz module built " __DATE__ " " RADIANT_VERSION;
\r
285 char* GetFilename(char* buffer, const char* filename) {
\r
286 strcpy(buffer, g_pSynapseServer->GetModuleFilename(&g_SynapseClient));
\r
287 StripFilename( buffer );
\r
288 strcat(buffer, "/");
\r
289 strcat(buffer, filename);
\r
290 buffer = UnixToDosPath(buffer);
\r