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());
123 const char *getGameFile()
125 return g_GamesDialog.m_sGameFile.c_str();
128 class RadiantCoreAPI {
129 _QERFuncTable_1 m_radiantcore;
131 typedef _QERFuncTable_1 Type;
133 STRING_CONSTANT(Name, "*");
137 m_radiantcore.getEnginePath = &EnginePath_get;
138 m_radiantcore.getLocalRcPath = &LocalRcPath_get;
139 m_radiantcore.getAppPath = &AppPath_get;
140 m_radiantcore.getGameToolsPath = &GameToolsPath_get;
141 m_radiantcore.getSettingsPath = &SettingsPath_get;
142 m_radiantcore.getMapsPath = &getMapsPath;
144 m_radiantcore.getGameFile = &getGameFile;
145 m_radiantcore.getGameName = &gamename_get;
146 m_radiantcore.getGameMode = &gamemode_get;
148 m_radiantcore.getMapName = &getMapName;
149 m_radiantcore.getMapWorldEntity = getMapWorldEntity;
150 m_radiantcore.getGridSize = GetGridSize;
152 m_radiantcore.getGameDescriptionKeyValue = &GameDescription_getKeyValue;
153 m_radiantcore.getRequiredGameDescriptionKeyValue = &GameDescription_getRequiredKeyValue;
155 m_radiantcore.XYWindowDestroyed_connect = XYWindowDestroyed_connect;
156 m_radiantcore.XYWindowDestroyed_disconnect = XYWindowDestroyed_disconnect;
157 m_radiantcore.XYWindowMouseDown_connect = XYWindowMouseDown_connect;
158 m_radiantcore.XYWindowMouseDown_disconnect = XYWindowMouseDown_disconnect;
159 m_radiantcore.XYWindow_getViewType = XYWindow_getViewType;
160 m_radiantcore.XYWindow_windowToWorld = XYWindow_windowToWorld;
161 m_radiantcore.TextureBrowser_getSelectedShader = TextureBrowser_getSelectedShader;
163 m_radiantcore.m_pfnMessageBox = >k_MessageBox;
164 m_radiantcore.m_pfnFileDialog = &file_dialog;
165 m_radiantcore.m_pfnColorDialog = &color_dialog;
166 m_radiantcore.m_pfnDirDialog = &dir_dialog;
167 m_radiantcore.m_pfnNewImage = &new_plugin_image;
170 _QERFuncTable_1 *getTable()
172 return &m_radiantcore;
176 typedef SingletonModule<RadiantCoreAPI> RadiantCoreModule;
177 typedef Static<RadiantCoreModule> StaticRadiantCoreModule;
178 StaticRegisterModule staticRegisterRadiantCore(StaticRadiantCoreModule::instance());
181 class RadiantDependencies :
182 public GlobalRadiantModuleRef,
183 public GlobalFileSystemModuleRef,
184 public GlobalEntityModuleRef,
185 public GlobalShadersModuleRef,
186 public GlobalBrushModuleRef,
187 public GlobalSceneGraphModuleRef,
188 public GlobalShaderCacheModuleRef,
189 public GlobalFiletypesModuleRef,
190 public GlobalSelectionModuleRef,
191 public GlobalReferenceModuleRef,
192 public GlobalOpenGLModuleRef,
193 public GlobalEntityClassManagerModuleRef,
194 public GlobalUndoModuleRef,
195 public GlobalScripLibModuleRef,
196 public GlobalNamespaceModuleRef {
197 ImageModulesRef m_image_modules;
198 MapModulesRef m_map_modules;
199 ToolbarModulesRef m_toolbar_modules;
200 PluginModulesRef m_plugin_modules;
203 RadiantDependencies() :
204 GlobalEntityModuleRef(GlobalRadiant().getRequiredGameDescriptionKeyValue("entities")),
205 GlobalShadersModuleRef(GlobalRadiant().getRequiredGameDescriptionKeyValue("shaders")),
206 GlobalBrushModuleRef(GlobalRadiant().getRequiredGameDescriptionKeyValue("brushtypes")),
207 GlobalEntityClassManagerModuleRef(GlobalRadiant().getRequiredGameDescriptionKeyValue("entityclass")),
208 m_image_modules(GlobalRadiant().getRequiredGameDescriptionKeyValue("texturetypes")),
209 m_map_modules(GlobalRadiant().getRequiredGameDescriptionKeyValue("maptypes")),
210 m_toolbar_modules("*"),
211 m_plugin_modules("*")
215 ImageModules &getImageModules()
217 return m_image_modules.get();
220 MapModules &getMapModules()
222 return m_map_modules.get();
225 ToolbarModules &getToolbarModules()
227 return m_toolbar_modules.get();
230 PluginModules &getPluginModules()
232 return m_plugin_modules.get();
236 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();
276 EnginePath_Unrealise();
280 FindTextureDialog_Destroy();
281 EntityInspector_destroy();
284 TextureBrowser_Destroy();
285 BuildMonitor_Destroy();
288 PatchInspector_Destroy();
289 SurfaceInspector_Destroy();
290 GroupDialog_Destroy();
292 EntityList_Destroy();
307 bool g_RadiantInitialised = false;
308 RadiantDependencies *g_RadiantDependencies;
313 bool Radiant_Construct(ModuleServer &server)
315 GlobalModuleServer::instance().set(server);
316 StaticModuleRegistryList().instance().registerModules();
318 g_RadiantDependencies = new RadiantDependencies();
320 g_RadiantInitialised = !server.getError();
322 if (g_RadiantInitialised) {
323 g_Radiant = new Radiant;
326 return g_RadiantInitialised;
329 void Radiant_Destroy()
331 if (g_RadiantInitialised) {
335 delete g_RadiantDependencies;
338 ImageModules &Radiant_getImageModules()
340 return g_RadiantDependencies->getImageModules();
343 MapModules &Radiant_getMapModules()
345 return g_RadiantDependencies->getMapModules();
348 ToolbarModules &Radiant_getToolbarModules()
350 return g_RadiantDependencies->getToolbarModules();
353 PluginModules &Radiant_getPluginModules()
355 return g_RadiantDependencies->getPluginModules();