View Layout Arrangement
Terminal.Gui provides a feature of Layout known as Arrangement, which controls how the user can use the mouse and keyboard to arrange views and enables either Tiled or Overlapped layouts. Arrangement is a sub-topic of Layout.
Arrangement - Describes the feature of Layout which controls how the user can use the mouse and keyboard to arrange views and enables either Tiled or Overlapped layouts.
Arrange Mode - When a user presses
Ctrl+F5
(configurable via the @Terminal.Gui.Application.ArrangeKey) the application goes into Arrange Mode. In this mode, indicators are displayed on an arrangeable view indicating which aspect of the View can be arranged. If Movable, a◊
will be displayed in the top-left corner of the Border. If Resizable , pressingTab
(orShift+Tab
) will cycle to an an indictor in the bottom-right corner of the Border. The up/down/left/right cursor keys will act appropriately.Esc
,Ctrl+F5
or clicking outside of the Border will exit Arrange Mode.Modal - A modal view is one that is run as an "application" via Run(Func<Exception, bool>?, ConsoleDriver?) where
Modal == true
.Dialog
,Messagebox
, andWizard
are the prototypical examples. When run this way, there IS az-order
but it is highly-constrained: the modal view has a z-order of 1 and everything else is at 0.Movable - Describes a View that can be moved by the user using the keyboard or mouse. Movable is enabled on a per-View basis by setting the Movable flag on Arrangement. Dragging on the top Border of a View will move such a view. Pressing
Ctrl+F5
will activate Arrange Mode letting the user move the view with the up/down/left/right cursor keys.Overlapped - A form of layout where SubViews of a View are visually arranged such that their Frames overlap. In Overlap view arrangements there is a Z-axis (Z-order) in addition to the X and Y dimension. The Z-order indicates which Views are shown above other views. Overlapped is enabled on a per-View basis by setting the Overlapped flag on Arrangement.
Sizable - Describes a View that can be sized by the user using the keyboard or mouse. Sizable is enabled on a per-View basis by setting the Resizable flag on Arrangement. Dragging on the left, right, or bottom Border of a View will size that side of such a view. Pressing
Ctrl+F5
will activate Arrange Mode letting the user size the view with the up/down/left/right cursor keys.Tiled - A form of layout where SubViews of a View are visually arranged such that their Frames do not typically overlap. With Tiled views, there is no 'z-order` to the Subviews of a View. In most use-cases, subviews do not overlap with each other (the exception being when it's done intentionally to create some visual effect). As a result, the default layout for most TUI apps is "tiled", and by default Arrangement is set to Fixed.
Runnable - Today, Overlapped and Runnable are intrinsically linked. A runnable view is one where
Application.Run(Toplevel)
is called. Each Runnable view where (Modal == false
) has it's ownRunState
and is, effectively, a self-contained "application".Application.Run()
non-preemptively dispatches events (screen, keyboard, mouse , Timers, and Idle handlers) to the associatedToplevel
. It is possible for such aToplevel
to create a thread and callApplication.Run(someotherToplevel)
on that thread, enabling pre-emptive user-interface multitasking (BackgroundWorkerCollection
does this).