Merge branch 'master' of ssh://git.xonotic.org/netradiant
[divverent/netradiant.git] / contrib / brushexport / plugin.cpp
1 /*
2 Copyright (C) 2006, Thomas Nitschke.
3 All Rights Reserved.
4
5 This file is part of GtkRadiant.
6
7 GtkRadiant is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 GtkRadiant is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GtkRadiant; if not, write to the Free Software
19 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
20 */
21 #include "plugin.h"
22
23 #include "iplugin.h"
24 #include "qerplugin.h"
25
26 #include <gtk/gtk.h>
27 #include <gtk/gtktreeview.h>
28
29 #include "debugging/debugging.h"
30 #include "string/string.h"
31 #include "modulesystem/singletonmodule.h"
32 #include "stream/textfilestream.h"
33 #include "stream/stringstream.h"
34 #include "gtkutil/messagebox.h"
35 #include "gtkutil/filechooser.h"
36
37 #include "ibrush.h"
38 #include "iscenegraph.h"
39 #include "iselection.h"
40 #include "ifilesystem.h"
41 #include "ifiletypes.h"
42
43 #include "support.h"
44
45 #include "typesystem.h"
46
47 void CreateWindow (void);
48 void DestroyWindow(void);
49 bool IsWindowOpen(void);
50
51 namespace BrushExport
52 {
53   GtkWindow* g_mainwnd;
54   
55   const char* init(void* hApp, void* pMainWidget)
56   {
57     g_mainwnd = (GtkWindow*)pMainWidget;
58     ASSERT_NOTNULL(g_mainwnd);
59     return "";
60   }
61   const char* getName()
62   {
63     return "Brush export Plugin";
64   }
65   const char* getCommandList()
66   {
67     return "Export selected as Wavefront Object;About";
68   }
69   const char* getCommandTitleList()
70   {
71     return "";
72   }
73   
74   void dispatch(const char* command, float* vMin, float* vMax, bool bSingleBrush)
75   {
76     if(string_equal(command, "About"))
77     {
78       GlobalRadiant().m_pfnMessageBox(GTK_WIDGET(g_mainwnd), "Brushexport plugin v 2.0 by namespace (www.codecreator.net)\n"
79                                         "Enjoy!\n\nSend feedback to spam@codecreator.net", "About me...",
80                                         eMB_OK,
81                                         eMB_ICONDEFAULT);
82     }
83     else if(string_equal(command, "Export selected as Wavefront Object"))
84     {
85       if(IsWindowOpen())
86             DestroyWindow();
87       CreateWindow();
88     }
89   }
90 }
91
92 class BrushExportDependencies :
93   public GlobalRadiantModuleRef,
94   public GlobalFiletypesModuleRef,
95   public GlobalBrushModuleRef,
96   public GlobalFileSystemModuleRef,
97   public GlobalSceneGraphModuleRef,
98   public GlobalSelectionModuleRef
99 {
100 public:
101   BrushExportDependencies(void)
102     : GlobalBrushModuleRef(GlobalRadiant().getRequiredGameDescriptionKeyValue("brushtypes"))
103   {}
104 };
105
106 class BrushExportModule : public TypeSystemRef
107 {
108   _QERPluginTable m_plugin;
109 public:
110   typedef _QERPluginTable Type;
111   STRING_CONSTANT(Name, "brushexport2");
112
113   BrushExportModule()
114   {
115     m_plugin.m_pfnQERPlug_Init = &BrushExport::init;
116     m_plugin.m_pfnQERPlug_GetName = &BrushExport::getName;
117     m_plugin.m_pfnQERPlug_GetCommandList = &BrushExport::getCommandList;
118     m_plugin.m_pfnQERPlug_GetCommandTitleList = &BrushExport::getCommandTitleList;
119     m_plugin.m_pfnQERPlug_Dispatch = &BrushExport::dispatch;
120   }
121   _QERPluginTable* getTable()
122   {
123     return &m_plugin;
124   }
125 };
126
127 typedef SingletonModule<BrushExportModule, BrushExportDependencies> SingletonBrushExportModule;
128 SingletonBrushExportModule g_BrushExportModule;
129
130 extern "C" void RADIANT_DLLEXPORT Radiant_RegisterModules(ModuleServer& server)
131 {
132   initialiseModule(server);
133   g_BrushExportModule.selfRegister();
134 }