]> icculus.org git repositories - divverent/netradiant.git/blob - contrib/bobtoolz/bobToolz-GTK.cpp
initial
[divverent/netradiant.git] / contrib / bobtoolz / bobToolz-GTK.cpp
1 /*
2 BobToolz plugin for GtkRadiant
3 Copyright (C) 2001 Gordon Biggans
4
5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
9
10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13 Lesser General Public License for more details.
14
15 You should have received a copy of the GNU Lesser General Public
16 License along with this library; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18 */
19
20
21
22 #include "str.h"
23 #include "qerplugin.h"
24 #include "mathlib.h"
25 #include "string/string.h"
26 #include "itoolbar.h"
27
28 #include "funchandlers.h"
29 #include "DBobView.h"
30 #include "DVisDrawer.h"
31 #include "DTrainDrawer.h"
32 #include "DTreePlanter.h"
33
34 #include "dialogs/dialogs-gtk.h"
35 #include "../../libs/cmdlib.h"
36
37 void BobToolz_construct()
38 {
39 }
40
41 void BobToolz_destroy()
42 {
43         if(g_PathView) {
44                 delete g_PathView;
45                 g_PathView = NULL;
46         }
47         if(g_VisView) {
48                 delete g_VisView;
49                 g_VisView = NULL;
50         }
51         if(g_TrainView) {
52                 delete g_TrainView;
53                 g_TrainView = NULL;
54         }
55         if(g_TreePlanter) {
56                 delete g_TreePlanter;
57                 g_TreePlanter = NULL;
58         }
59 }
60
61 // plugin name
62 char* PLUGIN_NAME = "bobToolz";
63
64 // commands in the menu
65 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";
66
67 // globals
68 GtkWidget *g_pRadiantWnd = NULL;
69
70 static const char *PLUGIN_ABOUT =       "bobToolz for SDRadiant\n"
71                                                                         "by digibob (digibob@splashdamage.com)\n"
72                                                                         "http://www.splashdamage.com\n\n"
73                                                                         "Additional Contributors:\n"
74                                                                         "MarsMattel, RR2DO2\n";
75
76 extern "C" const char* QERPlug_Init( void* hApp, void* pMainWidget ) {
77         g_pRadiantWnd = (GtkWidget*)pMainWidget;
78
79         return "bobToolz for GTKradiant";
80 }
81
82 extern "C" const char* QERPlug_GetName() {
83         return PLUGIN_NAME;
84 }
85
86 extern "C" const char* QERPlug_GetCommandList() {
87         return PLUGIN_COMMANDS;
88 }
89
90 extern "C" void QERPlug_Dispatch (const char *p, vec3_t vMin, vec3_t vMax, bool bSingleBrush) {
91         LoadLists();
92
93         if( string_equal_nocase( p, "brush cleanup" ) ) {
94     DoFixBrushes();
95   } else if( string_equal_nocase( p, "polygon builder" ) ) {
96     DoPolygonsTB();
97   } else if( string_equal_nocase( p, "caulk selection" ) ) {
98     DoCaulkSelection();
99   } else if( string_equal_nocase( p, "tree planter" ) ) {
100     DoTreePlanter();
101   } else if( string_equal_nocase( p, "plot splines" ) ) {
102     DoTrainPathPlot();
103   } else if( string_equal_nocase( p, "drop entity" ) ) {
104     DoDropEnts();
105   } else if( string_equal_nocase( p, "merge patches" ) ) {
106     DoMergePatches();
107   } else if( string_equal_nocase( p, "split patches" ) ) {
108     DoSplitPatch();
109   } else if( string_equal_nocase( p, "turn edge" ) ) {
110     DoFlipTerrain();
111   } else if( string_equal_nocase(p, "reset textures...") ) {
112                 DoResetTextures();
113         } else if( string_equal_nocase(p, "pitomatic") ) {
114                 DoPitBuilder();
115         } else if( string_equal_nocase(p, "vis viewer") ) {
116                 DoVisAnalyse();
117         } else if( string_equal_nocase(p, "about...") ) {
118                 DoMessageBox(PLUGIN_ABOUT, "About", eMB_OK);
119         }
120 }
121
122 const char* QERPlug_GetCommandTitleList()
123 {
124   return "";
125 }
126
127
128 #define NUM_TOOLBARBUTTONS 9
129
130 std::size_t ToolbarButtonCount( void ) {
131         return NUM_TOOLBARBUTTONS;
132 }
133
134 class CBobtoolzToolbarButton : public IToolbarButton
135 {
136 public:
137   virtual const char* getImage() const
138   {
139     switch( mIndex ) {
140       case 0: return "bobtoolz_cleanup.bmp";
141       case 1: return "bobtoolz_poly.bmp";
142       case 2: return "bobtoolz_caulk.bmp";
143       case 3: return "bobtoolz_treeplanter.bmp";
144       case 4: return "bobtoolz_trainpathplot.bmp";
145       case 5: return "bobtoolz_dropent.bmp";
146       case 6: return "bobtoolz_merge.bmp";
147       case 7: return "bobtoolz_split.bmp";
148       case 8: return "bobtoolz_turnedge.bmp";
149     }
150     return NULL;
151   }
152   virtual EType getType() const
153   {
154     switch( mIndex ) {
155       case 3: return eToggleButton;
156       default: return eButton;
157     }    
158   }
159   virtual const char* getText() const
160   {
161     switch( mIndex ) {
162       case 0: return "Cleanup";
163       case 1: return "Polygons";
164       case 2: return "Caulk";
165       case 3: return "Tree Planter";
166       case 4: return "Plot Splines";
167       case 5: return "Drop Entity";
168       case 6: return "Merge Patches";
169       case 7: return "Split Patches";
170       case 8: return "Flip Terrain";
171     }
172     return NULL;
173   }
174   virtual const char* getTooltip() const
175   {
176     switch( mIndex ) {
177       case 0: return "Brush Cleanup";
178       case 1: return "Polygons";
179       case 2: return "Caulk selection";
180       case 3: return "Tree Planter";
181       case 4: return "Plot Splines";
182       case 5: return "Drop Entity";
183       case 6: return "Merge Patches";
184       case 7: return "Split Patches";
185       case 8: return "Flip Terrain";
186     }
187     return NULL;
188   }
189
190   virtual void activate() const
191   {
192         LoadLists();
193
194     switch( mIndex ) {
195       case 0: DoFixBrushes(); break;
196       case 1: DoPolygonsTB(); break;
197       case 2: DoCaulkSelection(); break;
198       case 3: DoTreePlanter(); break;
199       case 4: DoTrainPathPlot(); break;
200       case 5: DoDropEnts(); break;
201       case 6: DoMergePatches(); break;
202       case 7: DoSplitPatch(); break;
203       case 8: DoFlipTerrain(); break;
204     }
205   }
206
207   std::size_t mIndex;
208 };
209
210 CBobtoolzToolbarButton g_bobtoolzToolbarButtons[NUM_TOOLBARBUTTONS];
211
212 const IToolbarButton* GetToolbarButton(std::size_t index)
213 {
214   g_bobtoolzToolbarButtons[index].mIndex = index;
215   return &g_bobtoolzToolbarButtons[index];
216 }
217
218
219 #include "modulesystem/singletonmodule.h"
220
221 #include "iscenegraph.h"
222 #include "irender.h"
223 #include "iundo.h"
224 #include "ishaders.h"
225 #include "ipatch.h"
226 #include "ibrush.h"
227 #include "ientity.h"
228 #include "ieclass.h"
229 #include "iglrender.h"
230 #include "iplugin.h"
231
232 class BobToolzPluginDependencies :
233   public GlobalRadiantModuleRef,
234   public GlobalUndoModuleRef,
235   public GlobalSceneGraphModuleRef,
236   public GlobalSelectionModuleRef,
237   public GlobalEntityModuleRef,
238   public GlobalEntityClassManagerModuleRef,
239   public GlobalShadersModuleRef,
240   public GlobalShaderCacheModuleRef,
241   public GlobalBrushModuleRef,
242   public GlobalPatchModuleRef,
243   public GlobalOpenGLModuleRef, 
244   public GlobalOpenGLStateLibraryModuleRef
245 {
246 public:
247   BobToolzPluginDependencies() :
248     GlobalEntityModuleRef(GlobalRadiant().getRequiredGameDescriptionKeyValue("entities")),
249     GlobalShadersModuleRef(GlobalRadiant().getRequiredGameDescriptionKeyValue("shaders")),
250     GlobalBrushModuleRef(GlobalRadiant().getRequiredGameDescriptionKeyValue("brushtypes")),
251     GlobalPatchModuleRef(GlobalRadiant().getRequiredGameDescriptionKeyValue("patchtypes")),
252     GlobalEntityClassManagerModuleRef(GlobalRadiant().getRequiredGameDescriptionKeyValue("entityclass"))
253   {
254   }
255 };
256
257 class BobToolzPluginModule : public TypeSystemRef
258 {
259   _QERPluginTable m_plugin;
260 public:
261   typedef _QERPluginTable Type;
262   STRING_CONSTANT(Name, "bobtoolz");
263
264   BobToolzPluginModule()
265   {
266     m_plugin.m_pfnQERPlug_Init = QERPlug_Init;
267     m_plugin.m_pfnQERPlug_GetName = QERPlug_GetName;
268     m_plugin.m_pfnQERPlug_GetCommandList = QERPlug_GetCommandList;
269     m_plugin.m_pfnQERPlug_GetCommandTitleList = QERPlug_GetCommandTitleList;
270     m_plugin.m_pfnQERPlug_Dispatch = QERPlug_Dispatch;
271
272     BobToolz_construct();
273   }
274   ~BobToolzPluginModule()
275   {
276     BobToolz_destroy();
277   }
278   _QERPluginTable* getTable()
279   {
280     return &m_plugin;
281   }
282 };
283
284 typedef SingletonModule<BobToolzPluginModule, BobToolzPluginDependencies> SingletonBobToolzPluginModule;
285
286 SingletonBobToolzPluginModule g_BobToolzPluginModule;
287
288
289 class BobToolzToolbarDependencies :
290   public ModuleRef<_QERPluginTable>
291 {
292 public:
293   BobToolzToolbarDependencies() :
294     ModuleRef<_QERPluginTable>("bobtoolz")
295   {
296   }
297 };
298
299 class BobToolzToolbarModule : public TypeSystemRef
300 {
301   _QERPlugToolbarTable m_table;
302 public:
303   typedef _QERPlugToolbarTable Type;
304   STRING_CONSTANT(Name, "bobtoolz");
305
306   BobToolzToolbarModule()
307   {
308     m_table.m_pfnToolbarButtonCount = ToolbarButtonCount;
309     m_table.m_pfnGetToolbarButton = GetToolbarButton;
310   }
311   _QERPlugToolbarTable* getTable()
312   {
313     return &m_table;
314   }
315 };
316
317 typedef SingletonModule<BobToolzToolbarModule, BobToolzToolbarDependencies> SingletonBobToolzToolbarModule;
318
319 SingletonBobToolzToolbarModule g_BobToolzToolbarModule;
320
321
322 extern "C" void RADIANT_DLLEXPORT Radiant_RegisterModules(ModuleServer& server)
323 {
324   initialiseModule(server);
325
326   g_BobToolzPluginModule.selfRegister();
327   g_BobToolzToolbarModule.selfRegister();
328 }