2 BobToolz plugin for GtkRadiant
3 Copyright (C) 2001 Gordon Biggans
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.
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.
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
23 #include "qerplugin.h"
25 #include "string/string.h"
28 #include "funchandlers.h"
30 #include "DVisDrawer.h"
31 #include "DTrainDrawer.h"
32 #include "DTreePlanter.h"
34 #include "dialogs/dialogs-gtk.h"
35 #include "../../libs/cmdlib.h"
37 #define PLUGIN_NAME "bobToolz"
39 void BobToolz_construct(){
42 void BobToolz_destroy(){
55 if ( g_TreePlanter ) {
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";
65 static ui::Window main_window{ui::null};
67 extern "C" const char* QERPlug_Init( void* hApp, void* pMainWidget ) {
68 main_window = ui::Window::from(pMainWidget);
70 return PLUGIN_NAME " for " RADIANT_NAME;
73 extern "C" const char* QERPlug_GetName() {
77 extern "C" const char* QERPlug_GetCommandList() {
78 return PLUGIN_COMMANDS;
81 extern "C" void QERPlug_Dispatch( const char *p, vec3_t vMin, vec3_t vMax, bool bSingleBrush ) {
84 if ( string_equal_nocase( p, "brush cleanup" ) ) {
87 else if ( string_equal_nocase( p, "polygon builder" ) ) {
90 else if ( string_equal_nocase( p, "caulk selection" ) ) {
93 else if ( string_equal_nocase( p, "tree planter" ) ) {
96 else if ( string_equal_nocase( p, "plot splines" ) ) {
99 else if ( string_equal_nocase( p, "drop entity" ) ) {
102 else if ( string_equal_nocase( p, "merge patches" ) ) {
105 else if ( string_equal_nocase( p, "split patches" ) ) {
108 else if ( string_equal_nocase( p, "split patches rows" ) ) {
111 else if ( string_equal_nocase( p, "split patches cols" ) ) {
114 else if ( string_equal_nocase( p, "turn edge" ) ) {
117 else if ( string_equal_nocase( p, "reset textures..." ) ) {
118 DoResetTextures( main_window );
120 else if ( string_equal_nocase( p, "pitomatic" ) ) {
123 else if ( string_equal_nocase( p, "vis viewer" ) ) {
126 else if ( string_equal_nocase( p, "stair builder..." ) ) {
129 else if ( string_equal_nocase( p, "door builder..." ) ) {
132 else if ( string_equal_nocase( p, "intersect..." ) ) {
135 else if ( string_equal_nocase( p, "make chain..." ) ) {
138 else if ( string_equal_nocase( p, "path plotter..." ) ) {
139 DoPathPlotter( main_window );
141 else if ( string_equal_nocase( p, "about..." ) ) {
142 static const char *label_text =
144 RADIANT_NAME " " RADIANT_VERSION "\n\n"
145 "by digibob <digibob@splashdamage.com>\n"
146 "https://www.splashdamage.com\n\n"
147 "Additional Contributors:\n"
148 "Arnout van Meer <rr2do2@splashdamage.com>\n"
151 RADIANT_NAME " " RADIANT_VERSION_STRING "\n"
154 GlobalRadiant().m_pfnMessageBox( main_window, label_text,
155 "About " PLUGIN_NAME,
161 const char* QERPlug_GetCommandTitleList(){
166 const int NUM_TOOLBARBUTTONS = 14;
168 std::size_t ToolbarButtonCount( void ) {
169 return NUM_TOOLBARBUTTONS;
172 class CBobtoolzToolbarButton : public IToolbarButton
175 virtual const char* getImage() const {
177 case 0: return "bobtoolz_cleanup.png";
178 case 1: return "bobtoolz_poly.png";
179 case 2: return "bobtoolz_caulk.png";
181 case 4: return "bobtoolz_treeplanter.png";
182 case 5: return "bobtoolz_trainpathplot.png";
183 case 6: return "bobtoolz_dropent.png";
185 case 8: return "bobtoolz_merge.png";
186 case 9: return "bobtoolz_split.png";
187 case 10: return "bobtoolz_splitrow.png";
188 case 11: return "bobtoolz_splitcol.png";
190 case 13: return "bobtoolz_turnedge.png";
194 virtual EType getType() const {
196 case 3: return eSpace;
197 case 4: return eToggleButton;
198 case 7: return eSpace;
199 case 12: return eSpace;
200 default: return eButton;
203 virtual const char* getText() const {
205 case 0: return "Cleanup";
206 case 1: return "Polygons";
207 case 2: return "Caulk";
208 case 4: return "Tree Planter";
209 case 5: return "Plot Splines";
210 case 6: return "Drop Entity";
211 case 8: return "Merge 2 Patches";
212 case 9: return "Split Patch";
213 case 10: return "Split Patch Rows";
214 case 11: return "Split Patch Columns";
215 case 13: return "Flip Terrain";
219 virtual const char* getTooltip() const {
221 case 0: return "Brush Cleanup";
222 case 1: return "Polygons";
223 case 2: return "Caulk selection";
224 case 4: return "Tree Planter";
225 case 5: return "Plot Splines";
226 case 6: return "Drop Entity";
227 case 8: return "Merge 2 Patches";
228 case 9: return "Split Patch";
229 case 10: return "Split Patch Rows";
230 case 11: return "Split Patch Columns";
231 case 13: return "Flip Terrain (Turn Edge)";
236 virtual void activate() const {
240 case 0: DoFixBrushes(); break;
241 case 1: DoPolygonsTB(); break;
242 case 2: DoCaulkSelection(); break;
243 case 4: DoTreePlanter(); break;
244 case 5: DoTrainPathPlot(); break;
245 case 6: DoDropEnts(); break;
246 case 8: DoMergePatches(); break;
247 case 9: DoSplitPatch(); break;
248 case 10: DoSplitPatchRows(); break;
249 case 11: DoSplitPatchCols(); break;
250 case 13: DoFlipTerrain(); break;
257 CBobtoolzToolbarButton g_bobtoolzToolbarButtons[NUM_TOOLBARBUTTONS];
259 const IToolbarButton* GetToolbarButton( std::size_t index ){
260 g_bobtoolzToolbarButtons[index].mIndex = index;
261 return &g_bobtoolzToolbarButtons[index];
265 #include "modulesystem/singletonmodule.h"
267 #include "iscenegraph.h"
270 #include "ishaders.h"
275 #include "iglrender.h"
278 class BobToolzPluginDependencies :
279 public GlobalRadiantModuleRef,
280 public GlobalUndoModuleRef,
281 public GlobalSceneGraphModuleRef,
282 public GlobalSelectionModuleRef,
283 public GlobalEntityModuleRef,
284 public GlobalEntityClassManagerModuleRef,
285 public GlobalShadersModuleRef,
286 public GlobalShaderCacheModuleRef,
287 public GlobalBrushModuleRef,
288 public GlobalPatchModuleRef,
289 public GlobalOpenGLModuleRef,
290 public GlobalOpenGLStateLibraryModuleRef
293 BobToolzPluginDependencies() :
294 GlobalEntityModuleRef( GlobalRadiant().getRequiredGameDescriptionKeyValue( "entities" ) ),
295 GlobalEntityClassManagerModuleRef( GlobalRadiant().getRequiredGameDescriptionKeyValue( "entityclass" ) ),
296 GlobalShadersModuleRef( GlobalRadiant().getRequiredGameDescriptionKeyValue( "shaders" ) ),
297 GlobalBrushModuleRef( GlobalRadiant().getRequiredGameDescriptionKeyValue( "brushtypes" ) ),
298 GlobalPatchModuleRef( GlobalRadiant().getRequiredGameDescriptionKeyValue( "patchtypes" ) ){
302 class BobToolzPluginModule : public TypeSystemRef
304 _QERPluginTable m_plugin;
306 typedef _QERPluginTable Type;
307 STRING_CONSTANT( Name, "bobToolz" );
309 BobToolzPluginModule(){
310 m_plugin.m_pfnQERPlug_Init = QERPlug_Init;
311 m_plugin.m_pfnQERPlug_GetName = QERPlug_GetName;
312 m_plugin.m_pfnQERPlug_GetCommandList = QERPlug_GetCommandList;
313 m_plugin.m_pfnQERPlug_GetCommandTitleList = QERPlug_GetCommandTitleList;
314 m_plugin.m_pfnQERPlug_Dispatch = QERPlug_Dispatch;
316 BobToolz_construct();
318 ~BobToolzPluginModule(){
321 _QERPluginTable* getTable(){
326 typedef SingletonModule<BobToolzPluginModule, BobToolzPluginDependencies> SingletonBobToolzPluginModule;
328 SingletonBobToolzPluginModule g_BobToolzPluginModule;
331 class BobToolzToolbarDependencies :
332 public ModuleRef<_QERPluginTable>
335 BobToolzToolbarDependencies() :
336 ModuleRef<_QERPluginTable>( "bobToolz" ){
340 class BobToolzToolbarModule : public TypeSystemRef
342 _QERPlugToolbarTable m_table;
344 typedef _QERPlugToolbarTable Type;
345 STRING_CONSTANT( Name, "bobToolz" );
347 BobToolzToolbarModule(){
348 m_table.m_pfnToolbarButtonCount = ToolbarButtonCount;
349 m_table.m_pfnGetToolbarButton = GetToolbarButton;
351 _QERPlugToolbarTable* getTable(){
356 typedef SingletonModule<BobToolzToolbarModule, BobToolzToolbarDependencies> SingletonBobToolzToolbarModule;
358 SingletonBobToolzToolbarModule g_BobToolzToolbarModule;
361 extern "C" void RADIANT_DLLEXPORT Radiant_RegisterModules( ModuleServer& server ){
362 initialiseModule( server );
364 g_BobToolzPluginModule.selfRegister();
365 g_BobToolzToolbarModule.selfRegister();