]> git.xonotic.org Git - xonotic/netradiant.git/blobdiff - radiant/mainframe.cpp
Merge commit 'ca4a8002f895c3474b3a5087ff027c31dadc712f' into master-merge
[xonotic/netradiant.git] / radiant / mainframe.cpp
index 17e53efc7279a87a92f409641c3024c7b5acba43..7bb9b5900109feae58a0037713b812cce6e95aec 100644 (file)
@@ -167,6 +167,8 @@ void VFS_Refresh(){
        RefreshReferences();
        // also refresh texture browser
        TextureBrowser_RefreshShaders();
+       // also show textures (all or common)
+       TextureBrowser_ShowStartupShaders( GlobalTextureBrowser() );
 }
 
 void VFS_Restart(){
@@ -179,7 +181,7 @@ class VFSModuleObserver : public ModuleObserver
 public:
 void realise(){
        VFS_Init();
-}
+       }
 
 void unrealise(){
        VFS_Shutdown();
@@ -270,10 +272,10 @@ void HomePaths_Realise(){
                                break;
                        }
                        else {
-                               path.clear();
-                               path << DirectoryCleaned( g_get_home_dir() ) << prefix << "/";
-                               g_qeglobals.m_userEnginePath = path.c_str();
-                               break;
+                       path.clear();
+                       path << DirectoryCleaned( g_get_home_dir() ) << prefix << "/";
+                       g_qeglobals.m_userEnginePath = path.c_str();
+                       break;
                        }
 #endif
                }
@@ -628,8 +630,10 @@ ui::Window BuildDialog(){
 
 PathsDialog g_PathsDialog;
 
+bool g_strEnginePath_was_empty_1st_start = false;
+
 void EnginePath_verify(){
-       if ( !file_exists( g_strEnginePath.c_str() ) ) {
+       if ( !file_exists( g_strEnginePath.c_str() ) || g_strEnginePath_was_empty_1st_start ) {
                g_PathsDialog.Create();
                g_PathsDialog.DoModal();
                g_PathsDialog.Destroy();
@@ -2013,6 +2017,7 @@ LatchedValue<int> g_Layout_viewStyle( 0, "Window Layout" );
 LatchedValue<bool> g_Layout_enableDetachableMenus( true, "Detachable Menus" );
 LatchedValue<bool> g_Layout_enablePatchToolbar( true, "Patch Toolbar" );
 LatchedValue<bool> g_Layout_enablePluginToolbar( true, "Plugin Toolbar" );
+LatchedValue<bool> g_Layout_enableFilterToolbar( true, "Filter Toolbar" );
 
 
 ui::MenuItem create_file_menu(){
@@ -2041,15 +2046,16 @@ ui::MenuItem create_file_menu(){
        create_menu_item_with_mnemonic( menu, "_Export selected...", "ExportSelected" );
        menu_separator( menu );
        create_menu_item_with_mnemonic( menu, "Save re_gion...", "SaveRegion" );
-       menu_separator( menu );
-       create_menu_item_with_mnemonic( menu, "_Refresh models", "RefreshReferences" );
-       menu_separator( menu );
+//     menu_separator( menu );
+//     create_menu_item_with_mnemonic( menu, "_Refresh models", "RefreshReferences" );
+//     menu_separator( menu );
        create_menu_item_with_mnemonic( menu, "Pro_ject settings...", "ProjectSettings" );
        menu_separator( menu );
        create_menu_item_with_mnemonic( menu, "_Pointfile...", "TogglePointfile" );
        menu_separator( menu );
        MRU_constructMenu( menu );
        menu_separator( menu );
+//     create_menu_item_with_mnemonic( menu, "Check for NetRadiant update (web)", "CheckForUpdate" ); // FIXME
        create_menu_item_with_mnemonic( menu, "E_xit", "Exit" );
 
        return file_menu_item;
@@ -2073,18 +2079,22 @@ ui::MenuItem create_edit_menu(){
        create_menu_item_with_mnemonic( menu, "Duplicate, make uni_que", "CloneSelectionAndMakeUnique" );
        create_menu_item_with_mnemonic( menu, "D_elete", "DeleteSelection" );
        menu_separator( menu );
-       create_menu_item_with_mnemonic( menu, "Pa_rent", "ParentSelection" );
+       create_menu_item_with_mnemonic( menu, "Snap To Grid", "SnapToGrid" );
+       //create_menu_item_with_mnemonic( menu, "Pa_rent", "ParentSelection" );
        menu_separator( menu );
        create_menu_item_with_mnemonic( menu, "C_lear Selection", "UnSelectSelection" );
        create_menu_item_with_mnemonic( menu, "_Invert Selection", "InvertSelection" );
        create_menu_item_with_mnemonic( menu, "Select i_nside", "SelectInside" );
        create_menu_item_with_mnemonic( menu, "Select _touching", "SelectTouching" );
 
-       auto convert_menu = create_sub_menu_with_mnemonic( menu, "E_xpand Selection" );
-       if ( g_Layout_enableDetachableMenus.m_value ) {
-               menu_tearoff( convert_menu );
-       }
-       create_menu_item_with_mnemonic( convert_menu, "To Whole _Entities", "ExpandSelectionToEntities" );
+       menu_separator( menu );
+
+//     auto convert_menu = create_sub_menu_with_mnemonic( menu, "E_xpand Selection" );
+//     if ( g_Layout_enableDetachableMenus.m_value ) {
+//             menu_tearoff( convert_menu );
+//     }
+       create_menu_item_with_mnemonic( menu, "Select All Of Type", "SelectAllOfType" );
+       create_menu_item_with_mnemonic( menu, "_Expand Selection To Entities", "ExpandSelectionToEntities" );
 
        menu_separator( menu );
        create_menu_item_with_mnemonic( menu, "Pre_ferences...", "Preferences" );
@@ -2136,6 +2146,7 @@ ui::MenuItem create_view_menu( MainFrame::EViewStyle style ){
                create_menu_item_with_mnemonic( menu, "Entity Inspector", "ViewEntityInfo" );
        }
        create_menu_item_with_mnemonic( menu, "_Surface Inspector", "SurfaceInspector" );
+       create_menu_item_with_mnemonic( menu, "_Patch Inspector", "PatchInspector" );
        create_menu_item_with_mnemonic( menu, "Entity List", "EntityList" );
 
        menu_separator( menu );
@@ -2174,6 +2185,8 @@ ui::MenuItem create_view_menu( MainFrame::EViewStyle style ){
                        menu_separator( orthographic_menu );
                }
 
+               create_menu_item_with_mnemonic( orthographic_menu, "Center on Selected", "CenterXYView" );
+               menu_separator( orthographic_menu );
                create_menu_item_with_mnemonic( orthographic_menu, "_XY 100%", "Zoom100" );
                create_menu_item_with_mnemonic( orthographic_menu, "XY Zoom _In", "ZoomIn" );
                create_menu_item_with_mnemonic( orthographic_menu, "XY Zoom _Out", "ZoomOut" );
@@ -2186,6 +2199,12 @@ ui::MenuItem create_view_menu( MainFrame::EViewStyle style ){
                if ( g_Layout_enableDetachableMenus.m_value ) {
                        menu_tearoff( menu_in_menu );
                }
+               create_menu_item_with_mnemonic( menu_in_menu, "Show Size Info", "ToggleSizePaint" );
+               create_menu_item_with_mnemonic( menu_in_menu, "Show Crosshair", "ToggleCrosshairs" );
+               create_menu_item_with_mnemonic( menu_in_menu, "Show Grid", "ToggleGrid" );
+
+               menu_separator( menu_in_menu );
+
                create_check_menu_item_with_mnemonic( menu_in_menu, "Show _Angles", "ShowAngles" );
                create_check_menu_item_with_mnemonic( menu_in_menu, "Show _Names", "ShowNames" );
                create_check_menu_item_with_mnemonic( menu_in_menu, "Show Blocks", "ShowBlocks" );
@@ -2205,12 +2224,14 @@ ui::MenuItem create_view_menu( MainFrame::EViewStyle style ){
        }
        menu_separator( menu );
        {
-               auto menu_in_menu = create_sub_menu_with_mnemonic( menu, "Hide/Show" );
-               if ( g_Layout_enableDetachableMenus.m_value ) {
-                       menu_tearoff( menu_in_menu );
-               }
-               create_menu_item_with_mnemonic( menu_in_menu, "Hide Selected", "HideSelected" );
-               create_menu_item_with_mnemonic( menu_in_menu, "Show Hidden", "ShowHidden" );
+//             GtkMenu* menu_in_menu = create_sub_menu_with_mnemonic( menu, "Hide/Show" );
+//             if ( g_Layout_enableDetachableMenus.m_value ) {
+//                     menu_tearoff( menu_in_menu );
+//             }
+//             create_menu_item_with_mnemonic( menu_in_menu, "Hide Selected", "HideSelected" );
+//             create_menu_item_with_mnemonic( menu_in_menu, "Show Hidden", "ShowHidden" );
+               create_menu_item_with_mnemonic( menu, "Hide Selected", "HideSelected" );
+               create_menu_item_with_mnemonic( menu, "Show Hidden", "ShowHidden" );
        }
        menu_separator( menu );
        {
@@ -2385,7 +2406,7 @@ ui::MenuItem create_help_menu(){
                menu_tearoff( menu );
        }
 
-       create_menu_item_with_mnemonic( menu, "Manual", "OpenManual" );
+//     create_menu_item_with_mnemonic( menu, "Manual", "OpenManual" );
 
        // this creates all the per-game drop downs for the game pack helps
        // it will take care of hooking the Sys_OpenURL calls etc.
@@ -2424,13 +2445,13 @@ void PatchInspector_registerShortcuts(){
 }
 
 void Patch_registerShortcuts(){
-       command_connect_accelerator( "InvertCurveTextureX" );
-       command_connect_accelerator( "InvertCurveTextureY" );
+//     command_connect_accelerator( "InvertCurveTextureX" );
+//     command_connect_accelerator( "InvertCurveTextureY" );
        command_connect_accelerator( "PatchInsertInsertColumn" );
        command_connect_accelerator( "PatchInsertInsertRow" );
        command_connect_accelerator( "PatchDeleteLastColumn" );
        command_connect_accelerator( "PatchDeleteLastRow" );
-       command_connect_accelerator( "NaturalizePatch" );
+//     command_connect_accelerator( "NaturalizePatch" );
        //command_connect_accelerator("CapCurrentCurve");
 }
 
@@ -2462,6 +2483,8 @@ void SelectNudge_registerShortcuts(){
        //command_connect_accelerator("SelectNudgeRight");
        //command_connect_accelerator("SelectNudgeUp");
        //command_connect_accelerator("SelectNudgeDown");
+       command_connect_accelerator( "UnSelectSelection2" );
+       command_connect_accelerator( "DeleteSelection2" );
 }
 
 void SnapToGrid_registerShortcuts(){
@@ -2478,17 +2501,17 @@ void SurfaceInspector_registerShortcuts(){
 
 
 void register_shortcuts(){
-       PatchInspector_registerShortcuts();
+//     PatchInspector_registerShortcuts();
        Patch_registerShortcuts();
        Grid_registerShortcuts();
-       XYWnd_registerShortcuts();
+//     XYWnd_registerShortcuts();
        CamWnd_registerShortcuts();
        Manipulators_registerShortcuts();
        SurfaceInspector_registerShortcuts();
        TexdefNudge_registerShortcuts();
        SelectNudge_registerShortcuts();
-       SnapToGrid_registerShortcuts();
-       SelectByType_registerShortcuts();
+//     SnapToGrid_registerShortcuts();
+//     SelectByType_registerShortcuts();
 }
 
 void File_constructToolbar( ui::Toolbar toolbar ){
@@ -2518,8 +2541,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, "Make Hollow", "selection_makehollow.png", "CSGMakeHollow" );
-       toolbar_append_button( toolbar, "Make Room", "selection_makeroom.png", "CSGMakeRoom" );
+       toolbar_append_button( toolbar, "Make Hollow", "selection_makehollow.png", "CSGHollow" );
+       toolbar_append_button( toolbar, "Make Room", "selection_makeroom.png", "CSGRoom" );
 }
 
 void ComponentModes_constructToolbar( ui::Toolbar toolbar ){
@@ -2943,6 +2966,9 @@ static gint mainframe_delete( ui::Widget widget, GdkEvent *event, gpointer data
        return TRUE;
 }
 
+PanedState g_single_hpaned = { 0.75f, -1, };
+PanedState g_single_vpaned = { 0.75f, -1, };
+
 void MainFrame::Create(){
        ui::Window window = ui::Window( ui::window_type::TOP );
 
@@ -2994,6 +3020,37 @@ void MainFrame::Create(){
        if ( !g_Layout_enablePluginToolbar.m_value ) {
                plugin_toolbar.hide();
        }
+
+       if ( g_Layout_enableFilterToolbar.m_value ) {
+               auto space = [&]() {
+                       auto btn = gtk_separator_tool_item_new();
+                               gtk_widget_show(GTK_WIDGET(btn));
+                               gtk_container_add(GTK_CONTAINER(plugin_toolbar), GTK_WIDGET(btn));
+               };
+
+               space();
+               toolbar_append_toggle_button( plugin_toolbar, "World (ALT + 1)", "f-world.bmp", "FilterWorldBrushes" );
+               toolbar_append_toggle_button( plugin_toolbar, "Details (CTRL + D)", "f-details.bmp", "FilterDetails" );
+               toolbar_append_toggle_button( plugin_toolbar, "Structural (CTRL + SHIFT + D)", "f-structural.bmp", "FilterStructural" );
+               toolbar_append_toggle_button( plugin_toolbar, "Patches (CTRL + P)", "patch_wireframe.png", "FilterPatches" );
+               space();
+               toolbar_append_toggle_button( plugin_toolbar, "Areaportals (ALT + 3)", "f-areaportal.bmp", "FilterAreaportals" );
+               toolbar_append_toggle_button( plugin_toolbar, "Translucent (ALT + 4)", "f-translucent.bmp", "FilterTranslucent" );
+               toolbar_append_toggle_button( plugin_toolbar, "Liquids (ALT + 5)", "f-liquids.bmp", "FilterLiquids" );
+               toolbar_append_toggle_button( plugin_toolbar, "Caulk (ALT + 6)", "f-caulk.bmp", "FilterCaulk" );
+               toolbar_append_toggle_button( plugin_toolbar, "Clips (ALT + 7)", "f-clip.bmp", "FilterClips" );
+               toolbar_append_toggle_button( plugin_toolbar, "HintsSkips (CTRL + H)", "f-hint.bmp", "FilterHintsSkips" );
+               //toolbar_append_toggle_button( plugin_toolbar, "Paths (ALT + 8)", "texture_lock.bmp", "FilterPaths" );
+               space();
+               toolbar_append_toggle_button( plugin_toolbar, "Entities (ALT + 2)", "f-entities.bmp", "FilterEntities" );
+               toolbar_append_toggle_button( plugin_toolbar, "Lights (ALT + 0)", "lightinspector.png", "FilterLights" );
+               toolbar_append_toggle_button( plugin_toolbar, "Models (SHIFT + M)", "f-models.bmp", "FilterModels" );
+               toolbar_append_toggle_button( plugin_toolbar, "Triggers (CTRL + SHIFT + T)", "f-triggers.bmp", "FilterTriggers" );
+//             toolbar_append_toggle_button( plugin_toolbar, "Decals (SHIFT + D)", "f-decals.bmp", "FilterDecals" );
+               space();
+               toolbar_append_button( plugin_toolbar, "InvertFilters", "f-invert.bmp", "InvertFilters" );
+               toolbar_append_button( plugin_toolbar, "ResetFilters", "f-reset.bmp", "ResetFilters" );
+       }
        vbox.pack_start( plugin_toolbar, FALSE, FALSE, 0 );
 
        ui::Widget main_statusbar = create_main_statusbar(reinterpret_cast<ui::Widget *>(m_pStatusLabel));
@@ -3027,44 +3084,40 @@ void MainFrame::Create(){
 
        window.show();
 
-       if ( CurrentStyle() == eRegular || CurrentStyle() == eRegularLeft ) {
+       if ( CurrentStyle() == eRegular || CurrentStyle() == eRegularLeft )
+       {
                {
-                       ui::Widget vsplit = ui::VPaned(ui::New);
-                       m_vSplit = vsplit;
-                       vbox.pack_start( vsplit, TRUE, TRUE, 0 );
-                       vsplit.show();
-
-                       // console
-                       ui::Widget console_window = Console_constructWindow( window );
-                       gtk_paned_pack2( GTK_PANED( vsplit ), console_window, FALSE, TRUE );
-
+                       ui::Widget hsplit = ui::HPaned(ui::New);
+                       m_vSplit = hsplit;
+                       vbox.pack_start( hsplit, TRUE, TRUE, 0 );
+                       hsplit.show();
                        {
-                               ui::Widget hsplit = ui::HPaned(ui::New);
-                               hsplit.show();
-                               m_hSplit = hsplit;
-                               gtk_paned_add1( GTK_PANED( vsplit ), hsplit );
+                               ui::Widget vsplit = ui::VPaned(ui::New);
+                               vsplit.show();
+                               m_vSplit = vsplit;
+                               ui::Widget vsplit2 = ui::VPaned(ui::New);
+                               vsplit2.show();
+                               m_vSplit = vsplit2;
+                               if ( CurrentStyle() == eRegular ){
+                                       gtk_paned_add1( GTK_PANED( hsplit ), vsplit );
+                                       gtk_paned_add2( GTK_PANED( hsplit ), vsplit2 );
+                               }
+                               else{
+                                       gtk_paned_add2( GTK_PANED( hsplit ), vsplit );
+                                       gtk_paned_add1( GTK_PANED( hsplit ), vsplit2 );
+                               }
 
+                               // console
+                               ui::Widget console_window = Console_constructWindow( window );
+                               gtk_paned_pack2( GTK_PANED( vsplit ), console_window, FALSE, TRUE );
+                               
                                // xy
                                m_pXYWnd = new XYWnd();
                                m_pXYWnd->SetViewType( XY );
                                ui::Widget xy_window = ui::Widget(create_framed_widget( m_pXYWnd->GetWidget( ) ));
 
+                               gtk_paned_add1( GTK_PANED( vsplit ), xy_window );
                                {
-                                       ui::Widget vsplit2 = ui::VPaned(ui::New);
-                                       vsplit2.show();
-                                       m_vSplit2 = vsplit2;
-
-                                       if ( CurrentStyle() == eRegular ) {
-                                               gtk_paned_add1( GTK_PANED( hsplit ), xy_window );
-                                               gtk_paned_add2( GTK_PANED( hsplit ), vsplit2 );
-                                       }
-                                       else
-                                       {
-                                               gtk_paned_add1( GTK_PANED( hsplit ), vsplit2 );
-                                               gtk_paned_add2( GTK_PANED( hsplit ), xy_window );
-                                       }
-
-
                                        // camera
                                        m_pCamWnd = NewCamWnd();
                                        GlobalCamera_setCamWnd( *m_pCamWnd );
@@ -3093,7 +3146,8 @@ void MainFrame::Create(){
 
                gtk_paned_set_position( GTK_PANED( m_vSplit2 ), g_layout_globals.nCamHeight );
        }
-       else if ( CurrentStyle() == eFloating ) {
+       else if ( CurrentStyle() == eFloating )
+       {
                {
                        ui::Window window = ui::Window(create_persistent_floating_window( "Camera", m_window ));
                        global_accel_connect_window( window );
@@ -3187,7 +3241,7 @@ void MainFrame::Create(){
 
                GroupDialog_show();
        }
-       else // 4 way
+       else if ( CurrentStyle() == eSplit )
        {
                m_pCamWnd = NewCamWnd();
                GlobalCamera_setCamWnd( *m_pCamWnd );
@@ -3220,6 +3274,56 @@ void MainFrame::Create(){
                        WORKAROUND_GOBJECT_SET_GLWIDGET( window, TextureBrowser_getGLWidget() );
                }
        }
+       else // single window
+       {
+               m_pCamWnd = NewCamWnd();
+               GlobalCamera_setCamWnd( *m_pCamWnd );
+               CamWnd_setParent( *m_pCamWnd, window );
+
+               ui::Widget camera = CamWnd_getWidget( *m_pCamWnd );
+
+               m_pYZWnd = new XYWnd();
+               m_pYZWnd->SetViewType( YZ );
+
+               ui::Widget yz = m_pYZWnd->GetWidget();
+
+               m_pXYWnd = new XYWnd();
+               m_pXYWnd->SetViewType( XY );
+
+               ui::Widget xy = m_pXYWnd->GetWidget();
+
+               m_pXZWnd = new XYWnd();
+               m_pXZWnd->SetViewType( XZ );
+
+               ui::Widget xz = m_pXZWnd->GetWidget();
+
+               ui::Widget hsplit = ui::HPaned(ui::New);
+               vbox.pack_start( hsplit, TRUE, TRUE, 0 );
+               hsplit.show();
+
+               ui::Widget split = create_split_views( camera, yz, xy, xz );
+
+               ui::Widget vsplit = ui::VPaned(ui::New);
+               vsplit.show();
+
+               // textures
+               ui::Widget texture_window = create_framed_widget( TextureBrowser_constructWindow( window ) );
+
+               // console
+               ui::Widget console_window = create_framed_widget( Console_constructWindow( window ) );
+
+               gtk_paned_add1( GTK_PANED( hsplit ), split );
+               gtk_paned_add2( GTK_PANED( hsplit ), vsplit );
+
+               gtk_paned_add1( GTK_PANED( vsplit ), texture_window  );
+               gtk_paned_add2( GTK_PANED( vsplit ), console_window  );
+
+               hsplit.connect( "size_allocate", G_CALLBACK( hpaned_allocate ), &g_single_hpaned );
+               hsplit.connect( "notify::position", G_CALLBACK( paned_position ), &g_single_hpaned );
+
+               vsplit.connect( "size_allocate", G_CALLBACK( vpaned_allocate ), &g_single_vpaned );
+               vsplit.connect( "notify::position", G_CALLBACK( paned_position ), &g_single_vpaned );
+       }
 
        EntityList_constructWindow( window );
        PreferencesDialog_constructWindow( window );
@@ -3384,7 +3488,7 @@ void GlobalGL_sharedContextDestroyed(){
 
 void Layout_constructPreferences( PreferencesPage& page ){
        {
-               const char* layouts[] = { "window1.png", "window2.png", "window3.png", "window4.png" };
+               const char* layouts[] = { "window1.png", "window2.png", "window3.png", "window4.png", "window5.png" };
                page.appendRadioIcons(
                        "Window Layout",
                        STRING_ARRAY_RANGE( layouts ),
@@ -3405,6 +3509,10 @@ void Layout_constructPreferences( PreferencesPage& page ){
                "", "Plugin Toolbar",
                make_property( g_Layout_enablePluginToolbar )
                );
+       page.appendCheckBox(
+               "", "Filter Toolbar",
+               make_property( g_Layout_enableFilterToolbar )
+               );
 }
 
 void Layout_constructPage( PreferenceGroup& group ){
@@ -3416,9 +3524,9 @@ void Layout_registerPreferencesPage(){
        PreferencesDialog_addInterfacePage( makeCallbackF(Layout_constructPage) );
 }
 
-
 #include "preferencesystem.h"
 #include "stringio.h"
+#include "transformpath/transformpath.h"
 
 void MainFrame_Construct(){
        GlobalCommands_insert( "OpenManual", makeCallbackF(OpenHelpURL), Accelerator( GDK_KEY_F1 ) );
@@ -3442,9 +3550,13 @@ void MainFrame_Construct(){
        GlobalCommands_insert( "PasteToCamera", makeCallbackF(PasteToCamera), Accelerator( 'V', (GdkModifierType)GDK_MOD1_MASK ) );
        GlobalCommands_insert( "CloneSelection", makeCallbackF(Selection_Clone), Accelerator( GDK_KEY_space ) );
        GlobalCommands_insert( "CloneSelectionAndMakeUnique", makeCallbackF(Selection_Clone_MakeUnique), Accelerator( GDK_KEY_space, (GdkModifierType)GDK_SHIFT_MASK ) );
-       GlobalCommands_insert( "DeleteSelection", makeCallbackF(deleteSelection), Accelerator( GDK_KEY_BackSpace ) );
+//     GlobalCommands_insert( "DeleteSelection", makeCallbackF(deleteSelection), Accelerator( GDK_KEY_BackSpace ) );
+       GlobalCommands_insert( "DeleteSelection2", makeCallbackF(deleteSelection), Accelerator( GDK_KEY_BackSpace ) );
+       GlobalCommands_insert( "DeleteSelection", makeCallbackF(deleteSelection), Accelerator( 'Z' ) );
        GlobalCommands_insert( "ParentSelection", makeCallbackF(Scene_parentSelected) );
-       GlobalCommands_insert( "UnSelectSelection", makeCallbackF(Selection_Deselect), Accelerator( GDK_KEY_Escape ) );
+//     GlobalCommands_insert( "UnSelectSelection", makeCallbackF(Selection_Deselect), Accelerator( GDK_KEY_Escape ) );
+       GlobalCommands_insert( "UnSelectSelection2", makeCallbackF(Selection_Deselect), Accelerator( GDK_KEY_Escape ) );
+       GlobalCommands_insert( "UnSelectSelection", makeCallbackF(Selection_Deselect), Accelerator( 'C' ) );
        GlobalCommands_insert( "InvertSelection", makeCallbackF(Select_Invert), Accelerator( 'I' ) );
        GlobalCommands_insert( "SelectInside", makeCallbackF(Select_Inside) );
        GlobalCommands_insert( "SelectTouching", makeCallbackF(Select_Touching) );
@@ -3509,8 +3621,8 @@ 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( "CSGMakeHollow", makeCallbackF(CSG_MakeHollow) );
-       GlobalCommands_insert( "CSGMakeRoom", makeCallbackF(CSG_MakeRoom) );
+       GlobalCommands_insert( "CSGHollow", makeCallbackF(CSG_MakeHollow) );
+       GlobalCommands_insert( "CSGRoom", makeCallbackF(CSG_MakeRoom) );
 
        Grid_registerCommands();
 
@@ -3546,6 +3658,7 @@ void MainFrame_Construct(){
        GlobalPreferenceSystem().registerPreference( "DetachableMenus", make_property_string( g_Layout_enableDetachableMenus.m_latched ) );
        GlobalPreferenceSystem().registerPreference( "PatchToolBar", make_property_string( g_Layout_enablePatchToolbar.m_latched ) );
        GlobalPreferenceSystem().registerPreference( "PluginToolBar", make_property_string( g_Layout_enablePluginToolbar.m_latched ) );
+       GlobalPreferenceSystem().registerPreference( "FilterToolBar", make_property_string( g_Layout_enableFilterToolbar.m_latched ) );
        GlobalPreferenceSystem().registerPreference( "QE4StyleWindows", make_property_string( g_Layout_viewStyle.m_latched ) );
        GlobalPreferenceSystem().registerPreference( "XYHeight", make_property_string( g_layout_globals.nXYHeight ) );
        GlobalPreferenceSystem().registerPreference( "XYWidth", make_property_string( g_layout_globals.nXYWidth ) );
@@ -3563,7 +3676,10 @@ void MainFrame_Construct(){
        GlobalPreferenceSystem().registerPreference( "YZWnd", make_property<WindowPositionTracker_String>(g_posYZWnd) );
        GlobalPreferenceSystem().registerPreference( "XZWnd", make_property<WindowPositionTracker_String>(g_posXZWnd) );
 
+       GlobalPreferenceSystem().registerPreference( "EnginePath", make_property_string( g_strEnginePath ) );
+       if ( g_strEnginePath.empty() )
        {
+               g_strEnginePath_was_empty_1st_start = true;
                const char* ENGINEPATH_ATTRIBUTE =
 #if GDEF_OS_WINDOWS
                        "enginepath_win32"
@@ -3575,12 +3691,13 @@ void MainFrame_Construct(){
 #error "unknown platform"
 #endif
                ;
+
                StringOutputStream path( 256 );
                path << DirectoryCleaned( g_pGameDescription->getRequiredKeyValue( ENGINEPATH_ATTRIBUTE ) );
-               g_strEnginePath = path.c_str();
-       }
 
-       GlobalPreferenceSystem().registerPreference( "EnginePath", make_property_string( g_strEnginePath ) );
+               g_strEnginePath = transformPath( path.c_str() ).c_str();
+               GlobalPreferenceSystem().registerPreference( "EnginePath", make_property_string( g_strEnginePath ) );
+       }
 
        GlobalPreferenceSystem().registerPreference( "DisableEnginePath", make_property_string( g_disableEnginePath ) );
        GlobalPreferenceSystem().registerPreference( "DisableHomePath", make_property_string( g_disableHomePath ) );
@@ -3594,6 +3711,7 @@ void MainFrame_Construct(){
        g_Layout_enableDetachableMenus.useLatched();
        g_Layout_enablePatchToolbar.useLatched();
        g_Layout_enablePluginToolbar.useLatched();
+       g_Layout_enableFilterToolbar.useLatched();
 
        Layout_registerPreferencesPage();
        Paths_registerPreferencesPage();