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 ){
87 return g_pGameDescription->getKeyValue( key );
90 const char* GameDescription_getRequiredKeyValue( const char* key ){
91 return g_pGameDescription->getRequiredKeyValue( key );
94 const char* getMapName(){
95 return Map_Name( g_map );
98 scene::Node& getMapWorldEntity(){
99 return Map_FindOrInsertWorldspawn( g_map );
102 VIEWTYPE XYWindow_getViewType(){
103 return g_pParentWnd->GetXYWnd()->GetViewType();
106 Vector3 XYWindow_windowToWorld( const WindowVector& position ){
107 Vector3 result( 0, 0, 0 );
108 g_pParentWnd->GetXYWnd()->XY_ToPoint( static_cast<int>( position.x() ), static_cast<int>( position.y() ), result );
112 const char* TextureBrowser_getSelectedShader(){
113 return TextureBrowser_GetSelectedShader( GlobalTextureBrowser() );
116 const char* getGameFile(){
117 return g_GamesDialog.m_sGameFile.c_str();
122 _QERFuncTable_1 m_radiantcore;
124 typedef _QERFuncTable_1 Type;
125 STRING_CONSTANT( Name, "*" );
128 m_radiantcore.getEnginePath = &EnginePath_get;
129 m_radiantcore.getLocalRcPath = &LocalRcPath_get;
130 m_radiantcore.getAppPath = &AppPath_get;
131 m_radiantcore.getDataPath = &DataPath_get;
132 m_radiantcore.getGameToolsPath = &GameToolsPath_get;
133 m_radiantcore.getSettingsPath = &SettingsPath_get;
134 m_radiantcore.getMapsPath = &getMapsPath;
136 m_radiantcore.getGameFile = &getGameFile;
137 m_radiantcore.getGameName = &gamename_get;
138 m_radiantcore.getGameMode = &gamemode_get;
140 m_radiantcore.getMapName = &getMapName;
141 m_radiantcore.getMapWorldEntity = getMapWorldEntity;
142 m_radiantcore.getGridSize = GetGridSize;
144 m_radiantcore.getGameDescriptionKeyValue = &GameDescription_getKeyValue;
145 m_radiantcore.getRequiredGameDescriptionKeyValue = &GameDescription_getRequiredKeyValue;
147 m_radiantcore.XYWindowDestroyed_connect = XYWindowDestroyed_connect;
148 m_radiantcore.XYWindowDestroyed_disconnect = XYWindowDestroyed_disconnect;
149 m_radiantcore.XYWindowMouseDown_connect = XYWindowMouseDown_connect;
150 m_radiantcore.XYWindowMouseDown_disconnect = XYWindowMouseDown_disconnect;
151 m_radiantcore.XYWindow_getViewType = XYWindow_getViewType;
152 m_radiantcore.XYWindow_windowToWorld = XYWindow_windowToWorld;
153 m_radiantcore.TextureBrowser_getSelectedShader = TextureBrowser_getSelectedShader;
155 m_radiantcore.m_pfnMessageBox = >k_MessageBox;
156 m_radiantcore.m_pfnFileDialog = &file_dialog;
157 m_radiantcore.m_pfnColorDialog = &color_dialog;
158 m_radiantcore.m_pfnDirDialog = &dir_dialog;
159 m_radiantcore.m_pfnNewImage = &new_plugin_image;
161 _QERFuncTable_1* getTable(){
162 return &m_radiantcore;
166 typedef SingletonModule<RadiantCoreAPI> RadiantCoreModule;
167 typedef Static<RadiantCoreModule> StaticRadiantCoreModule;
168 StaticRegisterModule staticRegisterRadiantCore( StaticRadiantCoreModule::instance() );
171 class RadiantDependencies :
172 public GlobalRadiantModuleRef,
173 public GlobalFileSystemModuleRef,
174 public GlobalEntityModuleRef,
175 public GlobalShadersModuleRef,
176 public GlobalBrushModuleRef,
177 public GlobalSceneGraphModuleRef,
178 public GlobalShaderCacheModuleRef,
179 public GlobalFiletypesModuleRef,
180 public GlobalSelectionModuleRef,
181 public GlobalReferenceModuleRef,
182 public GlobalOpenGLModuleRef,
183 public GlobalEntityClassManagerModuleRef,
184 public GlobalUndoModuleRef,
185 public GlobalScripLibModuleRef,
186 public GlobalNamespaceModuleRef
188 ImageModulesRef m_image_modules;
189 MapModulesRef m_map_modules;
190 ToolbarModulesRef m_toolbar_modules;
191 PluginModulesRef m_plugin_modules;
194 RadiantDependencies() :
195 GlobalEntityModuleRef( GlobalRadiant().getRequiredGameDescriptionKeyValue( "entities" ) ),
196 GlobalShadersModuleRef( GlobalRadiant().getRequiredGameDescriptionKeyValue( "shaders" ) ),
197 GlobalBrushModuleRef( GlobalRadiant().getRequiredGameDescriptionKeyValue( "brushtypes" ) ),
198 GlobalEntityClassManagerModuleRef( GlobalRadiant().getRequiredGameDescriptionKeyValue( "entityclass" ) ),
199 m_image_modules( GlobalRadiant().getRequiredGameDescriptionKeyValue( "texturetypes" ) ),
200 m_map_modules( GlobalRadiant().getRequiredGameDescriptionKeyValue( "maptypes" ) ),
201 m_toolbar_modules( "*" ),
202 m_plugin_modules( "*" ){
205 ImageModules& getImageModules(){
206 return m_image_modules.get();
208 MapModules& getMapModules(){
209 return m_map_modules.get();
211 ToolbarModules& getToolbarModules(){
212 return m_toolbar_modules.get();
214 PluginModules& getPluginModules(){
215 return m_plugin_modules.get();
219 class Radiant : public TypeSystemRef
225 GlobalFiletypes().addType( "sound", "wav", filetype_t( "PCM sound files", "*.wav" ) );
227 Selection_construct();
228 HomePaths_Construct();
231 MultiMon_Construct();
233 Pointfile_Construct();
234 GLWindow_Construct();
235 BuildMenu_Construct();
237 EntityList_Construct();
238 MainFrame_Construct();
239 GroupDialog_Construct();
240 SurfaceInspector_Construct();
241 PatchInspector_Construct();
243 XYWindow_Construct();
244 BuildMonitor_Construct();
245 TextureBrowser_Construct();
247 Autosave_Construct();
248 EntityInspector_construct();
249 FindTextureDialog_Construct();
250 NullModel_construct();
254 EnginePath_Realise();
257 EnginePath_Unrealise();
261 FindTextureDialog_Destroy();
262 EntityInspector_destroy();
265 TextureBrowser_Destroy();
266 BuildMonitor_Destroy();
269 PatchInspector_Destroy();
270 SurfaceInspector_Destroy();
271 GroupDialog_Destroy();
273 EntityList_Destroy();
289 bool g_RadiantInitialised = false;
290 RadiantDependencies* g_RadiantDependencies;
296 bool Radiant_Construct( ModuleServer& server ){
297 GlobalModuleServer::instance().set( server );
298 StaticModuleRegistryList().instance().registerModules();
300 g_RadiantDependencies = new RadiantDependencies();
302 g_RadiantInitialised = !server.getError();
304 if ( g_RadiantInitialised ) {
305 g_Radiant = new Radiant;
308 return g_RadiantInitialised;
310 void Radiant_Destroy(){
311 if ( g_RadiantInitialised ) {
315 delete g_RadiantDependencies;
318 ImageModules& Radiant_getImageModules(){
319 return g_RadiantDependencies->getImageModules();
321 MapModules& Radiant_getMapModules(){
322 return g_RadiantDependencies->getMapModules();
324 ToolbarModules& Radiant_getToolbarModules(){
325 return g_RadiantDependencies->getToolbarModules();
327 PluginModules& Radiant_getPluginModules(){
328 return g_RadiantDependencies->getPluginModules();