NAME
Prima::IntUtils - internal functions
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.
AUTHOR
Dmitry Karasik, <dmitry@karasik.eu.org>.
SEE ALSO
Prima, Prima::Widget, Prima::InputLine, Prima::Lists, Prima::Edit,
Prima::Outlines, Prima::ScrollBar.