]> de.git.xonotic.org Git - xonotic/netradiant.git/blobdiff - radiant/mainframe.cpp
q3map2: code simplification
[xonotic/netradiant.git] / radiant / mainframe.cpp
index 662f6332cef5e83f1868c042a048ebca1dafac0b..225a7d5e5fba955486817c08b7dc842f9a0636ed 100644 (file)
@@ -138,22 +138,25 @@ void VFS_Init(){
        GlobalFileSystem().initialise();
        g_vfsInitialized = true;
 }
+
 void VFS_Shutdown(){
        if ( !g_vfsInitialized ) return;
        GlobalFileSystem().shutdown();
        g_vfsInitialized = false;
 }
+
 void VFS_Refresh(){
        if ( !g_vfsInitialized ) return;
        GlobalFileSystem().clear();
        QE_InitVFS();
        GlobalFileSystem().refresh();
        g_vfsInitialized = true;
-       // also refresg models
+       // also refresh models
        RefreshReferences();
        // also refresh texture browser
        TextureBrowser_RefreshShaders();
 }
+
 void VFS_Restart(){
        VFS_Shutdown();
        VFS_Init();
@@ -165,6 +168,7 @@ public:
 void realise(){
        VFS_Init();
 }
+
 void unrealise(){
        VFS_Shutdown();
 }
@@ -175,6 +179,7 @@ VFSModuleObserver g_VFSModuleObserver;
 void VFS_Construct(){
        Radiant_attachHomePathsObserver( g_VFSModuleObserver );
 }
+
 void VFS_Destroy(){
        Radiant_detachHomePathsObserver( g_VFSModuleObserver );
 }
@@ -182,7 +187,7 @@ void VFS_Destroy(){
 // Home Paths
 
 #if GDEF_OS_WINDOWS
-#include <shlobj.h>
+                                                                                                                       #include <shlobj.h>
 #include <objbase.h>
 const GUID qFOLDERID_SavedGames = {0x4C5C32FF, 0xBB9D, 0x43b0, {0xB5, 0xB4, 0x2D, 0x72, 0xE5, 0x4E, 0xAA, 0xA4}};
 #define qREFKNOWNFOLDERID GUID
@@ -191,6 +196,7 @@ const GUID qFOLDERID_SavedGames = {0x4C5C32FF, 0xBB9D, 0x43b0, {0xB5, 0xB4, 0x2D
 typedef HRESULT ( WINAPI qSHGetKnownFolderPath_t )( qREFKNOWNFOLDERID rfid, DWORD dwFlags, HANDLE hToken, PWSTR *ppszPath );
 static qSHGetKnownFolderPath_t *qSHGetKnownFolderPath;
 #endif
+
 void HomePaths_Realise(){
        do
        {
@@ -248,11 +254,19 @@ void HomePaths_Realise(){
                        }
 #endif
 
-#if GDEF_OS_POSIX
+#if (GDEF_OS_POSIX && !GDEF_OS_MACOS)
                        path.clear();
-                       path << DirectoryCleaned( g_get_home_dir() ) << prefix << "/";
-                       g_qeglobals.m_userEnginePath = path.c_str();
-                       break;
+                       path << DirectoryCleaned( g_get_user_data_dir() ) << ( prefix + 1 ) << "/";
+                       if ( file_exists( path.c_str() ) && file_is_directory( path.c_str() ) ) {
+                               g_qeglobals.m_userEnginePath = path.c_str();
+                               break;
+                       }
+                       else {
+                               path.clear();
+                               path << DirectoryCleaned( g_get_home_dir() ) << prefix << "/";
+                               g_qeglobals.m_userEnginePath = path.c_str();
+                               break;
+                       }
 #endif
                }
 
@@ -287,12 +301,14 @@ std::size_t m_unrealised;
 public:
 HomePathsModuleObserver() : m_unrealised( 1 ){
 }
+
 void realise(){
        if ( --m_unrealised == 0 ) {
                HomePaths_Realise();
                g_homePathObservers.realise();
        }
 }
+
 void unrealise(){
        if ( ++m_unrealised == 1 ) {
                g_homePathObservers.unrealise();
@@ -305,6 +321,7 @@ HomePathsModuleObserver g_HomePathsModuleObserver;
 void HomePaths_Construct(){
        Radiant_attachEnginePathObserver( g_HomePathsModuleObserver );
 }
+
 void HomePaths_Destroy(){
        Radiant_detachEnginePathObserver( g_HomePathsModuleObserver );
 }
@@ -428,11 +445,23 @@ void setPakPath( int num, const char* path ){
 // App Path
 
 CopiedString g_strAppPath;                 ///< holds the full path of the executable
+CopiedString g_strLibPath;
+CopiedString g_strDataPath;
 
 const char* AppPath_get(){
        return g_strAppPath.c_str();
 }
 
+const char *LibPath_get()
+{
+    return g_strLibPath.c_str();
+}
+
+const char *DataPath_get()
+{
+    return g_strDataPath.c_str();
+}
+
 /// the path to the local rc-dir
 const char* LocalRcPath_get( void ){
        static CopiedString rc_path;
@@ -447,6 +476,7 @@ const char* LocalRcPath_get( void ){
 /// directory for temp files
 /// NOTE: on *nix this is were we check for .pid
 CopiedString g_strSettingsPath;
+
 const char* SettingsPath_get(){
        return g_strSettingsPath.c_str();
 }
@@ -486,6 +516,7 @@ struct PakPath0 {
                setPakPath( 0, value );
        }
 };
+
 struct PakPath1 {
        static void Export( const CopiedString &self, const Callback<void(const char*)> &returnz ) {
                returnz( self.c_str() );
@@ -495,6 +526,7 @@ struct PakPath1 {
                setPakPath( 1, value );
        }
 };
+
 struct PakPath2 {
        static void Export( const CopiedString &self, const Callback<void(const char*)> &returnz ) {
                returnz( self.c_str() );
@@ -504,6 +536,7 @@ struct PakPath2 {
                setPakPath( 2, value );
        }
 };
+
 struct PakPath3 {
        static void Export( const CopiedString &self, const Callback<void(const char*)> &returnz ) {
                returnz( self.c_str() );
@@ -513,6 +546,7 @@ struct PakPath3 {
                setPakPath( 3, value );
        }
 };
+
 struct PakPath4 {
        static void Export( const CopiedString &self, const Callback<void(const char*)> &returnz ) {
                returnz( self.c_str() );
@@ -523,9 +557,22 @@ struct PakPath4 {
        }
 };
 
+bool g_disableEnginePath = false;
+bool g_disableHomePath = false;
+
 void Paths_constructPreferences( PreferencesPage& page ){
        page.appendPathEntry( "Engine Path", true, make_property<EnginePath>(g_strEnginePath) );
 
+       page.appendCheckBox(
+               "", "Do not use Engine Path",
+               g_disableEnginePath
+               );
+
+       page.appendCheckBox(
+               "", "Do not use Home Path",
+               g_disableHomePath
+               );
+
        for ( int i = 0; i < g_pakPathCount; i++ ) {
                std::string label = "Pak Path " + std::to_string(i);
                switch (i) {
@@ -547,10 +594,12 @@ void Paths_constructPreferences( PreferencesPage& page ){
                }
        }
 }
+
 void Paths_constructPage( PreferenceGroup& group ){
        PreferencesPage page( group.createPage( "Paths", "Path Settings" ) );
        Paths_constructPreferences( page );
 }
+
 void Paths_registerPreferencesPage(){
        PreferencesDialog_addSettingsPage( makeCallbackF(Paths_constructPage) );
 }
@@ -695,11 +744,13 @@ std::size_t m_unrealised;
 public:
 WorldspawnColourEntityClassObserver() : m_unrealised( 1 ){
 }
+
 void realise(){
        if ( --m_unrealised == 0 ) {
                SetWorldspawnColour( g_xywindow_globals.color_brushes );
        }
 }
+
 void unrealise(){
        if ( ++m_unrealised == 1 ) {
        }
@@ -722,7 +773,7 @@ void Radiant_detachGameToolsPathObserver( ModuleObserver& observer ){
 void Radiant_Initialise(){
        GlobalModuleServer_Initialise();
 
-       Radiant_loadModulesFromRoot( AppPath_get() );
+       Radiant_loadModulesFromRoot( LibPath_get() );
 
        Preferences_Load();
 
@@ -912,6 +963,53 @@ void ColorScheme_Ydnar(){
        XY_UpdateAllWindows();
 }
 
+/* color scheme to fit the GTK Adwaita Dark theme */
+void ColorScheme_AdwaitaDark()
+{
+       // SI_Colors0
+       // GlobalTextureBrowser().color_textureback
+       TextureBrowser_setBackgroundColour(GlobalTextureBrowser(), Vector3(0.25f, 0.25f, 0.25f));
+
+       // SI_Colors4
+       g_camwindow_globals.color_cameraback = Vector3(0.25f, 0.25f, 0.25f);
+       // SI_Colors12
+       g_camwindow_globals.color_selbrushes3d = Vector3(1.0f, 0.0f, 0.0f);
+       CamWnd_Update(*g_pParentWnd->GetCamWnd());
+
+       // SI_Colors1
+       g_xywindow_globals.color_gridback = Vector3(0.25f, 0.25f, 0.25f);
+       // SI_Colors2
+       g_xywindow_globals.color_gridminor = Vector3(0.21f, 0.23f, 0.23f);
+       // SI_Colors3
+       g_xywindow_globals.color_gridmajor = Vector3(0.14f, 0.15f, 0.15f);
+       // SI_Colors14
+       g_xywindow_globals.color_gridmajor_alt = Vector3(1.0f, 0.0f, 0.0f);
+       // SI_Colors6
+       g_xywindow_globals.color_gridblock = Vector3(1.0f, 1.0f, 1.0f);
+       // SI_Colors7
+       g_xywindow_globals.color_gridtext = Vector3(0.0f, 0.0f, 0.0f);
+       // ??
+       g_xywindow_globals.color_selbrushes = Vector3(1.0f, 0.0f, 0.0f);
+       // ??
+       g_xywindow_globals.color_clipper = Vector3(0.0f, 0.0f, 1.0f);
+       // SI_Colors8
+       g_xywindow_globals.color_brushes = Vector3(0.73f, 0.73f, 0.73f);
+
+       // SI_AxisColors0
+       g_xywindow_globals.AxisColorX = Vector3(1.0f, 0.0f, 0.0f);
+       // SI_AxisColors1
+       g_xywindow_globals.AxisColorY = Vector3(0.0f, 1.0f, 0.0f);
+       // SI_AxisColors2
+       g_xywindow_globals.AxisColorZ = Vector3(0.0f, 0.0f, 1.0f);
+       SetWorldspawnColour(g_xywindow_globals.color_brushes);
+       // ??
+       g_xywindow_globals.color_viewname = Vector3(0.5f, 0.0f, 0.75f);
+       XY_UpdateAllWindows();
+
+       // SI_Colors5
+       // g_entity_globals.color_entity = Vector3(0.0f, 0.0f, 0.0f);
+}
+
 typedef Callback<void(Vector3&)> GetColourCallback;
 typedef Callback<void(const Vector3&)> SetColourCallback;
 
@@ -923,6 +1021,7 @@ public:
 ChooseColour( const GetColourCallback& get, const SetColourCallback& set )
        : m_get( get ), m_set( set ){
 }
+
 void operator()(){
        Vector3 colour;
        m_get( colour );
@@ -932,16 +1031,17 @@ void operator()(){
 };
 
 
-
 void Colour_get( const Vector3& colour, Vector3& other ){
        other = colour;
 }
+
 typedef ConstReferenceCaller<Vector3, void(Vector3&), Colour_get> ColourGetCaller;
 
 void Colour_set( Vector3& colour, const Vector3& other ){
        colour = other;
        SceneChangeNotify();
 }
+
 typedef ReferenceCaller<Vector3, void(const Vector3&), Colour_set> ColourSetCaller;
 
 void BrushColour_set( const Vector3& other ){
@@ -949,6 +1049,7 @@ void BrushColour_set( const Vector3& other ){
        SetWorldspawnColour( g_xywindow_globals.color_brushes );
        SceneChangeNotify();
 }
+
 typedef FreeCaller<void(const Vector3&), BrushColour_set> BrushColourSetCaller;
 
 void ClipperColour_set( const Vector3& other ){
@@ -956,16 +1057,19 @@ void ClipperColour_set( const Vector3& other ){
        Brush_clipperColourChanged();
        SceneChangeNotify();
 }
+
 typedef FreeCaller<void(const Vector3&), ClipperColour_set> ClipperColourSetCaller;
 
 void TextureBrowserColour_get( Vector3& other ){
        other = TextureBrowser_getBackgroundColour( GlobalTextureBrowser() );
 }
+
 typedef FreeCaller<void(Vector3&), TextureBrowserColour_get> TextureBrowserColourGetCaller;
 
 void TextureBrowserColour_set( const Vector3& other ){
        TextureBrowser_setBackgroundColour( GlobalTextureBrowser(), other );
 }
+
 typedef FreeCaller<void(const Vector3&), TextureBrowserColour_set> TextureBrowserColourSetCaller;
 
 
@@ -1023,6 +1127,7 @@ ui::MenuItem create_colours_menu(){
        create_menu_item_with_mnemonic( menu_3, "Q3Radiant Original", "ColorSchemeQER" );
        create_menu_item_with_mnemonic( menu_3, "Black and Green", "ColorSchemeBlackAndGreen" );
        create_menu_item_with_mnemonic( menu_3, "Maya/Max/Lightwave Emulation", "ColorSchemeYdnar" );
+       create_menu_item_with_mnemonic(menu_3, "Adwaita Dark", "ColorSchemeAdwaitaDark");
 
        menu_separator( menu_in_menu );
 
@@ -1084,17 +1189,17 @@ void EntityInspector_ToggleShow(){
 }
 
 
-
 void SetClipMode( bool enable );
+
 void ModeChangeNotify();
 
 typedef void ( *ToolMode )();
+
 ToolMode g_currentToolMode = 0;
 bool g_currentToolModeSupportsComponentEditing = false;
 ToolMode g_defaultToolMode = 0;
 
 
-
 void SelectionSystem_DefaultMode(){
        GlobalSelectionSystem().SetMode( SelectionSystem::ePrimitive );
        GlobalSelectionSystem().SetComponentMode( SelectionSystem::eDefault );
@@ -1235,6 +1340,7 @@ NodeSmartReference worldspawn;
 public:
 CloneSelected( bool d ) : doMakeUnique( d ), worldspawn( Map_FindOrInsertWorldspawn( g_map ) ){
 }
+
 bool pre( const scene::Path& path, scene::Instance& instance ) const {
        if ( path.size() == 1 ) {
                return true;
@@ -1256,6 +1362,7 @@ bool pre( const scene::Path& path, scene::Instance& instance ) const {
 
        return true;
 }
+
 void post( const scene::Path& path, scene::Instance& instance ) const {
        if ( path.size() == 1 ) {
                return;
@@ -1300,6 +1407,7 @@ struct AxisBase
        Vector3 x;
        Vector3 y;
        Vector3 z;
+
        AxisBase( const Vector3& x_, const Vector3& y_, const Vector3& z_ )
                : x( x_ ), y( y_ ), z( z_ ){
        }
@@ -1636,6 +1744,7 @@ public:
 SnappableSnapToGridSelected( float snap )
        : m_snap( snap ){
 }
+
 bool pre( const scene::Path& path, scene::Instance& instance ) const {
        if ( path.top().get().visible() ) {
                Snappable* snappable = Node_getSnappable( path.top() );
@@ -1659,6 +1768,7 @@ public:
 ComponentSnappableSnapToGridSelected( float snap )
        : m_snap( snap ){
 }
+
 bool pre( const scene::Path& path, scene::Instance& instance ) const {
        if ( path.top().get().visible() ) {
                ComponentSnappable* componentSnappable = Instance_getComponentSnappable( instance );
@@ -1839,7 +1949,6 @@ void ScreenUpdates_Enable(){
 }
 
 
-
 void GlobalCamera_UpdateWindow(){
        if ( g_pParentWnd != 0 ) {
                CamWnd_Update( *g_pParentWnd->GetCamWnd() );
@@ -1898,7 +2007,6 @@ LatchedValue<bool> g_Layout_enablePatchToolbar( true, "Patch Toolbar" );
 LatchedValue<bool> g_Layout_enablePluginToolbar( true, "Plugin Toolbar" );
 
 
-
 ui::MenuItem create_file_menu(){
        // File menu
        auto file_menu_item = new_sub_menu_item_with_mnemonic( "_File" );
@@ -2399,7 +2507,8 @@ void Select_constructToolbar( ui::Toolbar toolbar ){
 void CSG_constructToolbar( ui::Toolbar toolbar ){
        toolbar_append_button( toolbar, "CSG Subtract (SHIFT + U)", "selection_csgsubtract.png", "CSGSubtract" );
        toolbar_append_button( toolbar, "CSG Merge (CTRL + U)", "selection_csgmerge.png", "CSGMerge" );
-       toolbar_append_button( toolbar, "Hollow", "selection_makehollow.png", "CSGHollow" );
+       toolbar_append_button( toolbar, "Make Hollow", "selection_makehollow.png", "CSGMakeHollow" );
+       toolbar_append_button( toolbar, "Make Room", "selection_makeroom.png", "CSGMakeRoom" );
 }
 
 void ComponentModes_constructToolbar( ui::Toolbar toolbar ){
@@ -2589,6 +2698,7 @@ static gboolean notify( ui::Window window, gpointer dummy, MainWindowActive* sel
 
        return FALSE;
 }
+
 public:
 void connect( ui::Window toplevel_window ){
        toplevel_window.connect( "notify::is-active", G_CALLBACK( notify ), this );
@@ -3184,8 +3294,11 @@ int getFarClipDistance(){
 }
 
 float ( *GridStatus_getGridSize )() = GetGridSize;
+
 int ( *GridStatus_getRotateIncrement )() = getRotateIncrement;
+
 int ( *GridStatus_getFarClipDistance )() = getFarClipDistance;
+
 bool ( *GridStatus_getTextureLockEnabled )();
 
 void MainFrame::SetGridStatus(){
@@ -3350,6 +3463,7 @@ void MainFrame_Construct(){
        GlobalCommands_insert( "ColorSchemeQER", makeCallbackF(ColorScheme_QER) );
        GlobalCommands_insert( "ColorSchemeBlackAndGreen", makeCallbackF(ColorScheme_Black) );
        GlobalCommands_insert( "ColorSchemeYdnar", makeCallbackF(ColorScheme_Ydnar) );
+       GlobalCommands_insert("ColorSchemeAdwaitaDark", makeCallbackF(ColorScheme_AdwaitaDark));
        GlobalCommands_insert( "ChooseTextureBackgroundColor", makeCallback( g_ColoursMenu.m_textureback ) );
        GlobalCommands_insert( "ChooseGridBackgroundColor", makeCallback( g_ColoursMenu.m_xyback ) );
        GlobalCommands_insert( "ChooseGridMajorColor", makeCallback( g_ColoursMenu.m_gridmajor ) );
@@ -3367,8 +3481,9 @@ void MainFrame_Construct(){
 
 
        GlobalCommands_insert( "CSGSubtract", makeCallbackF(CSG_Subtract), Accelerator( 'U', (GdkModifierType)GDK_SHIFT_MASK ) );
-       GlobalCommands_insert( "CSGMerge", makeCallbackF(CSG_Merge), Accelerator( 'U', (GdkModifierType)GDK_CONTROL_MASK ) );
-       GlobalCommands_insert( "CSGHollow", makeCallbackF(CSG_MakeHollow) );
+       GlobalCommands_insert( "CSGMerge", makeCallbackF(CSG_Merge), Accelerator( 'U', (GdkModifierType) GDK_CONTROL_MASK ) );
+       GlobalCommands_insert( "CSGMakeHollow", makeCallbackF(CSG_MakeHollow) );
+       GlobalCommands_insert( "CSGMakeRoom", makeCallbackF(CSG_MakeRoom) );
 
        Grid_registerCommands();
 
@@ -3440,8 +3555,11 @@ void MainFrame_Construct(){
 
        GlobalPreferenceSystem().registerPreference( "EnginePath", make_property_string( g_strEnginePath ) );
 
+       GlobalPreferenceSystem().registerPreference( "DisableEnginePath", make_property_string( g_disableEnginePath ) );
+       GlobalPreferenceSystem().registerPreference( "DisableHomePath", make_property_string( g_disableHomePath ) );
+
        for ( int i = 0; i < g_pakPathCount; i++ ) {
-               std::string label = "PakPath" + std::to_string(i);
+               std::string label = "PakPath" + std::to_string( i );
                GlobalPreferenceSystem().registerPreference( label.c_str(), make_property_string( g_strPakPath[i] ) );
        }