Table of Contents

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 , pressing Tab (or Shift+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, and Wizard are the prototypical examples. When run this way, there IS a z-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 own RunState and is, effectively, a self-contained "application". Application.Run() non-preemptively dispatches events (screen, keyboard, mouse , Timers, and Idle handlers) to the associated Toplevel. It is possible for such a Toplevel to create a thread and call Application.Run(someotherToplevel) on that thread, enabling pre-emptive user-interface multitasking (BackgroundWorkerCollection does this).