2 Copyright (C) 2001-2006, William Joseph.
5 This file is part of GtkRadiant.
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.
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.
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
24 #include "debugging/debugging.h"
26 #include "qerplugin.h"
27 #include "ifilesystem.h"
32 #include "iscenegraph.h"
33 #include "iselection.h"
35 #include "iscriplib.h"
38 #include "itextures.h"
39 #include "ireference.h"
40 #include "ifiletypes.h"
41 #include "preferencesystem.h"
48 #include "namespace.h"
50 #include "gtkutil/messagebox.h"
51 #include "gtkutil/filechooser.h"
57 #include "entityinspector.h"
58 #include "entitylist.h"
61 #include "texwindow.h"
62 #include "mainframe.h"
66 #include "surfacedialog.h"
67 #include "groupdialog.h"
68 #include "patchdialog.h"
69 #include "camwindow.h"
74 #include "preferences.h"
76 #include "plugintoolbar.h"
77 #include "findtexturedialog.h"
78 #include "nullmodel.h"
81 #include "modulesystem/modulesmap.h"
82 #include "modulesystem/singletonmodule.h"
84 #include "generic/callback.h"
86 const char* GameDescription_getKeyValue(const char* key)
88 return g_pGameDescription->getKeyValue(key);
91 const char* GameDescription_getRequiredKeyValue(const char* key)
93 return g_pGameDescription->getRequiredKeyValue(key);
96 const char* mapname_get()
98 return Map_Name(g_map);
103 _QERFuncTable_1 m_radiantcore;
105 typedef _QERFuncTable_1 Type;
106 STRING_CONSTANT(Name, "*");
110 m_radiantcore.getEnginePath = &EnginePath_get;
111 m_radiantcore.getAppPath = &AppPath_get;
112 m_radiantcore.getGameToolsPath = &GameToolsPath_get;
113 m_radiantcore.getSettingsPath = &SettingsPath_get;
115 m_radiantcore.getGameName = &gamename_get;
116 m_radiantcore.getGameMode = &gamemode_get;
118 m_radiantcore.getMapName = &mapname_get;
120 m_radiantcore.getGameDescriptionKeyValue = &GameDescription_getKeyValue;
121 m_radiantcore.getRequiredGameDescriptionKeyValue = &GameDescription_getRequiredKeyValue;
123 m_radiantcore.attachGameToolsPathObserver = Radiant_attachGameToolsPathObserver;
124 m_radiantcore.detachGameToolsPathObserver = Radiant_detachGameToolsPathObserver;
125 m_radiantcore.attachEnginePathObserver = Radiant_attachEnginePathObserver;
126 m_radiantcore.detachEnginePathObserver = Radiant_detachEnginePathObserver;
127 m_radiantcore.attachGameNameObserver = Radiant_attachGameNameObserver;
128 m_radiantcore.detachGameNameObserver = Radiant_detachGameNameObserver;
129 m_radiantcore.attachGameModeObserver = Radiant_attachGameModeObserver;
130 m_radiantcore.detachGameModeObserver = Radiant_detachGameModeObserver;
132 m_radiantcore.m_pfnMessageBox = >k_MessageBox;
133 m_radiantcore.m_pfnFileDialog = &file_dialog;
134 m_radiantcore.m_pfnColorDialog = &color_dialog;
135 m_radiantcore.m_pfnDirDialog = &dir_dialog;
136 m_radiantcore.m_pfnNewImage = &new_plugin_image;
138 _QERFuncTable_1* getTable()
140 return &m_radiantcore;
144 typedef SingletonModule<RadiantCoreAPI> RadiantCoreModule;
145 typedef Static<RadiantCoreModule> StaticRadiantCoreModule;
146 StaticRegisterModule staticRegisterRadiantCore(StaticRadiantCoreModule::instance());
149 class RadiantDependencies :
150 public GlobalRadiantModuleRef,
151 public GlobalFileSystemModuleRef,
152 public GlobalEntityModuleRef,
153 public GlobalShadersModuleRef,
154 public GlobalBrushModuleRef,
155 public GlobalSceneGraphModuleRef,
156 public GlobalShaderCacheModuleRef,
157 public GlobalFiletypesModuleRef,
158 public GlobalSelectionModuleRef,
159 public GlobalReferenceModuleRef,
160 public GlobalOpenGLModuleRef,
161 public GlobalEntityClassManagerModuleRef,
162 public GlobalUndoModuleRef,
163 public GlobalScripLibModuleRef,
164 public GlobalNamespaceModuleRef
166 ImageModulesRef m_image_modules;
167 MapModulesRef m_map_modules;
168 ToolbarModulesRef m_toolbar_modules;
169 PluginModulesRef m_plugin_modules;
172 RadiantDependencies() :
173 GlobalEntityModuleRef(GlobalRadiant().getRequiredGameDescriptionKeyValue("entities")),
174 GlobalShadersModuleRef(GlobalRadiant().getRequiredGameDescriptionKeyValue("shaders")),
175 GlobalBrushModuleRef(GlobalRadiant().getRequiredGameDescriptionKeyValue("brushtypes")),
176 GlobalEntityClassManagerModuleRef(GlobalRadiant().getRequiredGameDescriptionKeyValue("entityclass")),
177 m_image_modules(GlobalRadiant().getRequiredGameDescriptionKeyValue("texturetypes")),
178 m_map_modules(GlobalRadiant().getRequiredGameDescriptionKeyValue("maptypes")),
179 m_toolbar_modules("*"),
180 m_plugin_modules("*")
184 ImageModules& getImageModules()
186 return m_image_modules.get();
188 MapModules& getMapModules()
190 return m_map_modules.get();
192 ToolbarModules& getToolbarModules()
194 return m_toolbar_modules.get();
196 PluginModules& getPluginModules()
198 return m_plugin_modules.get();
202 class Radiant : public TypeSystemRef
209 GlobalFiletypes().addType("sound", "wav", filetype_t("PCM sound files", "*.wav"));
211 Selection_construct();
212 HomePaths_Construct();
215 MultiMon_Construct();
217 Pointfile_Construct();
218 GLWindow_Construct();
219 BuildMenu_Construct();
221 EntityList_Construct();
222 MainFrame_Construct();
223 GroupDialog_Construct();
224 SurfaceInspector_Construct();
225 PatchInspector_Construct();
227 XYWindow_Construct();
228 BuildMonitor_Construct();
229 TextureBrowser_Construct();
231 Autosave_Construct();
232 EntityInspector_construct();
233 FindTextureDialog_Construct();
234 NullModel_construct();
238 EnginePath_Realise();
242 EnginePath_Unrealise();
246 FindTextureDialog_Destroy();
247 EntityInspector_destroy();
250 TextureBrowser_Destroy();
251 BuildMonitor_Destroy();
254 PatchInspector_Destroy();
255 SurfaceInspector_Destroy();
256 GroupDialog_Destroy();
258 EntityList_Destroy();
274 bool g_RadiantInitialised = false;
275 RadiantDependencies* g_RadiantDependencies;
281 bool Radiant_Construct(ModuleServer& server)
283 GlobalModuleServer::instance().set(server);
284 StaticModuleRegistryList().instance().registerModules();
286 g_RadiantDependencies = new RadiantDependencies();
288 g_RadiantInitialised = !server.getError();
290 if(g_RadiantInitialised)
292 g_Radiant = new Radiant;
295 return g_RadiantInitialised;
297 void Radiant_Destroy()
299 if(g_RadiantInitialised)
304 delete g_RadiantDependencies;
307 ImageModules& Radiant_getImageModules()
309 return g_RadiantDependencies->getImageModules();
311 MapModules& Radiant_getMapModules()
313 return g_RadiantDependencies->getMapModules();
315 ToolbarModules& Radiant_getToolbarModules()
317 return g_RadiantDependencies->getToolbarModules();
319 PluginModules& Radiant_getPluginModules()
321 return g_RadiantDependencies->getPluginModules();