Proposal: Flexible moving/docking of panels within a window & Drag to new Window.
Proposal: Flexible Docking of panels within a Window & Drag to new Window.
Summary
The WinUI API should contain a method for creating something akin to an ImGui Dockspace, AvalonDock or dockpanelsuite. Enabling users to open, close and move panels as they see fit. Feature request as suggested in #4784 I have tried to include more details in the rationale and scope than in #668 which hasn't had any significant update in over a year.
Rationale
- Users of any piece of software rarely use all the features it provides, especially pieces of software that are used as tools, e.g. Game Engines/IDEs. In fact what often happens is that you will have multiple people each working with a different aspect of the same piece of software. Enabling those users to customise the layout of the UI to be able place the features/tools they use where they need them while hiding the ones they don't is a great step to making a piece of software usable for everyone.
- It enables an easy multi-window/monitor work flow. Multiple top level windows is listed as a feature slated for a future update and the ability to drag a panel outside of the window it is docked in to create a new window that can be put side by side on a second monitor, E.g. Unreal Engine, Visual Studio, etc. Again this is a somewhat expected feature in industry software that enables users to expand their workspace beyond one monitor in a natural manner and is a huge increase for productivity.
- WinUI is being put forward as the best way to make Windows GUI applications going forward. But for it to be the best GUI framework it has to support all the features that the people who are going to use it needs.
- The final rationale is that so many other pieces of software do it. It's basically an industry standard for so many pieces of software that it's quite often exptected to be able to drag panels around, to new windows, etc.
Scope
| Capability | Priority |
|---|---|
| This proposal will allow developers to create a dockable area within a window | Must |
| This proposal will allow developers to label panels as dockable, enabling said panels to be docked and moved around the dockspace | Must |
| This proposal will allow developers to save a users layout and restore it when closing and opening the application | Must |
| This proposal will allow developers to move/dock dockable panels programatically | Must |
| This proposal will allow end users to 'snap' panels to areas of the dockspace (vertical/horizontal half split, centre, etc) | Must |
| This proposal will allow end users to move and dock dockable panels within the dockspace as they see fit | Must |
| This proposal will allow end users to drag dockable panels outside the window to open it in a new top level window | Should |
Important Notes
Most of this API feature request is from the perspective of someone who is trained in 3D graphics/game development and now works in the tech industry where basically all the tools and software used has some level of dockable/movable panels within it's UI. For the video game industry Unreal has support for dragging a tab out into it's own window which enables the user to have say the viewport full screened on one monitor while making changes in the UI on a second monitor and it enables them to see the changes in real time as they work. Within the tech industry we might be using software that has large data representations that we need to parse and explain and the ability to filter that data down to just the information we need by closing/moving all the parts we don't need massively improves our workflow in general.
If WinUI is to be a serious contender for desktop development, this is necessary. Developers should not have to spend time reinventing the wheel in another framework. This goes for layout as a whole -- we need more options. I appreciate what the WinUI team is doing, but it's hard to justify switching to WinUI when the flexibility just isn't there.