Editor/HammerTexBrowserEditorMenu.cs

An editor menu command that opens the Hammer texture browser dock. It finds or reuses an existing HammerTextureBrowser dock, otherwise creates one and inserts it next to the Asset Browser in the dock manager.

using Editor;

public static class HammerTexBrowserEditorMenu
{
	[Menu( "Editor", "Hammer Texture Browser/Texture Browser" )]
	public static void OpenTextureBrowser()
	{
		var dockManager = GetTargetDockManager();

		var existing = dockManager.GetDockWidget( "OG Texture Browser" ) as HammerTextureBrowser.HammerTextureBrowserDock
			?? dockManager.GetDockWidget( "Texture Browser" ) as HammerTextureBrowser.HammerTextureBrowserDock;

		if ( existing is not null && existing.IsValid )
		{
			dockManager.RaiseDock( existing );
			return;
		}

		var browser = new HammerTextureBrowser.HammerTextureBrowserDock( dockManager );
		var assetBrowser = dockManager.GetDockWidget( "Asset Browser" );
		dockManager.AddDock( assetBrowser, browser, DockArea.Inside );
		dockManager.RaiseDock( browser );
	}

	private static DockManager GetTargetDockManager()
	{
		if ( Application.FocusWidget?.GetWindow() is DockWindow dockWindow )
		{
			var assetBrowser = dockWindow.DockManager.GetDockWidget( "Asset Browser" );
			if ( assetBrowser is not null && assetBrowser.IsValid )
				return dockWindow.DockManager;
		}

		return EditorWindow.DockManager;
	}
}