summaryrefslogtreecommitdiff
path: root/fluid/documentation/src/page_edit_window.dox
diff options
context:
space:
mode:
Diffstat (limited to 'fluid/documentation/src/page_edit_window.dox')
-rw-r--r--fluid/documentation/src/page_edit_window.dox179
1 files changed, 179 insertions, 0 deletions
diff --git a/fluid/documentation/src/page_edit_window.dox b/fluid/documentation/src/page_edit_window.dox
new file mode 100644
index 000000000..7cbbf5de5
--- /dev/null
+++ b/fluid/documentation/src/page_edit_window.dox
@@ -0,0 +1,179 @@
+/**
+
+ \page page_edit_window Layout Editor Window
+
+ \tableofcontents
+
+ \image html edit_window.png "Layout Editor Window"
+ \image latex edit_window.png "Layout Editor Window" width=7cm
+
+ The Layout Editor window is used to interactively add groups and widgets, and
+ resize and align them. The editor window already looks very much like the
+ final product that will be built by the FLUID generated C++ source code.
+
+ To create a user interface, first add a function to the project tree by either
+ clicking the Function icon in the widget bin, or by selecting __New* > Code >
+ Function/Method__ from the main menu.
+
+ Now just drag the Window icon from the widget bin onto the desktop. FLUID
+ will generate code that instantiates this window when the function is called.
+ The return value of the function is a pointer to that window, unless changed
+ in the Function Panel. Widgets can be added to the window by dragging them from
+ the widget bin. If a widget is dropped on a group, it will automatically
+ become a child of that group.
+
+ <!-- ---------------------------------------------------------------------- -->
+ \section edit_selection Selecting and Moving Widgets
+
+ To move or resize a widget, it must be selected first by clicking on it.
+ Multiple widgets can be selected by holding down the Shift key when clicking
+ on them, or by dragging a selection box around widgets. Widgets can also be
+ selected in the widget browser the main window. Shift-click will select a
+ range of widgets, Ctrl-click will add widgets to the selection.
+
+ \image html edit_select_multiple.png
+ \image latex edit_select_multiple.png "Select Multiple Widgets" width=5cm
+
+ Menu items are selected by clicking on the menu button and selecting it from
+ the popup menu. Multiple menu items can only be selected in the widget browser
+ in the main application window.
+
+ Once selected, widgets can be moved by clicking and dragging the center
+ of the selection box. The outer edges allow resizing in one direction, and
+ dragging the corners resizes widgets horizontally and vertically.
+
+ Widgets can also be repositioned with the arrow keys. Without a shift key,
+ the selection moves by a single pixel. With the Meta key held down, they
+ move by the amount indicated in the *Gap* field in the *Widget* section of
+ the *Layout* setting panel.
+
+ Holding down the Shift key resizes a selected widget by moving the bottom
+ right corner of the widget. Holding Shift and Meta while pressing arrow keys
+ resizes by the amount in the *Widget* *Gap* layout setting.
+
+ Children of groups that reposition their contained widgets may behave
+ differently. Pressing the arrow keys on children of `Fl_Grid` will move
+ the widget from grid cell to grid cell instead. Resizing a child of `Fl_Flex`
+ will also mark the child size as `fixed`.
+
+ The tab and shift+tab keys "navigate" the selection. Tab or shift+tab move to
+ the next or previous widgets in the hierarchy. If the navigation does not seem
+ to work you probably need to "Sort" the widgets. This is important if you have
+ input fields, as FLTK uses the same rules when using tab keys
+ to move between input fields.
+
+ <!-- ---------------------------------------------------------------------- -->
+ \section edit_layout Layout Helpers
+
+ \image html edit_overlap.png
+ \image latex edit_overlap.png "Overlapping Widgets" width=5cm
+
+ In FLTK, the behavior of overlapping children of a group is undefined. If
+ enabled in the settings, FLUID will show overlapping widgets in a group
+ with a green hash pattern.
+
+ \image html edit_outside.png
+ \image latex edit_outside.png "Out Of Bounds" width=5cm
+
+ The behavior of widgets that reach outside the bounds of their parent group
+ is also undefined. They may be visible, but confuse the user when they don't
+ react to mouse clicks or don't redraw as expected. Outside widgets are marked
+ with a red hash pattern.
+
+ Note that `Fl_Tile` requires that all children exactly fill the area of the
+ tile group to function properly. The hash patterns are great helpers to align
+ children correctly.
+
+ <!-- ---------------------------------------------------------------------- -->
+ \section edit_snap Layout Alignment
+
+ FLUID layouts are a handful of rules that help creating a clean and consistent
+ user interface. When repositioning widgets, the mouse pointer snaps to the
+ closest position based on those rules. A guide line is drawn for the rule that was
+ applied. Guides and snaps can be disabled with `Ctrl-Shift-G` or via the
+ *Edit* > *Hide Guides* menu.
+
+ \image html edit_snap_group.png
+ \image latex edit_snap_group.png "Snap To Group" width=5cm
+
+ If a horizontal or vertical outline snaps to the group, the
+ border of that group will highlight. If the outline snaps to the margin
+ of the parent window or group, an additional arrow is drawn.
+
+ Children of `Fl_Tabs` use the top and bottom margin from the *Tabs*
+ section. If all children use this rule, the margin height will also be the
+ height of all tabs.
+
+ \image html edit_snap_sibling.png
+ \image latex edit_snap_sibling.png "Snap To Sibling" width=5cm
+
+ The selection can also snap to the outline of other widgets in the same group,
+ or to the outline plus the Widget Gap. The outline that triggers the snap
+ action is highlighted.
+
+ Note that only the first snap guide found is drawn for horizontal and vertical
+ movement. Multiple rules may apply, but are not highlighted.
+
+ \image html edit_snap_size.png
+ \image latex edit_snap_size.png "Snap To Size" width=7cm
+
+ Widget size rules define a minimum size and an increment value that may
+ be applied multiple times to the size. For example, with a minimum width of 25
+ and an increment of 10, the widget will snap horizontally to 25, 35, 45,
+ 55, etc. .
+
+ \image html edit_snap_grid.png
+ \image latex edit_snap_grid.png "Snap To Grid" width=5cm
+
+ The grid rule is the easiest to explain. All corners of a selection snap to
+ a fixed grid. If the selected widgets are children of a window, they will snap
+ to the window grid. If they are in a group, they snap to the group grid.
+
+ <!-- ---------------------------------------------------------------------- -->
+ \section edit_resize Live Resize
+
+ \image html edit_select_group.png
+ \image latex edit_select_group.png "Selected Group" width=9cm
+
+ The Resizable system within FLTK is smart, but not always obvious. When
+ constructing a sophisticated GUI, it is helpful to organize widgets into
+ multiple levels of nested groups. Sometimes, incorporating an invisible
+ resizable box can improve the behavior of a group. FLUID offers a Live Resize
+ feature, allowing designers to experiment with resizing at each level within
+ the hierarchy independently.
+
+ To test the resizing behavior of a group, begin by selecting it:
+
+ \image html edit_live_resize.png
+ \image latex edit_live_resize.png "Live Resize" width=7cm
+
+ Click on *Live Resize* in the widget panel. FLUID will generate a new window
+ with all the resizing attributes inherited from the original design. This
+ enables the designer to thoroughly test the behavior and limitations,
+ making adjustments until they are satisfied. This streamlined process makes
+ it significantly easier to address resizing behavior at a higher level,
+ particularly once the lower levels are behaving as intended.
+
+ In the example above, the radio buttons are not fixed to the left side of
+ the group and the text snippet "of the bed" does not stay aligned
+ to "right side". To fix this, a thin hidden box could be added to the right
+ edge of the group that holds the radio button which is then marked `resizable`.
+
+ <!-- ---------------------------------------------------------------------- -->
+ \section edit_limits Limitations
+
+ Almost all FLTK widgets can be edited with FLUID. Notable exceptions include
+
+ - FLUID does not support an `Fl_Window` inside another `Fl_Window`
+ - widgets inside `Fl_Scroll` can not be created in the hidden areas of the
+ scrollable rectangle. It is recommended to organize the children in
+ a separate Widget Class that is derived from `Fl_Scroll` and then inserted
+ as a single custom widget.
+ - children of `Fl_Pack` are not automatically reorganized to fit the packing
+ group. Again, a Widget Class is recommended here.
+ - if children of `Fl_Grid` are again some kind of group, their internal layout
+ may not follow changes in the grid widgets. It's best to complete the grid
+ first, then add children to the grid cells, size them correctly, and
+ then finally lay out the grid cell children.
+
+*/