X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=contrib%2Fbobtoolz%2FbobToolz-GTK.cpp;h=6cf91a0be9947d868d0ab628105e0fa95f2a38e8;hb=34e7980b3d67014bb32b4f67ce94c08cb5dd25e7;hp=1e55c31cff4f8981d3b36f3d9fa6bfc85f0ddd26;hpb=4189d27b34641ad3325d724f6cac012fa742b2ad;p=xonotic%2Fnetradiant.git diff --git a/contrib/bobtoolz/bobToolz-GTK.cpp b/contrib/bobtoolz/bobToolz-GTK.cpp index 1e55c31c..6cf91a0b 100644 --- a/contrib/bobtoolz/bobToolz-GTK.cpp +++ b/contrib/bobtoolz/bobToolz-GTK.cpp @@ -1,297 +1,358 @@ -/* -BobToolz plugin for GtkRadiant -Copyright (C) 2001 Gordon Biggans - -This library is free software; you can redistribute it and/or -modify it under the terms of the GNU Lesser General Public -License as published by the Free Software Foundation; either -version 2.1 of the License, or (at your option) any later version. - -This library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public -License along with this library; if not, write to the Free Software -Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ - -#include "StdAfx.h" - -#include "funchandlers.h" -#include "misc.h" - -#include "dialogs/dialogs-gtk.h" -#include "../../libs/cmdlib.h" - -// Radiant function table -_QERFuncTable_1 g_FuncTable; -_QERAppDataTable g_AppDataTable; -_QERBrushTable g_BrushTable; -_QERShadersTable g_ShadersTable; // vvvvvvvvvvvvvvvvvvvv -_QERSelectedFaceTable g_SelectedFaceTable; // to get texture sizes -_QERQglTable g_QglTable; // for path plotting (hooking to DBobView) -_QERUITable g_MessageTable; // for path plotting (listening for update) -_QEREntityTable g_EntityTable; - -// plugin name -char* PLUGIN_NAME = "bobToolz"; - -// commands in the menu -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"; - -// globals -GtkWidget *g_pRadiantWnd = NULL; - -static const char *PLUGIN_ABOUT = "bobToolz for SDRadiant\n" - "by digibob (digibob@splashdamage.com)\n" - "http://www.splashdamage.com\n\n" - "Additional Contributors:\n" - "MarsMattel, RR2DO2\n"; - -extern "C" const char* QERPlug_Init( void* hApp, void* pMainWidget ) { - g_pRadiantWnd = (GtkWidget*)pMainWidget; - - return "bobToolz for GTKradiant"; -} - -extern "C" const char* QERPlug_GetName() { - return PLUGIN_NAME; -} - -extern "C" const char* QERPlug_GetCommandList() { - return PLUGIN_COMMANDS; -} - -extern "C" void QERPlug_Dispatch (const char *p, vec3_t vMin, vec3_t vMax, bool bSingleBrush) { - LoadLists(); - - if( !stricmp( p, "brush cleanup" ) ) { - DoFixBrushes(); - } else if( !stricmp( p, "polygon builder" ) ) { - DoPolygonsTB(); - } else if( !stricmp( p, "caulk selection" ) ) { - DoCaulkSelection(); - } else if( !stricmp( p, "tree planter" ) ) { - DoTreePlanter(); - } else if( !stricmp( p, "plot splines" ) ) { - DoTrainPathPlot(); - } else if( !stricmp( p, "drop entity" ) ) { - DoDropEnts(); - } else if( !stricmp( p, "merge patches" ) ) { - DoMergePatches(); - } else if( !stricmp( p, "split patches" ) ) { - DoSplitPatch(); - } else if( !stricmp( p, "turn edge" ) ) { - DoFlipTerrain(); - } else if( !stricmp(p, "reset textures...") ) { - DoResetTextures(); - } else if( !stricmp(p, "pitomatic") ) { - DoPitBuilder(vMin, vMax); - } else if( !stricmp(p, "vis viewer") ) { - DoVisAnalyse(); - } else if( !stricmp(p, "about...") ) { - DoMessageBox(PLUGIN_ABOUT, "About", IDOK); - } -} - -#define NUM_TOOLBARBUTTONS 9 - -unsigned int ToolbarButtonCount( void ) { - return NUM_TOOLBARBUTTONS; -} - -// Load a xpm file and return a pixmap widget. -GtkWidget* new_pixmap (char* filename) { - GdkPixmap *gdkpixmap; - GdkBitmap *mask; - GtkWidget *pixmap; - - g_FuncTable.m_pfnLoadBitmap(filename, (void **)&gdkpixmap, (void **)&mask); - pixmap = gtk_pixmap_new (gdkpixmap, mask); - - gdk_pixmap_unref (gdkpixmap); - gdk_pixmap_unref (mask); - - return pixmap; -} - -class CBobtoolzToolbarButton : public IToolbarButton -{ -public: - virtual const char* getImage() const - { - switch( mIndex ) { - case 0: return "bobtoolz_cleanup.bmp"; - case 1: return "bobtoolz_poly.bmp"; - case 2: return "bobtoolz_caulk.bmp"; - case 3: return "bobtoolz_treeplanter.bmp"; - case 4: return "bobtoolz_trainpathplot.bmp"; - case 5: return "bobtoolz_dropent.bmp"; - case 6: return "bobtoolz_merge.bmp"; - case 7: return "bobtoolz_split.bmp"; - case 8: return "bobtoolz_turnedge.bmp"; - } - return NULL; - } - virtual EType getType() const - { - switch( mIndex ) { - case 3: return eToggleButton; - default: return eButton; - } - } - virtual const char* getText() const - { - switch( mIndex ) { - case 0: return "Cleanup"; - case 1: return "Polygons"; - case 2: return "Caulk"; - case 3: return "Tree Planter"; - case 4: return "Plot Splines"; - case 5: return "Drop Entity"; - case 6: return "Merge Patches"; - case 7: return "Split Patches"; - case 8: return "Flip Terrain"; - } - return NULL; - } - virtual const char* getTooltip() const - { - switch( mIndex ) { - case 0: return "Brush Cleanup"; - case 1: return "Polygons"; - case 2: return "Caulk selection"; - case 3: return "Tree Planter"; - case 4: return "Plot Splines"; - case 5: return "Drop Entity"; - case 6: return "Merge Patches"; - case 7: return "Split Patches"; - case 8: return "Flip Terrain"; - } - return NULL; - } - - virtual void activate() const - { - LoadLists(); - - switch( mIndex ) { - case 0: DoFixBrushes(); break; - case 1: DoPolygonsTB(); break; - case 2: DoCaulkSelection(); break; - case 3: DoTreePlanter(); break; - case 4: DoTrainPathPlot(); break; - case 5: DoDropEnts(); break; - case 6: DoMergePatches(); break; - case 7: DoSplitPatch(); break; - case 8: DoFlipTerrain(); break; - } - } - - int mIndex; -}; - -CBobtoolzToolbarButton g_bobtoolzToolbarButtons[NUM_TOOLBARBUTTONS]; - -const IToolbarButton* GetToolbarButton(unsigned int index) -{ - g_bobtoolzToolbarButtons[index].mIndex = index; - return &g_bobtoolzToolbarButtons[index]; -} - -// ============================================================================= -// SYNAPSE - -class CSynapseClientBobtoolz : public CSynapseClient -{ -public: - // CSynapseClient API - bool RequestAPI(APIDescriptor_t *pAPI); - const char* GetInfo(); - - CSynapseClientBobtoolz() { } - virtual ~CSynapseClientBobtoolz() { } -}; - - -CSynapseServer* g_pSynapseServer = NULL; -CSynapseClientBobtoolz g_SynapseClient; - -#if __GNUC__ >= 4 -#pragma GCC visibility push(default) -#endif -extern "C" CSynapseClient* SYNAPSE_DLL_EXPORT Synapse_EnumerateInterfaces( const char *version, CSynapseServer *pServer ) { -#if __GNUC__ >= 4 -#pragma GCC visibility pop -#endif - if (strcmp(version, SYNAPSE_VERSION)) - { - Syn_Printf("ERROR: synapse API version mismatch: should be '" SYNAPSE_VERSION "', got '%s'\n", version); - return NULL; - } - g_pSynapseServer = pServer; - g_pSynapseServer->IncRef(); - Set_Syn_Printf(g_pSynapseServer->Get_Syn_Printf()); - - g_SynapseClient.AddAPI(TOOLBAR_MAJOR, BOBTOOLZ_MINOR, sizeof(_QERPlugToolbarTable)); - g_SynapseClient.AddAPI(PLUGIN_MAJOR, BOBTOOLZ_MINOR, sizeof(_QERPluginTable)); - - g_SynapseClient.AddAPI(DATA_MAJOR, NULL, sizeof(g_AppDataTable), SYN_REQUIRE, &g_AppDataTable); - g_SynapseClient.AddAPI(BRUSH_MAJOR, NULL, sizeof(g_BrushTable), SYN_REQUIRE, &g_BrushTable); - g_SynapseClient.AddAPI(SHADERS_MAJOR, "*", sizeof(g_ShadersTable), SYN_REQUIRE, &g_ShadersTable); - g_SynapseClient.AddAPI(ENTITY_MAJOR, NULL, sizeof(g_EntityTable), SYN_REQUIRE, &g_EntityTable); - g_SynapseClient.AddAPI(SELECTEDFACE_MAJOR, NULL, sizeof(g_SelectedFaceTable), SYN_REQUIRE, &g_SelectedFaceTable); - g_SynapseClient.AddAPI(UI_MAJOR, NULL, sizeof(g_MessageTable), SYN_REQUIRE, &g_MessageTable); - g_SynapseClient.AddAPI(RADIANT_MAJOR, NULL, sizeof(g_FuncTable), SYN_REQUIRE, &g_FuncTable); - g_SynapseClient.AddAPI(QGL_MAJOR, NULL, sizeof(g_QglTable), SYN_REQUIRE, &g_QglTable); - - return &g_SynapseClient; -} - -bool CSynapseClientBobtoolz::RequestAPI(APIDescriptor_t *pAPI) -{ - if( !strcmp(pAPI->minor_name, BOBTOOLZ_MINOR) ) - { - if( !strcmp(pAPI->major_name, PLUGIN_MAJOR) ) - { - _QERPluginTable* pTable= static_cast<_QERPluginTable*>(pAPI->mpTable); - - pTable->m_pfnQERPlug_Init = QERPlug_Init; - pTable->m_pfnQERPlug_GetName = QERPlug_GetName; - pTable->m_pfnQERPlug_GetCommandList = QERPlug_GetCommandList; - pTable->m_pfnQERPlug_Dispatch = QERPlug_Dispatch; - - return true; - } - else if( !strcmp(pAPI->major_name, TOOLBAR_MAJOR) ) - { - _QERPlugToolbarTable* pTable= static_cast<_QERPlugToolbarTable*>(pAPI->mpTable); - - pTable->m_pfnToolbarButtonCount = &ToolbarButtonCount; - pTable->m_pfnGetToolbarButton = &GetToolbarButton; - - return true; - } - } - - Syn_Printf("ERROR: RequestAPI( '%s' ) not found in '%s'\n", pAPI->major_name, GetInfo()); - return false; -} - -#include "version.h" - -const char* CSynapseClientBobtoolz::GetInfo() -{ - return "bobToolz module built " __DATE__ " " RADIANT_VERSION; -} - -char* GetFilename(char* buffer, const char* filename) { - strcpy(buffer, g_pSynapseServer->GetModuleFilename(&g_SynapseClient)); - StripFilename( buffer ); - strcat(buffer, "/"); - strcat(buffer, filename); - buffer = UnixToDosPath(buffer); - return buffer; -} +/* + BobToolz plugin for GtkRadiant + Copyright (C) 2001 Gordon Biggans + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + + + +#include "str.h" +#include "qerplugin.h" +#include "mathlib.h" +#include "string/string.h" +#include "itoolbar.h" + +#include "funchandlers.h" +#include "DBobView.h" +#include "DVisDrawer.h" +#include "DTrainDrawer.h" +#include "DTreePlanter.h" + +#include "dialogs/dialogs-gtk.h" +#include "../../libs/cmdlib.h" + +void BobToolz_construct(){ +} + +void BobToolz_destroy(){ + if ( g_PathView ) { + delete g_PathView; + g_PathView = NULL; + } + if ( g_VisView ) { + delete g_VisView; + g_VisView = NULL; + } + if ( g_TrainView ) { + delete g_TrainView; + g_TrainView = NULL; + } + if ( g_TreePlanter ) { + delete g_TreePlanter; + g_TreePlanter = NULL; + } +} + +// plugin name +char* PLUGIN_NAME = "bobToolz"; + +// commands in the menu +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,Split patches cols,Split patches rows,Turn edge"; + +// globals +ui::Widget g_pRadiantWnd; + +static const char *PLUGIN_ABOUT = "bobToolz for SDRadiant\n" + "by digibob (digibob@splashdamage.com)\n" + "http://www.splashdamage.com\n\n" + "Additional Contributors:\n" + "MarsMattel, RR2DO2\n"; + +extern "C" const char* QERPlug_Init( void* hApp, void* pMainWidget ) { + g_pRadiantWnd = ui::Widget::from(pMainWidget); + + return "bobToolz for GTKradiant"; +} + +extern "C" const char* QERPlug_GetName() { + return PLUGIN_NAME; +} + +extern "C" const char* QERPlug_GetCommandList() { + return PLUGIN_COMMANDS; +} + +extern "C" void QERPlug_Dispatch( const char *p, vec3_t vMin, vec3_t vMax, bool bSingleBrush ) { + LoadLists(); + + if ( string_equal_nocase( p, "brush cleanup" ) ) { + DoFixBrushes(); + } + else if ( string_equal_nocase( p, "polygon builder" ) ) { + DoPolygonsTB(); + } + else if ( string_equal_nocase( p, "caulk selection" ) ) { + DoCaulkSelection(); + } + else if ( string_equal_nocase( p, "tree planter" ) ) { + DoTreePlanter(); + } + else if ( string_equal_nocase( p, "plot splines" ) ) { + DoTrainPathPlot(); + } + else if ( string_equal_nocase( p, "drop entity" ) ) { + DoDropEnts(); + } + else if ( string_equal_nocase( p, "merge patches" ) ) { + DoMergePatches(); + } + else if ( string_equal_nocase( p, "split patches" ) ) { + DoSplitPatch(); + } + else if ( string_equal_nocase( p, "split patches rows" ) ) { + DoSplitPatchRows(); + } + else if ( string_equal_nocase( p, "split patches cols" ) ) { + DoSplitPatchCols(); + } + else if ( string_equal_nocase( p, "turn edge" ) ) { + DoFlipTerrain(); + } + else if ( string_equal_nocase( p, "reset textures..." ) ) { + DoResetTextures(); + } + else if ( string_equal_nocase( p, "pitomatic" ) ) { + DoPitBuilder(); + } + else if ( string_equal_nocase( p, "vis viewer" ) ) { + DoVisAnalyse(); + } + else if ( string_equal_nocase( p, "stair builder..." ) ) { + DoBuildStairs(); + } + else if ( string_equal_nocase( p, "door builder..." ) ) { + DoBuildDoors(); + } + else if ( string_equal_nocase( p, "intersect..." ) ) { + DoIntersect(); + } + else if ( string_equal_nocase( p, "make chain..." ) ) { + DoMakeChain(); + } + else if ( string_equal_nocase( p, "path plotter..." ) ) { + DoPathPlotter(); + } + else if ( string_equal_nocase( p, "about..." ) ) { + DoMessageBox( PLUGIN_ABOUT, "About", eMB_OK ); + } +} + +const char* QERPlug_GetCommandTitleList(){ + return ""; +} + + +#define NUM_TOOLBARBUTTONS 14 + +std::size_t ToolbarButtonCount( void ) { + return NUM_TOOLBARBUTTONS; +} + +class CBobtoolzToolbarButton : public IToolbarButton +{ +public: +virtual const char* getImage() const { + switch ( mIndex ) { + case 0: return "bobtoolz_cleanup.png"; + case 1: return "bobtoolz_poly.png"; + case 2: return "bobtoolz_caulk.png"; + case 3: return ""; + case 4: return "bobtoolz_treeplanter.png"; + case 5: return "bobtoolz_trainpathplot.png"; + case 6: return "bobtoolz_dropent.png"; + case 7: return ""; + case 8: return "bobtoolz_merge.png"; + case 9: return "bobtoolz_split.png"; + case 10: return "bobtoolz_splitrow.png"; + case 11: return "bobtoolz_splitcol.png"; + case 12: return ""; + case 13: return "bobtoolz_turnedge.png"; + } + return NULL; +} +virtual EType getType() const { + switch ( mIndex ) { + case 3: return eSpace; + case 4: return eToggleButton; + case 7: return eSpace; + case 12: return eSpace; + default: return eButton; + } +} +virtual const char* getText() const { + switch ( mIndex ) { + case 0: return "Cleanup"; + case 1: return "Polygons"; + case 2: return "Caulk"; + case 4: return "Tree Planter"; + case 5: return "Plot Splines"; + case 6: return "Drop Entity"; + case 8: return "Merge 2 Patches"; + case 9: return "Split Patch"; + case 10: return "Split Patch Rows"; + case 11: return "Split Patch Columns"; + case 13: return "Flip Terrain"; + } + return NULL; +} +virtual const char* getTooltip() const { + switch ( mIndex ) { + case 0: return "Brush Cleanup"; + case 1: return "Polygons"; + case 2: return "Caulk selection"; + case 4: return "Tree Planter"; + case 5: return "Plot Splines"; + case 6: return "Drop Entity"; + case 8: return "Merge 2 Patches"; + case 9: return "Split Patch"; + case 10: return "Split Patch Rows"; + case 11: return "Split Patch Columns"; + case 13: return "Flip Terrain (Turn Edge)"; + } + return NULL; +} + +virtual void activate() const { + LoadLists(); + + switch ( mIndex ) { + case 0: DoFixBrushes(); break; + case 1: DoPolygonsTB(); break; + case 2: DoCaulkSelection(); break; + case 4: DoTreePlanter(); break; + case 5: DoTrainPathPlot(); break; + case 6: DoDropEnts(); break; + case 8: DoMergePatches(); break; + case 9: DoSplitPatch(); break; + case 10: DoSplitPatchRows(); break; + case 11: DoSplitPatchCols(); break; + case 13: DoFlipTerrain(); break; + } +} + +std::size_t mIndex; +}; + +CBobtoolzToolbarButton g_bobtoolzToolbarButtons[NUM_TOOLBARBUTTONS]; + +const IToolbarButton* GetToolbarButton( std::size_t index ){ + g_bobtoolzToolbarButtons[index].mIndex = index; + return &g_bobtoolzToolbarButtons[index]; +} + + +#include "modulesystem/singletonmodule.h" + +#include "iscenegraph.h" +#include "irender.h" +#include "iundo.h" +#include "ishaders.h" +#include "ipatch.h" +#include "ibrush.h" +#include "ientity.h" +#include "ieclass.h" +#include "iglrender.h" +#include "iplugin.h" + +class BobToolzPluginDependencies : + public GlobalRadiantModuleRef, + public GlobalUndoModuleRef, + public GlobalSceneGraphModuleRef, + public GlobalSelectionModuleRef, + public GlobalEntityModuleRef, + public GlobalEntityClassManagerModuleRef, + public GlobalShadersModuleRef, + public GlobalShaderCacheModuleRef, + public GlobalBrushModuleRef, + public GlobalPatchModuleRef, + public GlobalOpenGLModuleRef, + public GlobalOpenGLStateLibraryModuleRef +{ +public: +BobToolzPluginDependencies() : + GlobalEntityModuleRef( GlobalRadiant().getRequiredGameDescriptionKeyValue( "entities" ) ), + GlobalShadersModuleRef( GlobalRadiant().getRequiredGameDescriptionKeyValue( "shaders" ) ), + GlobalBrushModuleRef( GlobalRadiant().getRequiredGameDescriptionKeyValue( "brushtypes" ) ), + GlobalPatchModuleRef( GlobalRadiant().getRequiredGameDescriptionKeyValue( "patchtypes" ) ), + GlobalEntityClassManagerModuleRef( GlobalRadiant().getRequiredGameDescriptionKeyValue( "entityclass" ) ){ +} +}; + +class BobToolzPluginModule : public TypeSystemRef +{ +_QERPluginTable m_plugin; +public: +typedef _QERPluginTable Type; +STRING_CONSTANT( Name, "bobToolz" ); + +BobToolzPluginModule(){ + m_plugin.m_pfnQERPlug_Init = QERPlug_Init; + m_plugin.m_pfnQERPlug_GetName = QERPlug_GetName; + m_plugin.m_pfnQERPlug_GetCommandList = QERPlug_GetCommandList; + m_plugin.m_pfnQERPlug_GetCommandTitleList = QERPlug_GetCommandTitleList; + m_plugin.m_pfnQERPlug_Dispatch = QERPlug_Dispatch; + + BobToolz_construct(); +} +~BobToolzPluginModule(){ + BobToolz_destroy(); +} +_QERPluginTable* getTable(){ + return &m_plugin; +} +}; + +typedef SingletonModule SingletonBobToolzPluginModule; + +SingletonBobToolzPluginModule g_BobToolzPluginModule; + + +class BobToolzToolbarDependencies : + public ModuleRef<_QERPluginTable> +{ +public: +BobToolzToolbarDependencies() : + ModuleRef<_QERPluginTable>( "bobToolz" ){ +} +}; + +class BobToolzToolbarModule : public TypeSystemRef +{ +_QERPlugToolbarTable m_table; +public: +typedef _QERPlugToolbarTable Type; +STRING_CONSTANT( Name, "bobToolz" ); + +BobToolzToolbarModule(){ + m_table.m_pfnToolbarButtonCount = ToolbarButtonCount; + m_table.m_pfnGetToolbarButton = GetToolbarButton; +} +_QERPlugToolbarTable* getTable(){ + return &m_table; +} +}; + +typedef SingletonModule SingletonBobToolzToolbarModule; + +SingletonBobToolzToolbarModule g_BobToolzToolbarModule; + + +extern "C" void RADIANT_DLLEXPORT Radiant_RegisterModules( ModuleServer& server ){ + initialiseModule( server ); + + g_BobToolzPluginModule.selfRegister(); + g_BobToolzToolbarModule.selfRegister(); +}