]> git.xonotic.org Git - xonotic/netradiant.git/blob - contrib/bobtoolz/bobToolz-GTK.cpp
8723a3b222ba0c9f48dd52b336a32c26bc264aea
[xonotic/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 #define PLUGIN_NAME "bobToolz"
38
39 void BobToolz_construct(){
40 }
41
42 void BobToolz_destroy(){
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 // commands in the menu
62 static const 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,Split patches cols,Split patches rows,Turn edge";
63
64 // globals
65 ui::Window g_pRadiantWnd{ui::null};
66
67 static const char *PLUGIN_ABOUT =
68                         PLUGIN_NAME " for "
69                         RADIANT_NAME " " RADIANT_VERSION "\n\n"
70                         "by digibob <digibob@splashdamage.com> (http://www.splashdamage.com)\n\n"
71                         "Additional Contributors: MarsMattel, RR2DO2\n\n"
72                         "Built against "
73                         RADIANT_NAME " " RADIANT_VERSION_STRING "\n"
74                         __DATE__;
75
76 extern "C" const char* QERPlug_Init( void* hApp, void* pMainWidget ) {
77         g_pRadiantWnd = ui::Window::from(pMainWidget);
78
79         return PLUGIN_NAME " for " RADIANT_NAME;
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         }
96         else if ( string_equal_nocase( p, "polygon builder" ) ) {
97                 DoPolygonsTB();
98         }
99         else if ( string_equal_nocase( p, "caulk selection" ) ) {
100                 DoCaulkSelection();
101         }
102         else if ( string_equal_nocase( p, "tree planter" ) ) {
103                 DoTreePlanter();
104         }
105         else if ( string_equal_nocase( p, "plot splines" ) ) {
106                 DoTrainPathPlot();
107         }
108         else if ( string_equal_nocase( p, "drop entity" ) ) {
109                 DoDropEnts();
110         }
111         else if ( string_equal_nocase( p, "merge patches" ) ) {
112                 DoMergePatches();
113         }
114         else if ( string_equal_nocase( p, "split patches" ) ) {
115                 DoSplitPatch();
116         }
117         else if ( string_equal_nocase( p, "split patches rows" ) ) {
118                 DoSplitPatchRows();
119         }
120         else if ( string_equal_nocase( p, "split patches cols" ) ) {
121                 DoSplitPatchCols();
122         }
123         else if ( string_equal_nocase( p, "turn edge" ) ) {
124                 DoFlipTerrain();
125         }
126         else if ( string_equal_nocase( p, "reset textures..." ) ) {
127                 DoResetTextures();
128         }
129         else if ( string_equal_nocase( p, "pitomatic" ) ) {
130                 DoPitBuilder();
131         }
132         else if ( string_equal_nocase( p, "vis viewer" ) ) {
133                 DoVisAnalyse();
134         }
135         else if ( string_equal_nocase( p, "stair builder..." ) ) {
136                 DoBuildStairs();
137         }
138         else if ( string_equal_nocase( p, "door builder..." ) ) {
139                 DoBuildDoors();
140         }
141         else if ( string_equal_nocase( p, "intersect..." ) ) {
142                 DoIntersect();
143         }
144         else if ( string_equal_nocase( p, "make chain..." ) ) {
145                 DoMakeChain();
146         }
147         else if ( string_equal_nocase( p, "path plotter..." ) ) {
148                 DoPathPlotter();
149         }
150         else if ( string_equal_nocase( p, "about..." ) ) {
151                 DoMessageBox( PLUGIN_ABOUT, "About", eMB_OK );
152         }
153 }
154
155 const char* QERPlug_GetCommandTitleList(){
156         return "";
157 }
158
159
160 const int NUM_TOOLBARBUTTONS = 14;
161
162 std::size_t ToolbarButtonCount( void ) {
163         return NUM_TOOLBARBUTTONS;
164 }
165
166 class CBobtoolzToolbarButton : public IToolbarButton
167 {
168 public:
169 virtual const char* getImage() const {
170         switch ( mIndex ) {
171         case 0: return "bobtoolz_cleanup.png";
172         case 1: return "bobtoolz_poly.png";
173         case 2: return "bobtoolz_caulk.png";
174         case 3: return "";
175         case 4: return "bobtoolz_treeplanter.png";
176         case 5: return "bobtoolz_trainpathplot.png";
177         case 6: return "bobtoolz_dropent.png";
178         case 7: return "";
179         case 8: return "bobtoolz_merge.png";
180         case 9: return "bobtoolz_split.png";
181         case 10: return "bobtoolz_splitrow.png";
182         case 11: return "bobtoolz_splitcol.png";
183         case 12: return "";
184         case 13: return "bobtoolz_turnedge.png";
185         }
186         return NULL;
187 }
188 virtual EType getType() const {
189         switch ( mIndex ) {
190         case 3: return eSpace;
191         case 4: return eToggleButton;
192         case 7: return eSpace;
193         case 12: return eSpace;
194         default: return eButton;
195         }
196 }
197 virtual const char* getText() const {
198         switch ( mIndex ) {
199         case 0: return "Cleanup";
200         case 1: return "Polygons";
201         case 2: return "Caulk";
202         case 4: return "Tree Planter";
203         case 5: return "Plot Splines";
204         case 6: return "Drop Entity";
205         case 8: return "Merge 2 Patches";
206         case 9: return "Split Patch";
207         case 10: return "Split Patch Rows";
208         case 11: return "Split Patch Columns";
209         case 13: return "Flip Terrain";
210         }
211         return NULL;
212 }
213 virtual const char* getTooltip() const {
214         switch ( mIndex ) {
215         case 0: return "Brush Cleanup";
216         case 1: return "Polygons";
217         case 2: return "Caulk selection";
218         case 4: return "Tree Planter";
219         case 5: return "Plot Splines";
220         case 6: return "Drop Entity";
221         case 8: return "Merge 2 Patches";
222         case 9: return "Split Patch";
223         case 10: return "Split Patch Rows";
224         case 11: return "Split Patch Columns";
225         case 13: return "Flip Terrain (Turn Edge)";
226         }
227         return NULL;
228 }
229
230 virtual void activate() const {
231         LoadLists();
232
233         switch ( mIndex ) {
234         case 0: DoFixBrushes(); break;
235         case 1: DoPolygonsTB(); break;
236         case 2: DoCaulkSelection(); break;
237         case 4: DoTreePlanter(); break;
238         case 5: DoTrainPathPlot(); break;
239         case 6: DoDropEnts(); break;
240         case 8: DoMergePatches(); break;
241         case 9: DoSplitPatch(); break;
242         case 10: DoSplitPatchRows(); break;
243         case 11: DoSplitPatchCols(); break;
244         case 13: DoFlipTerrain(); break;
245         }
246 }
247
248 std::size_t mIndex;
249 };
250
251 CBobtoolzToolbarButton g_bobtoolzToolbarButtons[NUM_TOOLBARBUTTONS];
252
253 const IToolbarButton* GetToolbarButton( std::size_t index ){
254         g_bobtoolzToolbarButtons[index].mIndex = index;
255         return &g_bobtoolzToolbarButtons[index];
256 }
257
258
259 #include "modulesystem/singletonmodule.h"
260
261 #include "iscenegraph.h"
262 #include "irender.h"
263 #include "iundo.h"
264 #include "ishaders.h"
265 #include "ipatch.h"
266 #include "ibrush.h"
267 #include "ientity.h"
268 #include "ieclass.h"
269 #include "iglrender.h"
270 #include "iplugin.h"
271
272 class BobToolzPluginDependencies :
273         public GlobalRadiantModuleRef,
274         public GlobalUndoModuleRef,
275         public GlobalSceneGraphModuleRef,
276         public GlobalSelectionModuleRef,
277         public GlobalEntityModuleRef,
278         public GlobalEntityClassManagerModuleRef,
279         public GlobalShadersModuleRef,
280         public GlobalShaderCacheModuleRef,
281         public GlobalBrushModuleRef,
282         public GlobalPatchModuleRef,
283         public GlobalOpenGLModuleRef,
284         public GlobalOpenGLStateLibraryModuleRef
285 {
286 public:
287 BobToolzPluginDependencies() :
288         GlobalEntityModuleRef( GlobalRadiant().getRequiredGameDescriptionKeyValue( "entities" ) ),
289         GlobalEntityClassManagerModuleRef( GlobalRadiant().getRequiredGameDescriptionKeyValue( "entityclass" ) ),
290         GlobalShadersModuleRef( GlobalRadiant().getRequiredGameDescriptionKeyValue( "shaders" ) ),
291         GlobalBrushModuleRef( GlobalRadiant().getRequiredGameDescriptionKeyValue( "brushtypes" ) ),
292         GlobalPatchModuleRef( GlobalRadiant().getRequiredGameDescriptionKeyValue( "patchtypes" ) ){
293 }
294 };
295
296 class BobToolzPluginModule : public TypeSystemRef
297 {
298 _QERPluginTable m_plugin;
299 public:
300 typedef _QERPluginTable Type;
301 STRING_CONSTANT( Name, "bobToolz" );
302
303 BobToolzPluginModule(){
304         m_plugin.m_pfnQERPlug_Init = QERPlug_Init;
305         m_plugin.m_pfnQERPlug_GetName = QERPlug_GetName;
306         m_plugin.m_pfnQERPlug_GetCommandList = QERPlug_GetCommandList;
307         m_plugin.m_pfnQERPlug_GetCommandTitleList = QERPlug_GetCommandTitleList;
308         m_plugin.m_pfnQERPlug_Dispatch = QERPlug_Dispatch;
309
310         BobToolz_construct();
311 }
312 ~BobToolzPluginModule(){
313         BobToolz_destroy();
314 }
315 _QERPluginTable* getTable(){
316         return &m_plugin;
317 }
318 };
319
320 typedef SingletonModule<BobToolzPluginModule, BobToolzPluginDependencies> SingletonBobToolzPluginModule;
321
322 SingletonBobToolzPluginModule g_BobToolzPluginModule;
323
324
325 class BobToolzToolbarDependencies :
326         public ModuleRef<_QERPluginTable>
327 {
328 public:
329 BobToolzToolbarDependencies() :
330         ModuleRef<_QERPluginTable>( "bobToolz" ){
331 }
332 };
333
334 class BobToolzToolbarModule : public TypeSystemRef
335 {
336 _QERPlugToolbarTable m_table;
337 public:
338 typedef _QERPlugToolbarTable Type;
339 STRING_CONSTANT( Name, "bobToolz" );
340
341 BobToolzToolbarModule(){
342         m_table.m_pfnToolbarButtonCount = ToolbarButtonCount;
343         m_table.m_pfnGetToolbarButton = GetToolbarButton;
344 }
345 _QERPlugToolbarTable* getTable(){
346         return &m_table;
347 }
348 };
349
350 typedef SingletonModule<BobToolzToolbarModule, BobToolzToolbarDependencies> SingletonBobToolzToolbarModule;
351
352 SingletonBobToolzToolbarModule g_BobToolzToolbarModule;
353
354
355 extern "C" void RADIANT_DLLEXPORT Radiant_RegisterModules( ModuleServer& server ){
356         initialiseModule( server );
357
358         g_BobToolzPluginModule.selfRegister();
359         g_BobToolzToolbarModule.selfRegister();
360 }