mirror of
https://github.com/Facepunch/sbox-public.git
synced 2026-08-01 16:28:36 -04:00
* Add Qt-Advanced-Docking-System 5.0 * Bind new CDockManager, dock areas * Use Valve's CSS & images for ADS as a baseline, load stuff from disk instead of embedded in c++ * dockmanager.css in tool styles, auto loads and hotloads * Rewrite DockManager * delete toolwindowmanager * Delete the 50 different ways to create/add/register a dock, you just add a dock, that's all u need * More dockmanager rejigging * restore all editor dock layouts and asset browser on the new docking system * remove last toolwindowmanager remnants, add ADS to third party legal notice * build classic default layout in code for main editor reset/first-run, add relative area AddDock overload * relativeTo placement API, restore correct default layouts for all tool windows, register [Dock] types closed instead of eagerly docking * styling pass * disable ADS built-in stylesheet load, styling comes from editor stylesheet * lock picker browser tabs against closing/dragging, make ActionGraph reset layout actually reposition docks * add DockManager.OpenDock, dedupe layout code in EditorMainWindow/ActionGraph * CloseDockWidget internal * add "Close Tabs to the Left/Right" to dock tab context menu * expose dock MinimumSizeFromContent * only offer close left/right tab options when open tabs exist on that side * move "Close Tabs to the Left/Right" out of the ADS lib into a components factory * guard dock tab context menu against pinned docks with no dock area * fix crash when pinned tab is destroyed before delayed auto hide timer fires * recreate scene widget swapchains when Qt recreates their native window on dock reparent * wrap all sbox changes to the dock lib in #ifdef SBOX * save a plain window rect as fallback for when Qt rejects saved geometry on mixed-DPI monitors * expose DockWidget Float/IsFloating * always restore window geometry from a plain saved rect instead of Qt's DPI fragile geometry blob * route all window centering through one screen aware helper that handles mixed DPI monitors * restore window geometry onto the screen it was saved on * don't close live docks when a dock type unregisters, hotload substitutes them in place --------- Co-authored-by: Layla <1667289+aylaylay@users.noreply.github.com>
92 lines
2.2 KiB
C#
92 lines
2.2 KiB
C#
using Native;
|
|
using System;
|
|
using System.Diagnostics;
|
|
|
|
namespace Editor.MapEditor;
|
|
|
|
/// <summary>
|
|
/// This is our CQHammerMainWnd
|
|
/// </summary>
|
|
public partial class HammerMainWindow : DockWindow
|
|
{
|
|
Native.CQHammerMainWnd _nativeHammerWindow;
|
|
internal HammerMainWindow( Native.CQHammerMainWnd ptr ) : base( ptr )
|
|
{
|
|
_nativeHammerWindow = ptr;
|
|
Hammer.Window = this;
|
|
}
|
|
|
|
internal void WindowInit()
|
|
{
|
|
Size = new( 1580, 900 );
|
|
|
|
DockAttribute.RegisterWindow( "Hammer", this );
|
|
|
|
// All dock widgets
|
|
_nativeHammerWindow.CreateEverything();
|
|
|
|
// Main menu bar and populate it, then do our managed menu
|
|
_nativeHammerWindow.CreateMenus();
|
|
MenuBar.RegisterNamed( "Hammer", MenuBar );
|
|
|
|
// Shows some tool bars... ?
|
|
_nativeHammerWindow.SetupDefaultLayout();
|
|
|
|
// Saves & loads layout and shit
|
|
StateCookie = "SboxHammer";
|
|
|
|
// Set the focus back to the main window so it isn't on some random widget which will eat key bindings.
|
|
Focus();
|
|
|
|
SetWindowIcon( "hammer/appicon.png" );
|
|
}
|
|
|
|
internal void CreateDynamicViewMenu( QMenu nativeMenu )
|
|
{
|
|
CreateDynamicViewMenu( new Menu( nativeMenu ) );
|
|
}
|
|
|
|
/// <summary>
|
|
/// Lets Hammer register its dock widgets with our DockManager
|
|
/// </summary>
|
|
internal void AddNativeDock( string name, string icon, IntPtr sibling, IntPtr window, DockArea dockArea = DockArea.Left )
|
|
{
|
|
if ( window == default ) return;
|
|
|
|
var widget = new Widget( window ) { WindowTitle = name, Name = name };
|
|
widget.SetWindowIcon( icon );
|
|
|
|
var relativeTo = sibling != default ? DockManager.FindDockWidget( new Widget( sibling ) ) : null;
|
|
DockManager.AddDock( name, icon, widget, dockArea, relativeTo );
|
|
}
|
|
|
|
internal void ToggleAssetBrowser()
|
|
{
|
|
DockManager.SetDockState( "Asset Browser", !DockManager.IsDockOpen( "Asset Browser" ) );
|
|
}
|
|
|
|
internal void ToggleFullscreenLayout( bool fullscreen )
|
|
{
|
|
if ( fullscreen )
|
|
{
|
|
SaveToStateCookie();
|
|
|
|
foreach ( var dock in DockManager.DockTypes )
|
|
{
|
|
if ( dock.Title == "Map View" ) continue;
|
|
DockManager.SetDockState( dock.Title, false );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
RestoreFromStateCookie();
|
|
}
|
|
}
|
|
|
|
internal static uint InitHammerMainWindow( Native.CQHammerMainWnd ptr )
|
|
{
|
|
var win = new HammerMainWindow( ptr );
|
|
return InteropSystem.GetAddress( win, true );
|
|
}
|
|
}
|