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* getMapName()
98 return Map_Name(g_map);
101 scene::Node& getMapWorldEntity()
103 return Map_FindOrInsertWorldspawn(g_map);
106 VIEWTYPE XYWindow_getViewType()
108 return g_pParentWnd->GetXYWnd()->GetViewType();
111 Vector3 XYWindow_windowToWorld(const WindowVector& position)
113 Vector3 result(0, 0, 0);
114 g_pParentWnd->GetXYWnd()->XY_ToPoint(static_cast<int>(position.x()), static_cast<int>(position.y()), result);
118 const char* TextureBrowser_getSelectedShader()
120 return TextureBrowser_GetSelectedShader(GlobalTextureBrowser());
125 _QERFuncTable_1 m_radiantcore;
127 typedef _QERFuncTable_1 Type;
128 STRING_CONSTANT(Name, "*");
132 m_radiantcore.getEnginePath = &EnginePath_get;
133 m_radiantcore.getAppPath = &AppPath_get;
134 m_radiantcore.getGameToolsPath = &GameToolsPath_get;
135 m_radiantcore.getSettingsPath = &SettingsPath_get;
136 m_radiantcore.getMapsPath = &getMapsPath;
138 m_radiantcore.getGameName = &gamename_get;
139 m_radiantcore.getGameMode = &gamemode_get;
141 m_radiantcore.getMapName = &getMapName;
142 m_radiantcore.getMapWorldEntity = getMapWorldEntity;
143 m_radiantcore.getGridSize = GetGridSize;
145 m_radiantcore.getGameDescriptionKeyValue = &GameDescription_getKeyValue;
146 m_radiantcore.getRequiredGameDescriptionKeyValue = &GameDescription_getRequiredKeyValue;
148 m_radiantcore.attachGameToolsPathObserver = Radiant_attachGameToolsPathObserver;
149 m_radiantcore.detachGameToolsPathObserver = Radiant_detachGameToolsPathObserver;
150 m_radiantcore.attachEnginePathObserver = Radiant_attachEnginePathObserver;
151 m_radiantcore.detachEnginePathObserver = Radiant_detachEnginePathObserver;
152 m_radiantcore.attachGameNameObserver = Radiant_attachGameNameObserver;
153 m_radiantcore.detachGameNameObserver = Radiant_detachGameNameObserver;
154 m_radiantcore.attachGameModeObserver = Radiant_attachGameModeObserver;
155 m_radiantcore.detachGameModeObserver = Radiant_detachGameModeObserver;
157 m_radiantcore.XYWindowDestroyed_connect = XYWindowDestroyed_connect;
158 m_radiantcore.XYWindowDestroyed_disconnect = XYWindowDestroyed_disconnect;
159 m_radiantcore.XYWindowMouseDown_connect = XYWindowMouseDown_connect;
160 m_radiantcore.XYWindowMouseDown_disconnect = XYWindowMouseDown_disconnect;
161 m_radiantcore.XYWindow_getViewType = XYWindow_getViewType;
162 m_radiantcore.XYWindow_windowToWorld = XYWindow_windowToWorld;
163 m_radiantcore.TextureBrowser_getSelectedShader = TextureBrowser_getSelectedShader;
165 m_radiantcore.m_pfnMessageBox = >k_MessageBox;
166 m_radiantcore.m_pfnFileDialog = &file_dialog;
167 m_radiantcore.m_pfnColorDialog = &color_dialog;
168 m_radiantcore.m_pfnDirDialog = &dir_dialog;
169 m_radiantcore.m_pfnNewImage = &new_plugin_image;
171 _QERFuncTable_1* getTable()
173 return &m_radiantcore;
177 typedef SingletonModule<RadiantCoreAPI> RadiantCoreModule;
178 typedef Static<RadiantCoreModule> StaticRadiantCoreModule;
179 StaticRegisterModule staticRegisterRadiantCore(StaticRadiantCoreModule::instance());
182 class RadiantDependencies :
183 public GlobalRadiantModuleRef,
184 public GlobalFileSystemModuleRef,
185 public GlobalEntityModuleRef,
186 public GlobalShadersModuleRef,
187 public GlobalBrushModuleRef,
188 public GlobalSceneGraphModuleRef,
189 public GlobalShaderCacheModuleRef,
190 public GlobalFiletypesModuleRef,
191 public GlobalSelectionModuleRef,
192 public GlobalReferenceModuleRef,
193 public GlobalOpenGLModuleRef,
194 public GlobalEntityClassManagerModuleRef,
195 public GlobalUndoModuleRef,
196 public GlobalScripLibModuleRef,
197 public GlobalNamespaceModuleRef
199 ImageModulesRef m_image_modules;
200 MapModulesRef m_map_modules;
201 ToolbarModulesRef m_toolbar_modules;
202 PluginModulesRef m_plugin_modules;
205 RadiantDependencies() :
206 GlobalEntityModuleRef(GlobalRadiant().getRequiredGameDescriptionKeyValue("entities")),
207 GlobalShadersModuleRef(GlobalRadiant().getRequiredGameDescriptionKeyValue("shaders")),
208 GlobalBrushModuleRef(GlobalRadiant().getRequiredGameDescriptionKeyValue("brushtypes")),
209 GlobalEntityClassManagerModuleRef(GlobalRadiant().getRequiredGameDescriptionKeyValue("entityclass")),
210 m_image_modules(GlobalRadiant().getRequiredGameDescriptionKeyValue("texturetypes")),
211 m_map_modules(GlobalRadiant().getRequiredGameDescriptionKeyValue("maptypes")),
212 m_toolbar_modules("*"),
213 m_plugin_modules("*")
217 ImageModules& getImageModules()
219 return m_image_modules.get();
221 MapModules& getMapModules()
223 return m_map_modules.get();
225 ToolbarModules& getToolbarModules()
227 return m_toolbar_modules.get();
229 PluginModules& getPluginModules()
231 return m_plugin_modules.get();
235 class Radiant : public TypeSystemRef
242 GlobalFiletypes().addType("sound", "wav", filetype_t("PCM sound files", "*.wav"));
244 Selection_construct();
245 HomePaths_Construct();
248 MultiMon_Construct();
250 Pointfile_Construct();
251 GLWindow_Construct();
252 BuildMenu_Construct();
254 EntityList_Construct();
255 MainFrame_Construct();
256 GroupDialog_Construct();
257 SurfaceInspector_Construct();
258 PatchInspector_Construct();
260 XYWindow_Construct();
261 BuildMonitor_Construct();
262 TextureBrowser_Construct();
264 Autosave_Construct();
265 EntityInspector_construct();
266 FindTextureDialog_Construct();
267 NullModel_construct();
271 EnginePath_Realise();
275 EnginePath_Unrealise();
279 FindTextureDialog_Destroy();
280 EntityInspector_destroy();
283 TextureBrowser_Destroy();
284 BuildMonitor_Destroy();
287 PatchInspector_Destroy();
288 SurfaceInspector_Destroy();
289 GroupDialog_Destroy();
291 EntityList_Destroy();
307 bool g_RadiantInitialised = false;
308 RadiantDependencies* g_RadiantDependencies;
314 bool Radiant_Construct(ModuleServer& server)
316 GlobalModuleServer::instance().set(server);
317 StaticModuleRegistryList().instance().registerModules();
319 g_RadiantDependencies = new RadiantDependencies();
321 g_RadiantInitialised = !server.getError();
323 if(g_RadiantInitialised)
325 g_Radiant = new Radiant;
328 return g_RadiantInitialised;
330 void Radiant_Destroy()
332 if(g_RadiantInitialised)
337 delete g_RadiantDependencies;
340 ImageModules& Radiant_getImageModules()
342 return g_RadiantDependencies->getImageModules();
344 MapModules& Radiant_getMapModules()
346 return g_RadiantDependencies->getMapModules();
348 ToolbarModules& Radiant_getToolbarModules()
350 return g_RadiantDependencies->getToolbarModules();
352 PluginModules& Radiant_getPluginModules()
354 return g_RadiantDependencies->getPluginModules();