DESCRIPTION
The module provides packages, containing common functionality for some standard classes. The packages are designed as a code containers, not as widget classes, and are to be used as secondary ascendants in the widget inheritance declaration.Prima::MouseScroller
Implements routines for emulation of auto repeating mouse events. A code inside "MouseMove" callback can be implemented by the following scheme:
if ( mouse_pointer_inside_the_scrollable_area) { $self-> scroll_timer_stop; } else { $self-> scroll_timer_start unless $self-> scroll_timer_active; return unless $self-> scroll_timer_semaphore; $self-> scroll_timer_semaphore( 0); }
The class uses a semaphore "{mouseTransaction}", which should be set to non-zero if a widget is in mouse capture state, and set to zero or "undef" otherwise.
The class starts an internal timer, which sets a semaphore and calls "MouseMove" notification when triggered. The timer is assigned the timeouts, returned by "Prima::Application::get_scroll_rate" ( see ``get_scroll_rate'' in Prima::Application ).
Methods
- scroll_timer_active
- Returns a boolean value indicating if the internal timer is started.
- scroll_timer_semaphore [ VALUE ]
- A semaphore, set to 1 when the internal timer was triggered. It is advisable to check the semaphore state to discern a timer-generated event from the real mouse movement. If VALUE is specified, it is assigned to the semaphore.
- scroll_timer_start
- Starts the internal timer.
- scroll_timer_stop
- Stops the internal timer.
Prima::IntIndents
Provides the common functionality for the widgets that delegate part of their surface to the border elements. A list box can be of an example, where its scroll bars and 3-d borders are such elements.Properties
- indents ARRAY
-
Contains four integers, specifying the breadth of decoration elements for
each side. The first integer is width of the left element, the second - height
of the lower element, the third - width of the right element, the fourth - height
of the upper element.
The property can accept and return the array either as a four scalars, or as an anonymous array of four scalars.
Methods
- get_active_area [ TYPE = 0, WIDTH, HEIGHT ]
-
Calculates and returns the extension of the area without the border elements,
or the active area.
The extension are related to the current size of a widget, however, can be
overridden by specifying WIDTH and HEIGHT. TYPE is an integer, indicating
the type of calculation:
-
- TYPE = 0
- Returns four integers, defining the area in the inclusive-exclusive coordinates.
- TYPE = 1
- Returns four integers, defining the area in the inclusive-inclusive coordinates.
- TYPE = 2
- Returns two integers, the size of the area.
-
Prima::GroupScroller
The class is used for widgets that contain optional scroll bars, and provides means for their maintenance. The class is the descendant of Prima::IntIndents, and adjusts the indents property when scrollbars are shown or hidden, or borderWidth is changed.The class does not provide range selection for the scrollbars; the descentant classes must implement that.
The descendant classes must follow the guidelines:
- A class must provide "borderWidth", "hScroll", and "vScroll" property keys in profile_default() . A class may provide "autoHScroll" and "autoVScroll" property keys in profile_default() .
-
A class' init() method must set "{borderWidth}", "{hScroll}", and "{vScroll}"
variables to 0 before the initialization, call "setup_indents" method,
and then assign the properties from the object profile.
If a class provides "autoHScroll" and "autoVScroll" properties, these must be set to 0 before the initialization.
- If a class needs to overload one of "borderWidth", "hScroll", "vScroll", "autoHScroll", and "autoVScroll" properties, it is mandatory to call the inherited properties.
- A class must implement the scroll bar notification callbacks: "HScroll_Change" and "VScroll_Change".
-
A class must not use the reserved variable names, which are:
{borderWidth} - internal borderWidth storage {hScroll} - internal hScroll value storage {vScroll} - internal vScroll value storage {hScrollBar} - pointer to the horizontal scroll bar {vScrollBar} - pointer to the vertical scroll bar {bone} - rectangular widget between the scrollbars {autoHScroll} - internal autoHScroll value storage {autoVScroll} - internal autoVScroll value storage
The reserved method names:
set_h_scroll set_v_scroll insert_bone setup_indents reset_indents borderWidth autoHScroll autoVScroll hScroll vScroll
The reserved widget names:
HScroll VScroll Bone
Properties
- autoHScroll BOOLEAN
- Selects if the horizontal scrollbar is to be shown and hidden dynamically, depending on the widget layout.
- autoVScroll BOOLEAN
- Selects if the vertical scrollbar is to be shown and hidden dynamically, depending on the widget layout.
- borderWidth INTEGER
-
Width of 3d-shade border around the widget.
Recommended default value: 2
- hScroll BOOLEAN
- Selects if the horizontal scrollbar is visible. If it is, "{hScrollBar}" points to it.
- vScroll BOOLEAN
- Selects if the vertical scrollbar is visible. If it is, "{vScrollBar}" points to it.
Properties
- setup_indents
-
The method is never called directly; it should be called whenever widget
layout is changed so that indents are affected. The method is a request
to recalculate indents, depending on the widget layout.
The method is not reentrant; to receive this callback and update the widget layout, that in turn can result in more "setup_indents" calls, overload "reset_indents" .
- reset_indents
- Called after "setup_indents" is called and internal widget layout is updated, to give a chance to follow-up the layout changes.