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.getGameToolsPath = &GameToolsPath_get;
132 m_radiantcore.getSettingsPath = &SettingsPath_get;
133 m_radiantcore.getMapsPath = &getMapsPath;
135 m_radiantcore.getGameFile = &getGameFile;
136 m_radiantcore.getGameName = &gamename_get;
137 m_radiantcore.getGameMode = &gamemode_get;
139 m_radiantcore.getMapName = &getMapName;
140 m_radiantcore.getMapWorldEntity = getMapWorldEntity;
141 m_radiantcore.getGridSize = GetGridSize;
143 m_radiantcore.getGameDescriptionKeyValue = &GameDescription_getKeyValue;
144 m_radiantcore.getRequiredGameDescriptionKeyValue = &GameDescription_getRequiredKeyValue;
146 m_radiantcore.XYWindowDestroyed_connect = XYWindowDestroyed_connect;
147 m_radiantcore.XYWindowDestroyed_disconnect = XYWindowDestroyed_disconnect;
148 m_radiantcore.XYWindowMouseDown_connect = XYWindowMouseDown_connect;
149 m_radiantcore.XYWindowMouseDown_disconnect = XYWindowMouseDown_disconnect;
150 m_radiantcore.XYWindow_getViewType = XYWindow_getViewType;
151 m_radiantcore.XYWindow_windowToWorld = XYWindow_windowToWorld;
152 m_radiantcore.TextureBrowser_getSelectedShader = TextureBrowser_getSelectedShader;
154 m_radiantcore.m_pfnMessageBox = >k_MessageBox;
155 m_radiantcore.m_pfnFileDialog = &file_dialog;
156 m_radiantcore.m_pfnColorDialog = &color_dialog;
157 m_radiantcore.m_pfnDirDialog = &dir_dialog;
158 m_radiantcore.m_pfnNewImage = &new_plugin_image;
160 _QERFuncTable_1* getTable(){
161 return &m_radiantcore;
165 typedef SingletonModule<RadiantCoreAPI> RadiantCoreModule;
166 typedef Static<RadiantCoreModule> StaticRadiantCoreModule;
167 StaticRegisterModule staticRegisterRadiantCore( StaticRadiantCoreModule::instance() );
170 class RadiantDependencies :
171 public GlobalRadiantModuleRef,
172 public GlobalFileSystemModuleRef,
173 public GlobalEntityModuleRef,
174 public GlobalShadersModuleRef,
175 public GlobalBrushModuleRef,
176 public GlobalSceneGraphModuleRef,
177 public GlobalShaderCacheModuleRef,
178 public GlobalFiletypesModuleRef,
179 public GlobalSelectionModuleRef,
180 public GlobalReferenceModuleRef,
181 public GlobalOpenGLModuleRef,
182 public GlobalEntityClassManagerModuleRef,
183 public GlobalUndoModuleRef,
184 public GlobalScripLibModuleRef,
185 public GlobalNamespaceModuleRef
187 ImageModulesRef m_image_modules;
188 MapModulesRef m_map_modules;
189 ToolbarModulesRef m_toolbar_modules;
190 PluginModulesRef m_plugin_modules;
193 RadiantDependencies() :
194 GlobalEntityModuleRef( GlobalRadiant().getRequiredGameDescriptionKeyValue( "entities" ) ),
195 GlobalShadersModuleRef( GlobalRadiant().getRequiredGameDescriptionKeyValue( "shaders" ) ),
196 GlobalBrushModuleRef( GlobalRadiant().getRequiredGameDescriptionKeyValue( "brushtypes" ) ),
197 GlobalEntityClassManagerModuleRef( GlobalRadiant().getRequiredGameDescriptionKeyValue( "entityclass" ) ),
198 m_image_modules( GlobalRadiant().getRequiredGameDescriptionKeyValue( "texturetypes" ) ),
199 m_map_modules( GlobalRadiant().getRequiredGameDescriptionKeyValue( "maptypes" ) ),
200 m_toolbar_modules( "*" ),
201 m_plugin_modules( "*" ){
204 ImageModules& getImageModules(){
205 return m_image_modules.get();
207 MapModules& getMapModules(){
208 return m_map_modules.get();
210 ToolbarModules& getToolbarModules(){
211 return m_toolbar_modules.get();
213 PluginModules& getPluginModules(){
214 return m_plugin_modules.get();
218 class Radiant : public TypeSystemRef
224 GlobalFiletypes().addType( "sound", "wav", filetype_t( "PCM sound files", "*.wav" ) );
226 Selection_construct();
227 HomePaths_Construct();
230 MultiMon_Construct();
232 Pointfile_Construct();
233 GLWindow_Construct();
234 BuildMenu_Construct();
236 EntityList_Construct();
237 MainFrame_Construct();
238 GroupDialog_Construct();
239 SurfaceInspector_Construct();
240 PatchInspector_Construct();
242 XYWindow_Construct();
243 BuildMonitor_Construct();
244 TextureBrowser_Construct();
246 Autosave_Construct();
247 EntityInspector_construct();
248 FindTextureDialog_Construct();
249 NullModel_construct();
253 EnginePath_Realise();
256 EnginePath_Unrealise();
260 FindTextureDialog_Destroy();
261 EntityInspector_destroy();
264 TextureBrowser_Destroy();
265 BuildMonitor_Destroy();
268 PatchInspector_Destroy();
269 SurfaceInspector_Destroy();
270 GroupDialog_Destroy();
272 EntityList_Destroy();
288 bool g_RadiantInitialised = false;
289 RadiantDependencies* g_RadiantDependencies;
295 bool Radiant_Construct( ModuleServer& server ){
296 GlobalModuleServer::instance().set( server );
297 StaticModuleRegistryList().instance().registerModules();
299 g_RadiantDependencies = new RadiantDependencies();
301 g_RadiantInitialised = !server.getError();
303 if ( g_RadiantInitialised ) {
304 g_Radiant = new Radiant;
307 return g_RadiantInitialised;
309 void Radiant_Destroy(){
310 if ( g_RadiantInitialised ) {
314 delete g_RadiantDependencies;
317 ImageModules& Radiant_getImageModules(){
318 return g_RadiantDependencies->getImageModules();
320 MapModules& Radiant_getMapModules(){
321 return g_RadiantDependencies->getMapModules();
323 ToolbarModules& Radiant_getToolbarModules(){
324 return g_RadiantDependencies->getToolbarModules();
326 PluginModules& Radiant_getPluginModules(){
327 return g_RadiantDependencies->getPluginModules();