Prima::DockManager
advanced dockable widgets
- Provided by: libprima-perl (Version: 1.28-1.4)
- Source: prima
- Report a bug
advanced dockable widgets
"Prima::DockManager" contains classes that implement additional functionality within the dockable widgets paradigm.
The module introduces two new dockable widget classes: "Prima::DockManager::Panelbar", a general purpose dockable container for variable-sized widgets; and "Prima::DockManager::Toolbar", a dockable container for fixed-size command widgets, mostly push buttons. The command widgets, nested in a toolbar, can also be docked.
"Prima::DockManager" class is an application-oriented class in a way that ( mostly ) the only instance of it is needed in the program. It is derived from "Prima::Component" and therefore is never visualized. The class instance is stored in "instance" property of all module classes to serve as a docking hierarchy root. Through the document, instance term is referred to "Prima::DockManager" class instance.
The module by itself is not enough to make a docking-aware application work effectively. The reader is urged to look at examples/dock.pl example code, which demonstrates the usage and capabilities of the module.
A toolbar widget class. The toolbar has a dual nature; it can dock and accept docking widgets simultaneously. In the scope of "Prima::DockManager", the toolbar hosts command widget, mostly push buttons.
The toolbar consists of two widgets. The external dockable widget is implemented in "Prima::DockManager::Toolbar", and the internal dock in "Prima::DockManager::ToolbarDocker" classes.
See also "Prima::DockManager::ToolbarDocker::parentDocker".
Internal class, implements a dock widget for command widgets, while serves as a client in a dockable toolbar, which is a "Prima::LinearDockerShuttle" descendant. When its size is changed due an eventual rearrange of its docked widgets, also resizes the toolbar.
See also "Prima::DockManager::Toolbar::childDocker".
The class is derived from "Prima::LinearDockerShuttle", and is different only in that "instance" property is introduced, and the external shuttle can be resized interactively.
The class is to be used as a simple host to sizeable widgets. The user can dispose of the panel bar by clicking close button on the external shuttle.
A binder class, contains set of functions that groups toolbars, panels, and command widgets together under the docking hierarchy.
The manager servers several purposes. First, it is a command state holder: the command widgets, mostly buttons, usually are in enabled or disabled state in different life stages of a program. The manager maintains the enabled/disabled state by assigning each command an unique scalar value ( farther and in the code referred as CLSID ). The toolbars can be created with set of command widgets, referred via these CLSIDs. The same is valid for the panels - although they do not host command widgets, the widgets that they do host can also be created indirectly via CLSID identifier. In addition to CLSID, the commands can be grouped by sections. Both CLSID and group descriptor scalars are defined by the programmer.
Second, "create_manager" method presents a standard configuration widget, that allows rearranging of normally non-dockable command widgets, by presenting a full set of available commands to the user as icons. Dragging the icons to toolbars, dock widgets or merely outside the configuration widget automatically creates the corresponding command widget. The notable moment here is that the command widgets are not required to know anything about dragging and docking; any "Prima::Widget" descendant can be used as a command widget.
Third, it helps maintaining the toolbars and panels visibility when the main window is hidden or restored. "windowState" method hides or shows the toolbars and panels effectively.
Fourth, it serves as a docking hierarchy root. All docking sessions begin from "Prima::DockManager" object, which although does not provide docking capabilities itself ( it is "Prima::Component" descendant ), redirects the docking requests to the lower-level dock widgets.
Fifth, it provides number of helper methods and notifications, and enforces use or "fingerprint" property by all dockable widgets. This property has default value of 0xFFFF ( defined in "Prima::Docks" ). The module contains the fingerprint "dmfp::XXX" constants with value greater than this, so the toolbars and panels are not docked to a dock widget with the default configuration. The base constant set is:
fdmp::Tools ( 0x0F000) - dock the command widgets
fdmp::Toolbar ( 0x10000) - dock the toolbars
fdmp::LaunchPad ( 0x20000) - allows widgets recycling
All this functionality is demonstrated in examples/dock.pl example.
Default value: 0
onActivate => sub { $dock_manager-> activate }
The icons, dragged from the notebook, behave as dockable widgets: they can be landed upon a toolbar, or any other dock widget, given it matches the "fingerprint" ( by default "dmfp::LaunchPad|dmfp::Toolbar|dmfp::Tools"). "dmfp::LaunchPad" constant allows the recycling; if a widget is dragged back onto the notebook, it is destroyed.
Returns two widgets, the listbox and the notebook.
PROFILE recognizes the following keys:
NB: The "dock" key here contains a reference to a desired dock widget. If "dock" set to "undef", the panel is created in the non-docked state.
Example:
$dock_manager-> create_panel( $CLSID,
dockerProfile => { dock => $main_window }},
profile => { backColor => cl::Green });
Default value is 1 if "name" options is set, 0 otherwise.
NB: The "dock" key here contains a reference to a desired dock widget. If "dock" set to "undef", the panel is created in the non-docked state.
The method is useful in program startup, when some panels have to be visible from the beginning.
The method recognizes the following PROFILES options:
The method is useful in program startup, when some panels have to be visible from the beginning.
To be used inside a callback code of a main window, that has the toolbars and panels attached to:
onWindowState => sub { $dock_manager-> windowState( $_[1] ) }
CLSID is the widget identifier.
The package simplifies creation of "Prima::SpeedButton" command widgets.
IMAGE is a path to a image file, loaded and stored in the registration hash. IMAGE provides an extended syntax for indicating a frame index, if the image file is multiframed: the frame index is appended to the path name with ":" character prefix.
CLSID scalar is not used; it is returned so the method result can directly be passed into "register_tool" method.
Returns two scalars: CLSID and the registration hash.
Example:
$dock_manager-> register_tool(
Prima::DockManager::S::SpeedButton::class( "myicon.gif:2",
q(CLSID::Logo), hint => 'Logo image' ));
Dmitry Karasik, <dmitry@karasik.eu.org>.
Prima, Prima::Widget, Prima::Docks, examples/dock.pl