1pod::Prima::Widget(3) User Contributed Perl Documentationpod::Prima::Widget(3)
2
3
4
6 Prima::Widget - window management
7
9 # create a widget
10 my $widget = Prima::Widget-> new(
11 size => [ 200, 200],
12 color => cl::Green,
13 visible => 0,
14 onPaint => sub {
15 my ($self,$canvas) = @_;
16 $canvas-> clear;
17 $canvas-> text_out( "Hello world!", 10, 10);
18 },
19 );
20
21 # manipulate the widget
22 $widget-> origin( 10, 10);
23 $widget-> show;
24
26 Prima::Widget is a descendant of Prima::Component, a class, especially
27 crafted to reflect and govern properties of a system-dependent window,
28 such as its position, hierarchy, outlook etc. Prima::Widget is mapped
29 into the screen space as a rectangular area, with distinct boundaries,
30 pointer and sometimes cursor, and a user-selectable input focus.
31
33 Prima::Widget class and its descendants are used widely throughout the
34 toolkit, and, indeed provide almost all its user interaction and input-
35 output. The notification system, explained in Prima::Object, is
36 employed in Prima::Widget heavily, providing the programmer with
37 unified access to the system-generated events, that occur when the user
38 moves windows, clicks the mouse, types the keyboard, etc. Descendants
39 of Prima::Widget use the internal, the direct method of overriding the
40 notifications, whereas end programs tend to use the toolkit widgets
41 equipped with anonymous subroutines ( see Prima::Object for the
42 details).
43
44 The class functionality is much more extensive comparing to the other
45 built-in classes, and therefore the explanations are grouped in several
46 topics.
47
49 The widget creation syntax is the same as for the other Prima objects:
50
51 Prima::Widget-> create(
52 name => 'Widget',
53 size => [ 20, 10],
54 onMouseClick => sub { print "click\n"; },
55 owner => $owner,
56 );
57
58 In the real life, a widget must be almost always explicitly told about
59 its owner. The owner object is either a Prima::Widget descendant, in
60 which case the widget is drawn inside its inferior, or the application
61 object, and in the latter case a widget becomes top-level. This is the
62 reason why the "insert" syntax is much more often used, as it is more
63 illustrative and is more convenient for creating several widgets in one
64 call ( see Prima::Object ).
65
66 $owner-> insert( 'Prima::Widget',
67 name => 'Widget',
68 size => [ 20, 10],
69 onMouseClick => sub { print "click\n"; },
70 );
71
72 These two examples produce identical results.
73
74 As a descendant of Prima::Component, Prima::Widget sends "Create"
75 notification when created ( more precisely, after its init stage is
76 finished. See Prima::Object for details). This notification is called
77 and processed within "create()" call. In addition, another notification
78 "Setup" is sent after the widget is created. This message is posted, so
79 it is called within "create()" but processed in the application event
80 loop. This means that the execution time of "Setup" is uncertain, as it
81 is with all posted messages; its delivery time is system-dependent, so
82 its use must be considered with care.
83
84 After a widget is created, it is usually asked to render its content,
85 provided that the widget is visible. This request is delivered by means
86 of "Paint" notification.
87
88 When the life time of a widget is over, its method "destroy()" is
89 called, often implicitly. If a widget gets destroyed because its owner
90 also does, it is guaranteed that the children widgets will be destroyed
91 first, and the owner afterwards. In such situation, widget can operate
92 with a limited functionality both on itself and its owners ( see
93 Prima::Object, Creation section ).
94
96 A widget can use two different ways for representing its graphic
97 content to the user. The first method is event-driven, when the "Paint"
98 notification arrives, notifying the widget that it must re-paint
99 itself. The second is the 'direct' method, when the widget generates
100 graphic output unconditionally.
101
102 Event-driven rendering
103 A notification responsible for widget repainting is "Paint". It
104 provides a single ( besides the widget itself ) parameter, an object,
105 where the drawing is performed. In an event-driven call, it is always
106 equals to the widget. However, if a custom mechanism should be used
107 that directly calls, for example,
108
109 $widget-> notify('Paint', $some_other_widget);
110
111 for whatever purpose, it is recommended ( not required, though ), to
112 use this parameter, not the widget itself for painting and drawing
113 calls.
114
115 The example of "Paint" callback is quite simple:
116
117 Prima::Widget-> create(
118 ...
119 onPaint => sub {
120 my ( $self, $canvas) = @_;
121 $canvas-> clear;
122 $canvas-> text_out("Clicked $self->{clicked} times", 10, 10);
123 },
124 onMouseClick => sub {
125 $_[0]-> {clicked}++;
126 $_[0]-> repaint;
127 },
128 );
129
130 The example uses several important features of the event-driven
131 mechanism. First, no "begin_paint()"/"end_paint()" brackets are used
132 within the callback. These are called implicitly. Second, when the
133 custom refresh of the widget's graphic content is needed, no code like
134 "notify(q(Paint))" is used - "repaint()" method is used instead. It
135 must be noted, that the actual execution of "Paint" callbacks might or
136 might not occur inside the "repaint()" call. This behavior is governed
137 by the "::syncPaint" property. "repaint()" marks the whole widget's
138 area to be refreshed, or invalidates the area. For the finer gradation
139 of the area that should be repainted, "invalidate_rect()" and
140 "validate_rect()" pair of functions is used. Thus,
141
142 $x-> repaint()
143
144 code is a mere alias to
145
146 $x-> invalidate_rect( 0, 0, $x-> size);
147
148 call. It must be realized, that the area, passed to "invalidate_rect()"
149 only in its ideal ( but a quite often ) execution case will be
150 pertained as a clipping rectangle when a widget executes its "Paint"
151 notification. The user and system interactions can result in
152 exposition of other parts of a widget ( like, moving windows over a
153 widget ), and the resulting clipping rectangle can be different from
154 the one that was passed to "invalidate_rect()". Moreover, the clipping
155 rectangle can become empty as the result of these influences, and the
156 notification will not be called at all.
157
158 Invalid rectangle is presented differently inside and outside the
159 drawing mode. The first, returned by "::clipRect", employs inclusive-
160 inclusive coordinates, whereas "invalidate_rect()", "validate_rect()"
161 and "get_invalid_rect()" - inclusive-exclusive coordinates. The ideal
162 case exemplifies the above said:
163
164 $x-> onPaint( sub {
165 my @c = $_[0]-> clipRect;
166 print "clip rect:@c\n";
167 });
168 $x-> invalidate_rect( 10, 10, 20, 20);
169 ...
170 clip rect: 10 10 19 19
171
172 As noted above, "::clipRect" property is set to the clipping rectangle
173 of the widget area that is needed to be refreshed, and an event handler
174 code can take advantage of this information, increasing the efficiency
175 of the painting procedure.
176
177 Further assignments of "::clipRect" property do not make possible over-
178 painting on the screen area that lies outside the original clipping
179 region. This is also valid for all paint operations, however since the
180 original clipping rectangle is the full area of a canvas, this rule is
181 implicit and unnecessary, because whatever large the clipping rectangle
182 is, drawing and painting cannot be performed outside the physical
183 boundaries of the canvas.
184
185 Direct rendering
186 The direct rendering, contrary to the event-driven, is initiated by the
187 program, not by the system. If a programmer wishes to paint over a
188 widget immediately, then "begin_paint()" is called, and, if successful,
189 the part of the screen occupied by the widget is accessible to the
190 drawing and painting routines.
191
192 This method is useful, for example, for graphic demonstration programs,
193 that draw continuously without any input. Another field is the screen
194 drawing, which is performed with Prima::Application class, that does
195 not have "Paint" notification. Application's graphic canvas represents
196 the whole screen, allowing over-drawing the graphic content of other
197 programs.
198
199 The event-driven rendering method adds implicit
200 "begin_paint()"/"end_paint()" brackets ( plus some system-dependent
201 actions ) and is a convenience version of the direct rendering.
202 Sometimes, however, the changes needed to be made to a widget's graphic
203 context are so insignificant, so the direct rendering method is
204 preferable, because of the cleaner and terser code. As an example might
205 serve a simple progress bar, that draws a simple colored bar. The
206 event-driven code would be ( in short, omitting many details ) as such:
207
208 $bar = Widget-> create(
209 width => 100,
210 onPaint => sub {
211 my ( $self, $canvas) = @_;
212 $canvas-> color( cl::Blue);
213 $canvas-> bar( 0, 0, $self-> {progress}, $self-> height);
214 $canvas-> color( cl::Back);
215 $canvas-> bar( $self-> {progress}, 0, $self-> size);
216 },
217 );
218 ...
219 $bar-> {progress} += 10;
220 $bar-> repaint;
221 # or, more efficiently, ( but clumsier )
222 # $bar-> invalidate_rect( $bar->{progress}-10, 0,
223 # $bar->{progress}, $bar-> height);
224
225 And the direct driven:
226
227 $bar = Widget-> create( width => 100 );
228 ...
229 $bar-> begin_paint;
230 $bar-> color( cl::Blue);
231 $bar-> bar( $progress, 0, $progress + 10, $bar-> height);
232 $bar-> end_paint;
233 $progress += 10;
234
235 The pros and contras are obvious: the event-driven rendered widget
236 correctly represents the status after an eventual repaint, for example
237 when the user sweeps a window over the progress bar widget. The direct
238 method cannot be that smart, but if the status bar is an insignificant
239 part of the program, the trade-off of the functionality in favor to the
240 code simplicity might be preferred.
241
242 Both methods can be effectively disabled using the paint locking
243 mechanism. The "lock()" and "unlock()" methods can be called several
244 times, stacking the requests. This feature is useful because many
245 properties implicitly call "repaint()", and if several of these
246 properties activate in a row, the unnecessary redrawing of the widget
247 can be avoided. The drawback is that the last "unlock()" call triggers
248 "repaint()" unconditionally.
249
251 Basic properties
252 A widget always has its position and size determined, even if it is not
253 visible on the screen. Prima::Widget provides several properties with
254 overlapping functionality, that govern the geometry of a widget. The
255 base properties are "::origin" and "::size", and the derived are
256 "::left", "::bottom", "::right", "::top", "::width", "::height" and
257 "::rect". "::origin" and "::size" operate with two integers, "::rect"
258 with four, others with one integer value.
259
260 As the Prima toolkit coordinate space begins in the lower bottom
261 corner, the combination of "::left" and "::bottom" is same as
262 "::origin", and combination of "::left", "::bottom", "::right" and
263 "::top" - same as "::rect".
264
265 When a widget is moved or resized, correspondingly two notifications
266 occur: "Move" and "Size". The parameters to both are old and new
267 position and size. The notifications occur irrespectable to whether the
268 geometry change was issued by the program itself or by the user.
269
270 Implicit size regulations
271 Concerning the size of a widget, two additional two-integer properties
272 exist, "::sizeMin" and "::sizeMax", that constrain the extension of a
273 widget in their boundaries. The direct call that assigns values to the
274 size properties that lie outside "::sizeMin" and "::sizeMax"
275 boundaries, will fail - the widget extension will be adjusted to the
276 boundary values, not to the specified ones.
277
278 Change to widget's position and size can occur not only by an explicit
279 call to one of the geometry properties. The toolkit contains implicit
280 rules, that can move and resize a widget corresponding to the flags,
281 given to the "::growMode" property. The exact meaning of the "gm::XXX"
282 flags is not given here ( see description to "::growMode" in API
283 section ), but in short, it is possible with simple means to maintain
284 widget's size and position regarding its owner, when the latter is
285 resized. By default, and the default behavior corresponds to
286 "::growMode" 0, widget does not change neither its size nor position
287 when its owner is resized. It stays always in 'the left bottom corner'.
288 When, for example, a widget is expected to stay in 'the right bottom
289 corner', or 'the left top corner', the "gm::GrowLoX" and "gm::GrowLoY"
290 values must be used, correspondingly. When a widget is expected to
291 cover, for example, its owner's lower part and change its width in
292 accord with the owner's, ( a horizontal scroll bar in an editor window
293 is the example), the "gm::GrowHiX" value must be used.
294
295 When this implicit size change does occur, the "::sizeMin" and
296 "::sizeMax" do take their part as well - they still do not allow the
297 widget's size to exceed their boundaries. However, this algorithm has a
298 problem, that is illustrated by the following setup. Imagine a widget
299 with size-dependent "::growMode" ( with "gm::GrowHiX" or "gm::GrowHiY"
300 bits set ) that must maintain certain relation between the owner's size
301 and its own. If the implicit size change would depend on the actual
302 widget size, derived as a result from the previous implicit size
303 action, then its size (and probably position) will be incorrect after
304 an attempt is made to change the widget's size to values outside the
305 size boundaries.
306
307 Example: child widget has width 100, growMode set to "gm::GrowHiX" and
308 sizeMin set to (95, 95). Its owner has width 200. If the owner widget
309 changes gradually its width from 200 to 190 and then back, the
310 following width table emerges:
311
312 Owner Child
313 Initial state 200 100
314 Shrink 195 -5 95
315 Shrink 190 -5 95 - as it can not be less than 95.
316 Grow 195 +5 100
317 Grow 200 +5 105
318
319 That effect would exist if the differential-size algorithm would be
320 implemented, - the owner changes width by 5, and the child does the
321 same. The situation is fixed by introducing the virtual size term.
322 The "::size" property is derived from virtual size, and as "::size"
323 cannot exceed the size boundaries, virtual size can. It can even
324 accept the negative values. With this intermediate stage added, the
325 correct picture occurs:
326
327 Owner Child's Child's
328 virtual width width
329 Initial state 200 100 100
330 Shrink 195 -5 95 95
331 Shrink 190 -5 90 95
332 Grow 195 +5 95 95
333 Grow 200 +5 100 100
334
335 Geometry managers
336 The concept of geometry managers is imported from Tk, which in turn is
337 a port of Tcl-Tk. The idea behind it is that a widget size and position
338 is governed by one of the managers, which operate depending on the
339 specific options given to the widget. The selection is operated by
340 "::geometry" property, and is one of "gt::XXX" constants. The native (
341 and the default ) geometry manager is the described above grow-mode
342 algorithm ( "gt::GrowMode" ). The currently implemented Tk managers are
343 packer ( "gt::Pack" ) and placer ( "gt::Place"). Each has its own set
344 of options and methods, and their manuals are provided separately in
345 Prima::Widget::pack and Prima::Widget::place ( the manpages are also
346 imported from Tk ).
347
348 Another concept that comes along with geometry managers is the
349 'geometry request size'. It is realized as a two-integer property
350 "::geomSize", which reflects the size deduced by some intrinsic widget
351 knowledge. The idea is that "::geomSize" it is merely a request to a
352 geometry manager, whereas the latter changes "::size" accordingly. For
353 example, a button might set its 'intrinsic' width in accord with the
354 width of text string displayed in it. If the default width for such a
355 button is not overridden, it is assigned with such a width. By default,
356 under "gt::GrowMode" geometry manager, setting "::geomSize" ( and its
357 two semi-alias properties "::geomWidth" and "::geomHeight" ) also
358 changes the actual widget size.Moreover, when the size is passed to the
359 Widget initialization code, "::size" properties are used to initialize
360 "::geomSize". Such design minimizes the confusion between the two
361 properties, and also minimizes the direct usage of "::geomSize",
362 limiting it for selecting advisory size in widget internal code.
363
364 The geometry request size is useless under "gt::GrowMode" geometry
365 manager, but Tk managers use it extensively.
366
367 Relative coordinates
368 Another geometry issue, or rather a programming technique must be
369 mentioned - the relative coordinates. It is the well-known problem,
370 when a dialog window, developed with one font looks garbled on another
371 system with another font. The relative coordinates solve that problem;
372 the solution is to use the "::designScale" two-integer property, the
373 width and height of the font, that was used when the dialog window was
374 designed. With this property supplied, the position and size supplied
375 when a widget is actually created, are transformed in proportion
376 between the designed and the actual font metrics.
377
378 The relative coordinates can be used only when passing the geometry
379 properties values, and only before the creation stage, before a widget
380 is created, because the scaling calculations perform in
381 Prima::Widget::"profile_check_in()" method.
382
383 In order to employ the relative coordinates scheme, the owner ( or the
384 dialog ) widget must set its "::designScale" to the font metrics and
385 "::scaleChildren" property to 1. Widgets, created with owner that
386 meets these requirements, participate in the relative coordinates
387 scheme. If a widget must be excluded from the relative geometry
388 applications, either the owner's property "::scaleChildren" must be set
389 to 0, or the widget's "::designScale" must be set to "undef". As the
390 default "::designScale" value is "undef", no default implicit relative
391 geometry schemes are applied.
392
393 The "::designScale" property is auto-inherited; its value is copied to
394 the children widgets, unless the explicit "::designScale" was given
395 during the widget's creation. This is used when such a child widget
396 serves as an owner for some other grand-children widgets; the
397 inheritance scheme allows the grand- ( grand- etc ) children to
398 participate in the relative geometry scheme.
399
400 Note: it is advised to test such applications with the Prima::Stress
401 module, which assigns a random font as the default, so the testing
402 phase does not involve tweaking of the system settings.
403
405 In case when two widgets overlap, one of these is drawn in full,
406 whereas the another only partly. Prima::Widget provides management of
407 the Z-axis ordering, but since Z-ordering paradigm can hardly be fit
408 into the properties scheme, the toolkit uses methods instead.
409
410 A widget can use four query methods: "first()", "last()", "next()", and
411 "prev()". These return, correspondingly, the first and the last widgets
412 in Z-order stack, and the direct neighbors of a widget ( $widget->
413 next-> prev always equals to the $widget itself, given that $widget->
414 next exists ).
415
416 The last widget is the topmost one, the one that is drawn fully. The
417 first is the most obscured one, given that all the widgets overlap.
418
419 Z-order can also be changed at runtime ( but not during widget's
420 creation). There are three methods: "bring_to_front()", that sets the
421 widget last in the order, making it topmost, "send_to_back()", that
422 does the reverse, and "insert_behind()", that sets a widget behind the
423 another widget, passed as an argument.
424
425 Changes to Z-order trigger "ZOrderChanged" notification.
426
428 By default, if a widget is a child to a widget or a window, it
429 maintains two features: it is clipped by its owner's boundaries and is
430 moved together as the owner widget moves, i.e. a child is inferior to
431 its parent. However, a widget without a parent still does have a valid
432 owner. Instead of implementing parent property, the "::clipOwner"
433 property was devised. It is 1 by default, and if it is 1, then owner of
434 a widget is its parent, at the same time. However, when it is 0, many
435 things change. The widget is neither clipped nor moved together with
436 its parent. The widget become parentless, or, more strictly speaking,
437 the screen becomes its parent. Moreover, the widget's origin offset is
438 calculated then not from the owner's coordinates but from the screen,
439 and mouse events in the widget do not transgress implicitly to the
440 owner's top-level window eventual decorations.
441
442 The same results are produced if a widget is inserted in the
443 application object, which does not have screen visualization. A widget
444 that belongs to the application object, can not reset its "::clipOwner"
445 value to 1.
446
447 The "::clipOwner" property opens a possibility for the toolkit widgets
448 to live inside other programs' windows. If the "::parentHandle" is
449 changed from its default "undef" value to a valid system window handle,
450 the widget becomes child to this window, which can belong to any
451 application residing on the same display. This option is dangerous,
452 however: normally widgets never get destroyed by no reason. A top-level
453 window is never destroyed before its "Close" notification grants the
454 destruction. The case with "::parentHandle" is special, because a
455 widget, inserted into an alien application, must be prepared to be
456 destroyed at any moment. It is recommended to use prior knowledge about
457 such the application, and, even better, use one or another inter-
458 process communication scheme to interact with it.
459
460 A widget does not need to undertake anything special to become an
461 'owner'. Any widget, that was set in "::owner" property on any other
462 widget, becomes an owner automatically. Its "get_widgets()" method
463 returns non-empty widget list. "get_widgets()" serves same purpose as
464 Prima::Component::"get_components()", but returns only Prima::Widget
465 descendants.
466
467 A widget can change its owner at any moment. The "::owner" property is
468 both readable and writable, and if a widget is visible during the owner
469 change, it is immediately appeared under different coordinates and
470 different clipping condition after the property change, given that its
471 "::clipOwner" is set to 1.
472
474 A widget is created visible by default. Visible means that it is shown
475 on the screen if it is not shadowed by other widgets or windows. The
476 visibility is governed by the "::visible" property, and its two
477 convenience aliases, "show()" and "hide()".
478
479 When a widget is invisible, its geometry is not discarded; the widget
480 pertains its position and size, and is subject to all previously
481 discussed implicit sizing issues. When change to "::visible" property
482 is made, the screen is not updated immediately, but in the next event
483 loop invocation, because uncovering of the underlying area of a hidden
484 widget, and repainting of a new-shown widget both depend onto the
485 event-driven rendering functionality. If the graphic content must be
486 updated, "update_view()" must be called, but there's a problem. It is
487 obvious that if a widget is shown, the only content to be updated is
488 its own. When a widget becomes hidden, it may uncover more than one
489 widget, depending on the geometry, so it is unclear what widgets must
490 be updated. For the practical reasons, it is enough to get one event
491 loop passed, by calling "yield()" method of the $::application object.
492 The other notifications may pass here as well, however.
493
494 There are other kinds of visibility. A widget might be visible, but one
495 of its owners might not. Or, a widget and its owners might be visible,
496 but they might be over-shadowed by the other windows. These conditions
497 are returned by "showing()" and "exposed()" functions, correspondinly.
498 These return boolean values corresponding to the condition described.
499 So, if a widget is 'exposed', it is 'showing' and 'visible';
500 "exposed()" returns always 0 if a widget is either not 'showing' or not
501 'visible'. If a widget is 'showing', then it is always 'visible'.
502 "showing()" returns always 0 if a widget is invisible.
503
504 Visibility changes trigger "Hide" and "Show" notifications.
505
507 One of the key points of any GUI is that only one window at a time can
508 possess a focus. The widget is focused, if the user's keyboard input is
509 directed to it. The toolkit adds another layer in the focusing scheme,
510 as often window managers do, highlighting the decorations of a top-
511 level window over a window with the input focus.
512
513 Prima::Widget property "::focused" governs the focused state of a
514 widget. It is sometimes too powerful to be used. Its more often
515 substitutes, "::selected" and "::current" properties provide more
516 respect to widget hierarchy.
517
518 "::selected" property sets focus to a widget if it is allowed to be
519 focused, by the usage of the "::selectable" property. With this
520 granted, the focus is passed to the widget or to the one of its (
521 grand-) children. So to say, when 'selecting' a window with a text
522 field by clicking on a window, one does not expect the window itself to
523 be focused, but the text field. To achieve this goal and reduce
524 unnecessary coding, the "::current" property is introduced. With all
525 equal conditions, a widget that is 'current' gets precedence in getting
526 selected over widgets that are not 'current'.
527
528 De-selecting, in its turn, leaves the system in such a state when no
529 window has input focus. There are two convenience shortcuts "select()"
530 and "deselect()" defined, aliased to selected(1) and selected(0),
531 correspondingly.
532
533 As within the GUI space, there can be only one 'focused' widget, so
534 within the single widget space, there can be only one 'current' widget.
535 A widget can be marked as a current by calling "::current" ( or,
536 identically, "::currentWidget" on the owner widget ). The
537 reassignments are performed automatically when a widget is focused.
538 The reverse is also true: if a widget is explicitly marked as
539 'current', and belongs to the widget tree with the focus in one of its
540 widgets, then the focus passed to the 'current' widget, or down to its
541 hierarchy if it is not selectable.
542
543 These relations between current widget pointer and focus allow the
544 toolkit easily implement the focusing hierarchy. The focused widget is
545 always on the top of the chain of its owner widgets, each of whose is a
546 'current' widget. If, for example, a window that contains a widget that
547 contains a focused button, become un-focused, and then user selects the
548 window again, then the button will become focused automatically.
549
550 Changes to focus produce "Enter" and "Leave" notifications.
551
552 Below discussed mouse- and keyboard- driven focusing schemes. Note
553 that all of these work via "::selected", and do not focus the widgets
554 with "::selectable" property set to 0.
555
556 Mouse-aided focusing
557 Typically, when the user clicks the left mouse button on a widget, the
558 latter becomes focused. One can note that not all widgets become
559 focused after the mouse click - scroll bars are the examples. Another
560 kind of behavior is the described above window with the text field -
561 clicking mouse on a window focuses a text field.
562
563 Prima::Widget has the "::selectingButtons" property, a combination of
564 mb::XXX ( mouse buttons ) flags. If the bits corresponding to the
565 buttons are set, then click of this button will automatically call
566 ::selected(1) ( not ::focused(1) ).
567
568 Another boolean property, "::firstClick" determines the behavior when
569 the mouse button action is up to focus a widget, but the widget's top-
570 level window is not active. The default value of "::firstClick" is 1,
571 but if set otherwise, the user must click twice to a widget to get it
572 focused. The property does not influence anything if the top-level
573 window was already active when the click event occured.
574
575 Due to different GUI designs, it is hardly possibly to force selection
576 of one top-level window when the click was on the another. The window
577 manager or the OS can interfere, although this does not always happen,
578 and produces different results on different platforms. Since the
579 primary goal of the toolkit is portability, such functionality must be
580 considered with care. Moreover, when the user selects a window by
581 clicking not on the toolkit-created widgets, but on the top-level
582 window decorations, it is not possible to discern the case from any
583 other kind of focusing.
584
585 Keyboard focusing
586 The native way to navigate between the toolkit widgets are tab- and
587 arrow- navigation. The tab ( and its reverse, shift-tab ) key
588 combinations circulate the focus between the widgets in same top-level
589 group ( but not inside the same owner widget group ). The arrow keys,
590 if the focused widget is not interested in these keystrokes, move the
591 focus in the specified direction, if it is possible. The methods that
592 provide the navigations are available and called "next_tab()" and
593 "next_positional()", correspondingly ( see API for the details).
594
595 When "next_positional()" operates with the geometry of the widgets,
596 "next_tab()" uses the "::tabStop" and "::tabOrder" properties.
597 "::tabStop", the boolean property, set to 1 by default, tells if a
598 widget is willing to participate in tab-aided focus circulation. If it
599 doesn't, "next_tab()" never uses it in its iterations. "::tabOrder"
600 value is an integer, unique within the sibling widgets ( sharing same
601 owner ) list, and is used as simple tag when the next tab-focus
602 candidate is picked up. The default "::tabOrder" value is -1, which
603 changes automatically after widget creation to a unique value.
604
606 The toolkit responds to the two basic means of the user input - the
607 keyboard and the mouse. Below described three aspects of the input
608 handling - the event-driven, the polling and the simulated input
609 issues. The event-driven input is the more or less natural way of
610 communicating with the user, so when the user presses the key or moves
611 the mouse, a system event occurs and triggers the notification in one
612 or more widgets. Polling methods provide the immediate state of the
613 input devices; the polling is rarely employed, primarily because of its
614 limited usability, and because the information it provides is passed to
615 the notification callbacks anyway. The simulated input is little more
616 than "notify()" call with specifically crafted parameters. It interacts
617 with the system, so the emulation can gain the higher level of
618 similarity to the user actions. The simulated input functions allow the
619 notifications to be called right away, or post it, delaying the
620 notification until the next event loop invocation.
621
622 Keyboard
623 Event-driven
624 Keyboard input generates several notifications, where the most
625 important are "KeyDown" and "KeyUp". Both have almost the same list
626 of parameters ( see API ), that contain the key code, its modifiers
627 ( if any ) that were pressed and an eventual character code. The
628 algorithms that extract the meaning of the key, for example,
629 discretion between character and functional keys etc are not
630 described here. The reader is advised to look at Prima::KeySelector
631 module, which provides convenience functions for keyboard input
632 values transformations, and to the Prima::Edit and Prima::InputLine
633 modules, the classes that use extensively the keyboard input. But
634 in short, the key code is one of the "kb::XXX" ( like, kb::F10,
635 kb::Esc ) constants, and the modifier value is a combination of the
636 "km::XXX" ( km::Ctrl, km::Shift) constants. The notable exception
637 is kb::None value, which hints that the character code is of value.
638 Some other "kb::XXX"-marked keys have the character code as well,
639 and it is up to a programmer how to treat these combinations. It is
640 advised, however, to look at the key code first, and then to the
641 character code.
642
643 "KeyDown" event has also the repeat integer parameter, that shows
644 the repetitive count how many times the key was pressed. Usually
645 it is 1, but if a widget was not able to get its portion of events
646 between the key presses, its value can be higher. If a code
647 doesn't check for this parameter, some keyboard input may be lost.
648 If the code will be too much complicated by introducing the repeat-
649 value, one may consider setting the "::briefKeys" property to 0.
650 "::briefKeys", the boolean property, is 1 by default. If set to 0,
651 it guarantees that the repeat value will always be 1, but with the
652 price of certain under-optimization. If the core "KeyDown"
653 processing code sees repeat value greater than 1, it simply calls
654 the notification again.
655
656 Along with these two notifications, the "TranslateAccel" event is
657 generated after "KeyDown", if the focused widget is not interested
658 in the key event. Its usage covers the needs of the other widgets
659 that are willing to read the user input, even being out of focus.
660 A notable example can be a button with a hot key, that reacts on
661 the key press when the focus is elsewhere within its top-level
662 window. "TranslateAccel" has same parameters as "KeyDown", except
663 the REPEAT parameter.
664
665 Such out-of-focus input is also used with built-in menu keys
666 translations. If a descendant of Prima::AbstractMenu is in the
667 reach of the widget tree hierarchy, then it is checked whether it
668 contains some hot keys that match the user input. See Prima::Menu
669 for the details. In particular, Prima::Widget has "::accelTable"
670 property, a mere slot for an object that contains a table of hot
671 keys mappings to custom subroutines.
672
673 Polling
674 The polling function for the keyboard is limited to the modifier
675 keys only. "get_shift_state()" method returns the press state of
676 the modifier keys, a combination of "km::XXX" constants.
677
678 Simulated input
679 There are two methods, corresponding to the major notifications -
680 "key_up()" and "key_down()", that accept the same parameters as the
681 "KeyUp" and "KeyDown" notifications do, plus the POST boolean flag.
682 See "API" for details.
683
684 These methods are convenience wrappers for "key_event()" method,
685 which is never used directly.
686
687 Mouse
688 Event-driven
689 Mouse notifications are send in response when the user moves the
690 mouse, or presses and releases mouse buttons. The notifications
691 are logically grouped in two sets, the first contains "MouseDown",
692 "MouseUp", "MouseClick", and "MouseWheel", and the second -
693 "MouseMove", "MouseEnter", end "MouseLeave".
694
695 The first set deals with button actions. Pressing, de-pressing,
696 clicking ( and double-clicking ), the turn of mouse wheel
697 correspond to the four notifications. The notifications are sent
698 together with the mouse pointer coordinates, the button that was
699 touched, and the eventual modifier keys that were pressed. In
700 addition, "MouseClick" provides the boolean flag if the click was
701 single or double, and "MouseWheel" the wheel turn amount. These
702 notifications occur when the mouse event occurs within the
703 geometrical bounds of a widget, with one notable exception, when a
704 widget is in capture mode. If the "::capture" is set to 1, then
705 these events are sent to the widget even if the mouse pointer is
706 outside, and not sent to the widgets and windows that reside under
707 the pointer.
708
709 The second set deals with the pointer movements. When the pointer
710 passes over a widget, it receives first "MouseEnter", then series
711 of "MouseMove", and finally "MouseLeave". "MouseMove" and
712 "MouseEnter" notifications provide X,Y-coordinates and modificator
713 keys; "MouseLeave" passes no parameters.
714
715 Polling
716 The mouse input polling procedures are "get_mouse_state()" method,
717 that returns combination of "mb::XXX" constants, and the
718 "::pointerPos" two-integer property that reports the current
719 position of the mouse pointer.
720
721 Simulated input
722 There are five methods, corresponding to the mouse events -
723 "mouse_up()", "mouse_down()", "mouse_click()", "mouse_wheel()" and
724 "mouse_move()", that accept the same parameters as their event
725 counterparts do, plus the POST boolean flag. See "API" for details.
726
727 These methods are convenience wrappers for "mouse_event()" method,
728 which is never used directly.
729
731 Prima::Drawable deals only with such color values, that can be
732 unambiguously decomposed to their red, green and blue components.
733 Prima::Widget extends the range of the values acceptable by its color
734 properties, introducing the color schemes. The color can be set
735 indirectly, without prior knowledge of what is its RGB value. There are
736 several constants defined in "cl::" name space, that correspond to the
737 default values of different color properties of a widget.
738
739 Prima::Widget revises the usage of "::color" and "::backColor", the
740 properties inherited from Prima::Drawable. Their values are widget's
741 'foreground' and 'background' colors, in addition to their function as
742 template values. Moreover, their dynamic change induces the repainting
743 of a widget, and they can be inherited from the owner. The inheritance
744 is governed by properties "::ownerColor" and "::ownerBackColor". While
745 these are true, changes to owner "::color" or "::backColor" copied
746 automatically to a widget. Once the widget's "::color" or "::backColor"
747 are explicitly set, the owner link breaks automatically by setting
748 "::ownerColor" or "::ownerBackColor" to 0.
749
750 In addition to these two color properties, Prima::Widget introduces six
751 others. These are "::disabledColor", "::disabledBackColor",
752 "::hiliteColor", "::hiliteBackColor", "::light3DColor", and
753 "::dark3DColor". The 'disabled' color pair contains the values that
754 are expected to be used as foreground and background when a widget is
755 in the disabled state ( see API, "::enabled" property ). The 'hilite'
756 values serve as the colors for representation of selection inside a
757 widget. Selection may be of any kind, and some widgets do not provide
758 any. But for those that do, the 'hilite' color values provide distinct
759 alternative colors. Examples are selections in the text widgets, or in
760 the list boxes. The last pair, "::light3DColor" and "::dark3DColor" is
761 used for drawing 3D-looking outlines of a widget. The purpose of all
762 these properties is the adequate usage of the color settings, selected
763 by the user using system-specific tools, so the program written with
764 the toolkit would look not such different, and more or less conformant
765 to the user's color preferences.
766
767 The additional "cl::" constants, mentioned above, represent these eight
768 color properties. These named correspondingly, cl::NormalText,
769 cl::Normal, cl::HiliteText, cl::Hilite, cl::DisabledText, cl::Disabled,
770 cl::Light3DColor and cl::Dark3DColor. cl::NormalText is alias to
771 cl::Fore, and cl::Normal - to cl::Back. Another constant set, "ci::"
772 can be used with the "::colorIndex" property, a multiplexer for all
773 eight color properties. "ci::" constants mimic their non-RGB "cl::"
774 counterparts, so the call "hiliteBackColor(cl::Red)" is equal to
775 "colorIndex(ci::Hilite, cl::Red)".
776
777 Mapping from these constants to the RGB color representation is used
778 with "map_color()" method. These "cl::" constants alone are sufficient
779 for acquiring the default values, but the toolkit provides wider
780 functionality than this. The "cl::" constants can be combined with the
781 "wc::" constants, that represent standard widget class. The widget
782 class is implicitly used when single "cl::" constant is used; its value
783 is read from the "::widgetClass" property, unless one of "wc::"
784 constants is combined with the non-RGB "cl::" value. "wc::" constants
785 are described in "API"; their usage can make call of, for example,
786 "backColor( cl::Back)" on a button and on an input line result in
787 different colors, because the "cl::Back" is translated in the first
788 case into "cl::Back|wc::Button", and in another -
789 "cl::Back|wc::InputLine".
790
791 Dynamic change of the color properties result in the "ColorChanged"
792 notification.
793
795 Prima::Widget does not change the handling of fonts - the font
796 selection inside and outside "begin_paint()"/"end_paint()" is not
797 different at all. A matter of difference is how does Prima::Widget
798 select the default font.
799
800 First, if the "::ownerFont" property is set to 1, then font of the
801 owner is copied to the widget, and is maintained all the time while the
802 property is true. If it is not, the default font values read from the
803 system.
804
805 The default font metrics for a widget returned by "get_default_font()"
806 method, that often deals with system-dependent and user-selected
807 preferences ( see "Additional resources" ). Because a widget can host
808 an eventual Prima::Popup object, it contains "get_default_popup_font()"
809 method, that returns the default font for the popup objects. The
810 dynamic popup font settings governed, naturally, by the "::popupFont"
811 property. Prima::Window extends the functionality to
812 "get_default_menu_font()" and the "::menuFont" property.
813
814 Dynamic change of the font property results in the "FontChanged"
815 notification.
816
818 The resources, operated via Prima::Widget class but not that strictly
819 bound to the widget concept, are gathered in this section. The section
820 includes overview of pointer, cursor, hint, menu objects and user-
821 specified resources.
822
823 Pointer
824 The mouse pointer is the shared resource, that can change its visual
825 representation when it hovers over different kinds of widgets. It is
826 usually a good practice for a text field, for example, set the pointer
827 icon to a jagged vertical line, or indicate a moving window with a
828 cross-arrowed pointer.
829
830 A widget can select either one of the predefined system pointers,
831 mapped by the "cr::XXX" constant set, or supply its own pointer icon of
832 an arbitrary size and color depth.
833
834 NB: Not all systems allow the colored pointer icons. System value under
835 sv::ColorPointer index containing a boolean value, whether the colored
836 icons are allowed or not. Also, the pointer icon size may have a limit:
837 check if sv::FixedPointerSize is non-zero, in which case the pointer
838 size will be reduced to the system limits.
839
840 In general, the "::pointer" property is enough for these actions. It
841 discerns whether it has an icon or a constant passed, and sets the
842 appropriate properties. These properties are also accessible
843 separately, although their usage is not encouraged, primarily because
844 of the tangled relationship between them. These properties are:
845 "::pointerType", "::pointerIcon", and "::pointerHotSpot". See their
846 details in the "API" sections.
847
848 Another property, which is present only in Prima::Application name
849 space is called "::pointerVisible", and governs the visibility of the
850 pointer - but for all widget instances at once.
851
852 Cursor
853 The cursor is a blinking rectangular area, indicating the availability
854 of the input focus in a widget. There can be only one active cursor per
855 a GUI space, or none at all. Prima::Widget provides several cursor
856 properties: "::cursorVisible", "::cursorPos", and "::cursorSize". There
857 are also two methods, "show_cursor()" and "hide_cursor()", which are
858 not the convenience shortcuts but the functions accounting the cursor
859 hide count. If "hide_cursor()" was called three times, then
860 "show_cursor()" must be called three times as well for the cursor to
861 become visible.
862
863 Hint
864 "::hint" is a text string, that usually describes the widget's purpose
865 to the user in a brief manner. If the mouse pointer is hovered over the
866 widget longer than some timeout ( see Prima::Application::hintPause ),
867 then a label appears with the hint text, until the pointer is drawn
868 away. The hint behavior is governed by Prima::Application, but a
869 widget can do two additional things about hint: it can enable and
870 disable it by calling "::showHint" property, and it can inherit the
871 owner's "::hint" and "::showHint" properties using "::ownerHint" and
872 "::ownerShowHint" properties. If, for example, "::ownerHint" is set to
873 1, then "::hint" value is automatically copied from the widget's owner,
874 when it changes. If, however, the widget's "::hint" or "::showHint" are
875 explicitly set, the owner link breaks automatically by setting
876 "::ownerHint" or "::ownerShowHint" to 0.
877
878 The widget can also operate the "::hintVisible" property, that shows or
879 hides the hint label immediately, if the mouse pointer is inside the
880 widget's boundaries.
881
882 Menu objects
883 The default functionality of Prima::Widget coexists with two kinds of
884 the Prima::AbstractMenu descendants - Prima::AccelTable and
885 Prima::Popup ( Prima::Window is also equipped with Prima::Menu
886 reference). The "::items" property of these objects are accessible
887 through "::accelItems" and "::popupItems", whereas the objects
888 themselves - through "::accelTable" and "::popup", correspondingly. As
889 mentioned in "User input", these objects hook the user keyboard input
890 and call the programmer-defined callback subroutine if the key stroke
891 equals to one of their table values. As for "::accelTable", its
892 function ends here. "::popup" provides access to a context pop-up menu,
893 which can be invoked by either right-clicking or pressing a system-
894 dependent key combination. As a little customization, the
895 "::popupColorIndex" and "::popupFont" properties are introduced. (
896 "::popupColorIndex" is multiplexed to "::popupColor",
897 "::popupHiliteColor", "::popupHiliteBackColor", etc etc properties
898 exactly like the "::colorIndex" property ).
899
900 The font and color of a menu object might not always be writable
901 (Win32).
902
903 The Prima::Window class provides equivalent methods for the menu bar,
904 introducing "::menu", "::menuItems", "::menuColorIndex" ( with
905 multiplexing ) and "::menuFont" properties.
906
907 User-specified resources
908 It is considered a good idea to incorporate the user preferences into
909 the toolkit look-and-feel. Prima::Widget relies to the system-specific
910 code that tries to map these preferences as close as possible to the
911 toolkit paradigm.
912
913 Unix version employs XRDB ( X resource database ), which is the natural
914 way for the user to tell the preferences with fine granularity. Win32
915 reads the setting that the user has to set interactively, using system
916 tools. Nevertheless, the toolkit can not emulate all user settings that
917 are available on the supported platforms; it rather takes a 'least
918 common denominator', which is colors and fonts. "fetch_resource()"
919 method is capable of returning any of such settings, provided it's
920 format is font, color or a string. The method is rarely called
921 directly.
922
923 The appealing idea of making every widget property adjustable via the
924 user-specified resources is not implemented in full. It can be
925 accomplished up to a certain degree using "fetch_resource()" existing
926 functionality, but it is believed that calling up the method for the
927 every property for the every widget created is prohibitively expensive.
928
930 Properties
931 accelItems [ ITEM_LIST ]
932 Manages items of a Prima::AccelTable object associated with a
933 widget. The ITEM_LIST format is same as
934 "Prima::AbstractMenu::items" and is described in Prima::Menu.
935
936 See also: "accelTable"
937
938 accelTable OBJECT
939 Manages a Prima::AccelTable object associated with a widget. The
940 sole purpose of the accelTable object is to provide convenience
941 mapping of key combinations to anonymous subroutines. Instead of
942 writing an interface specifically for Prima::Widget, the existing
943 interface of Prima::AbstractMenu was taken.
944
945 The accelTable object can be destroyed safely; its cancellation can
946 be done either via "accelTable(undef)" or "destroy()" call.
947
948 Default value: undef
949
950 See also: "accelItems"
951
952 autoEnableChildren BOOLEAN
953 If TRUE, all immediate children widgets maintain the same "enabled"
954 state as the widget. This property is useful for the group-like
955 widgets ( ComboBox, SpinEdit etc ), that employ their children for
956 visual representation.
957
958 Default value: 0
959
960 backColor COLOR
961 In widget paint state, reflects background color in the graphic
962 context. In widget normal state, manages the basic background
963 color. If changed, initiates "ColorChanged" notification and
964 repaints the widget.
965
966 See also: "color", "colorIndex", "ColorChanged"
967
968 bottom INTEGER
969 Maintains the lower boundary of a widget. If changed, does not
970 affect the widget height; but does so, if called in "set()"
971 together with "::top".
972
973 See also: "left", "right", "top", "origin", "rect", "growMode",
974 "Move"
975
976 briefKeys BOOLEAN
977 If 1, contracts the repetitive key press events into one
978 notification, increasing REPEAT parameter of "KeyDown" callbacks.
979 If 0, REPEAT parameter is always 1.
980
981 Default value: 1
982
983 See also: "KeyDown"
984
985 buffered BOOLEAN
986 If 1, a widget "Paint" callback draws not on the screen, but on the
987 off-screen memory instead. The memory content is copied to the
988 screen then. Used when complex drawing methods are used, or if
989 output smoothness is desired.
990
991 This behavior can not be always granted, however. If there is not
992 enough memory, then widget draws in the usual manner.
993
994 Default value: 0
995
996 See also: "Paint"
997
998 capture BOOLEAN, CLIP_OBJECT = undef
999 Manipulates capturing of the mouse events. If 1, the mouse events
1000 are not passed to the widget the mouse pointer is over, but are
1001 redirected to the caller widget. The call for capture might not be
1002 always granted due the race conditions between programs.
1003
1004 If CLIP_OBJECT widget is defined in set-mode call, the pointer
1005 movements are confined to CLIP_OBJECT inferior.
1006
1007 See also: "MouseDown", "MouseUp", "MouseMove", "MouseWheel",
1008 "MouseClick".
1009
1010 centered BOOLEAN
1011 A write-only property. Once set, widget is centered by X and Y axis
1012 relative to its owner.
1013
1014 See also: "x_centered", "y_centered", "growMode", "origin", "Move".
1015
1016 clipChildren BOOLEAN
1017 Affects the drawing mode when children widgets are present and
1018 obscuring the drawing area. If set, the children widgets are
1019 automatically added to the clipping area, and drawing over them
1020 will not happen. If unset, the painting can be done over the
1021 children widgets.
1022
1023 Default: 1
1024
1025 clipOwner BOOLEAN
1026 If 1, a widget is clipped by its owner boundaries. It is the
1027 default and expected behavior. If clipOwner is 0, a widget behaves
1028 differently: it does not clipped by the owner, it is not moved
1029 together with the parent, the origin offset is calculated not from
1030 the owner's coordinates but from the screen, and mouse events in a
1031 widget do not transgress to the top-level window decorations. In
1032 short, it itself becomes a top-level window, that, contrary to the
1033 one created from Prima::Window class, does not have any
1034 interference with system-dependent window stacking and positioning
1035 ( and any other ) policy, and is not ornamented by the window
1036 manager decorations.
1037
1038 Default value: 1
1039
1040 See "Parent-child relationship"
1041
1042 See also: "Prima::Object" owner section, "parentHandle"
1043
1044 color COLOR
1045 In widget paint state, reflects foreground color in the graphic
1046 context. In widget normal state, manages the basic foreground
1047 color. If changed, initiates "ColorChanged" notification and
1048 repaints the widget.
1049
1050 See also: "backColor", "colorIndex", "ColorChanged"
1051
1052 colorIndex INDEX, COLOR
1053 Manages the basic color properties indirectly, by accessing via
1054 "ci::XXX" constant. Is a complete alias for "::color",
1055 "::backColor", "::hiliteColor", "::hiliteBackColor",
1056 "::disabledColor", "::disabledBackColor", "::light3DColor", and
1057 "::dark3DColor" properties. The "ci::XXX" constants are:
1058
1059 ci::NormalText or ci::Fore
1060 ci::Normal or ci::Back
1061 ci::HiliteText
1062 ci::Hilite
1063 ci::DisabledText
1064 ci::Disabled
1065 ci::Light3DColor
1066 ci::Dark3DColor
1067
1068 The non-RGB "cl::" constants, specific to the Prima::Widget color
1069 usage are identical to their "ci::" counterparts:
1070
1071 cl::NormalText or cl::Fore
1072 cl::Normal or cl::Back
1073 cl::HiliteText
1074 cl::Hilite
1075 cl::DisabledText
1076 cl::Disabled
1077 cl::Light3DColor
1078 cl::Dark3DColor
1079
1080 See also: "color", "backColor", "ColorChanged"
1081
1082 current BOOLEAN
1083 If 1, a widget (or one of its children) is marked as the one to be
1084 focused ( or selected) when the owner widget receives "select()"
1085 call. Within children widgets, only one or none at all can be
1086 marked as a current.
1087
1088 See also: "currentWidget", "selectable", "selected",
1089 "selectedWidget", "focused"
1090
1091 currentWidget OBJECT
1092 Points to a children widget, that is to be focused ( or selected)
1093 when the owner widget receives "select()" call.
1094
1095 See also: "current", "selectable", "selected", "selectedWidget",
1096 "focused"
1097
1098 cursorPos X_OFFSET Y_OFFSET
1099 Specifies the lower left corner of the cursor
1100
1101 See also: "cursorSize", "cursorVisible"
1102
1103 cursorSize WIDTH HEIGHT
1104 Specifies width and height of the cursor
1105
1106 See also: "cursorPos", "cursorVisible"
1107
1108 cursorVisible BOOLEAN
1109 Specifies cursor visibility flag. Default value is 0.
1110
1111 See also: "cursorSize", "cursorPos"
1112
1113 dark3DColor COLOR
1114 The color used to draw dark shades.
1115
1116 See also: "light3DColor", "colorIndex", "ColorChanged"
1117
1118 designScale X_SCALE Y_SCALE
1119 The width and height of a font, that was used when a widget (
1120 usually a dialog or a grouping widget ) was designed.
1121
1122 See also: "scaleChildren", "width", "height", "size", "font"
1123
1124 disabledBackColor COLOR
1125 The color used to substitute "::backColor" when a widget is in its
1126 disabled state.
1127
1128 See also: "disabledColor", "colorIndex", "ColorChanged"
1129
1130 disabledColor COLOR
1131 The color used to substitute "::color" when a widget is in its
1132 disabled state.
1133
1134 See also: "disabledBackColor", "colorIndex", "ColorChanged"
1135
1136 enabled BOOLEAN
1137 Specifies if a widget can accept focus, keyboard and mouse events.
1138 Default value is 1, however, being 'enabled' does not automatically
1139 allow the widget become focused. Only the reverse is true - if
1140 enabled is 0, focusing can never happen.
1141
1142 See also: "responsive", "visible", "Enable", "Disable"
1143
1144 font %FONT
1145 Manages font context. Same syntax as in Prima::Drawable. If
1146 changed, initiates "FontChanged" notification and repaints the
1147 widget.
1148
1149 See also: "designScale", "FontChanged", "ColorChanged"
1150
1151 geometry INTEGER
1152 Selects one of the available geometry managers. The corresponding
1153 integer constants are:
1154
1155 gt::GrowMode, gt::Default - the default grow-mode algorithm
1156 gt::Pack - Tk packer
1157 gt::Place - Tk placer
1158
1159 See "growMode", Prima::Widget::pack, Prima::Widget::place.
1160
1161 growMode MODE
1162 Specifies widget behavior, when its owner is resized or moved.
1163 MODE can be 0 ( default ) or a combination of the following
1164 constants:
1165
1166 Basic constants
1167 gm::GrowLoX widget's left side is kept in constant
1168 distance from owner's right side
1169 gm::GrowLoY widget's bottom side is kept in constant
1170 distance from owner's top side
1171 gm::GrowHiX widget's right side is kept in constant
1172 distance from owner's right side
1173 gm::GrowHiY widget's top side is kept in constant
1174 distance from owner's top side
1175 gm::XCenter widget is kept in center on its owner's
1176 horizontal axis
1177 gm::YCenter widget is kept in center on its owner's
1178 vertical axis
1179 gm::DontCare widgets origin is maintained constant relative
1180 to the screen
1181
1182 Derived or aliased constants
1183 gm::GrowAll gm::GrowLoX|gm::GrowLoY|gm::GrowHiX|gm::GrowHiY
1184 gm::Center gm::XCenter|gm::YCenter
1185 gm::Client gm::GrowHiX|gm::GrowHiY
1186 gm::Right gm::GrowLoX|gm::GrowHiY
1187 gm::Left gm::GrowHiY
1188 gm::Floor gm::GrowHiX
1189
1190 See also: "Move", "origin"
1191
1192 firstClick BOOLEAN
1193 If 0, a widget bypasses first mouse click on it, if the top-level
1194 window it belongs to was not activated, so selecting such a widget
1195 it takes two mouse clicks.
1196
1197 Default value is 1
1198
1199 See also: "MouseDown", "selectable", "selected", "focused",
1200 "selectingButtons"
1201
1202 focused BOOLEAN
1203 Specifies whether a widget possesses the input focus or not.
1204 Disregards "::selectable" property on set-call.
1205
1206 See also: "selectable", "selected", "selectedWidget", "KeyDown"
1207
1208 geomWidth, geomHeight, geomSize
1209 Three properties that select geometry request size. Writing and
1210 reading to "::geomWidth" and "::geomHeight" is equivalent to
1211 "::geomSize". The properies are run-time only, and behave
1212 differently under different circumstances:
1213
1214 · As the properties are run-time only, they can not be set in the
1215 profile, and their initial value is fetched from "::size"
1216 property. Thus, setting the explicit size is aditionally sets
1217 the advised size in case the widget is to be used with the Tk
1218 geometry managers.
1219
1220 · Setting the properties under the "gt::GrowMode" geometry
1221 manager also sets the corresponding "::width", "::height", or
1222 "::size". When the properties are read, though, the real size
1223 properties are not read; the values are kept separately.
1224
1225 · Setting the properties under Tk geometry managers cause widgets
1226 size and position changed according to the geometry manager
1227 policy.
1228
1229 height
1230 Maintains the height of a widget.
1231
1232 See also: "width", "growMode", "Move", "Size", "get_virtual_size",
1233 "sizeMax", "sizeMin"
1234
1235 helpContext STRING
1236 A string that binds a widget, a logical part it plays with the
1237 application and an interactive help topic. STRING format is defined
1238 as POD link ( see perlpod ) - "manpage/section", where 'manpage' is
1239 the file with POD content and 'section' is the topic inside the
1240 manpage.
1241
1242 See also: "help"
1243
1244 hiliteBackColor COLOR
1245 The color used to draw alternate background areas with high
1246 contrast.
1247
1248 See also: "hiliteColor", "colorIndex", "ColorChanged"
1249
1250 hiliteColor COLOR
1251 The color used to draw alternate foreground areas with high
1252 contrast.
1253
1254 See also: "hiliteBackColor", "colorIndex", "ColorChanged"
1255
1256 hint TEXT
1257 A text, shown under mouse pointer if it is hovered over a widget
1258 longer than "Prima::Application::hintPause" timeout. The text shows
1259 only if the "::showHint" is 1.
1260
1261 See also: "hintVisible", "showHint", "ownerHint", "ownerShowHint"
1262
1263 hintVisible BOOLEAN
1264 If called in get-form, returns whether the hint label is shown or
1265 not. If in set-form, immediately turns on or off the hint label,
1266 disregarding the timeouts. It does regard the mouse pointer
1267 location, however, and does not turn on the hint label if the
1268 pointer is away.
1269
1270 See also: "hint", "showHint", "ownerHint", "ownerShowHint"
1271
1272 layered BOOLEAN
1273 If set, the widget will try to use alpha transparency available on
1274 the system. See "Layering" in Prima::Image for more details.
1275
1276 Default: false
1277
1278 See also: "is_surface_layered"
1279
1280 Note: In Windows, mouse events will not be delivered to the layered
1281 widget if the pixel under the mouse pointer is fully transparent.
1282
1283 In X11, you need to run a composition manager, f.ex. compiz or
1284 xcompmgr.
1285
1286 left INTEGER
1287 Maintains the left boundary of a widget. If changed, does not
1288 affect the widget width; but does so, if called in "set()" together
1289 with "::right".
1290
1291 See also: "bottom", "right", "top", "origin", "rect", "growMode",
1292 "Move"
1293
1294 light3DColor COLOR
1295 The color used to draw light shades.
1296
1297 See also: "dark3DColor", "colorIndex", "ColorChanged"
1298
1299 ownerBackColor BOOLEAN
1300 If 1, the background color is synchronized with the owner's.
1301 Automatically set to 0 if "::backColor" property is explicitly set.
1302
1303 See also: "ownerColor", "backColor", "colorIndex"
1304
1305 ownerColor BOOLEAN
1306 If 1, the foreground color is synchronized with the owner's.
1307 Automatically set to 0 if "::color" property is explicitly set.
1308
1309 See also: "ownerBackColor", "color", "colorIndex"
1310
1311 ownerFont BOOLEAN
1312 If 1, the font is synchronized with the owner's. Automatically set
1313 to 0 if "::font" property is explicitly set.
1314
1315 See also: "font", "FontChanged"
1316
1317 ownerHint BOOLEAN
1318 If 1, the hint is synchronized with the owner's. Automatically set
1319 to 0 if "::hint" property is explicitly set.
1320
1321 See also: "hint", "showHint", "hintVisible", "ownerShowHint"
1322
1323 ownerShowHint BOOLEAN
1324 If 1, the show hint flag is synchronized with the owner's.
1325 Automatically set to 0 if "::showHint" property is explicitly set.
1326
1327 See also: "hint", "showHint", "hintVisible", "ownerHint"
1328
1329 ownerPalette BOOLEAN
1330 If 1, the palette array is synchronized with the owner's.
1331 Automatically set to 0 if "::palette" property is explicitly set.
1332
1333 See also: "palette"
1334
1335 origin X Y
1336 Maintains the left and bottom boundaries of a widget relative to
1337 its owner ( or to the screen if "::clipOwner" is set to 0 ).
1338
1339 See also: "bottom", "right", "top", "left", "rect", "growMode",
1340 "Move"
1341
1342 packInfo %OPTIONS
1343 See Prima::Widget::pack
1344
1345 palette [ @PALETTE ]
1346 Specifies array of colors, that are desired to be present into the
1347 system palette, as close to the PALETTE as possible. This property
1348 works only if the graphic device allows palette operations. See
1349 "palette" in Prima::Drawable.
1350
1351 See also: "ownerPalette"
1352
1353 parentHandle SYSTEM_WINDOW
1354 If SYSTEM_WINDOW is a valid system-dependent window handle, then a
1355 widget becomes the child of the window specified, given the
1356 widget's "::clipOwner" is 0. The parent window can belong to
1357 another application.
1358
1359 Default value is undef.
1360
1361 See also: "clipOwner"
1362
1363 placeInfo %OPTIONS
1364 See Prima::Widget::place
1365
1366 pointer cr::XXX or ICON
1367 Specifies the pointer icon; discerns between "cr::XXX" constants
1368 and an icon. If an icon contains a hash variable "__pointerHotSpot"
1369 with an array of two integers, these integers will be treated as
1370 the pointer hot spot. In get-mode call, this variable is
1371 automatically assigned to an icon, if the result is an icon object.
1372
1373 See also: "pointerHotSpot", "pointerIcon", "pointerType"
1374
1375 pointerHotSpot X_OFFSET Y_OFFSET
1376 Specifies the hot spot coordinates of a pointer icon, associated
1377 with a widget.
1378
1379 See also: "pointer", "pointerIcon", "pointerType"
1380
1381 pointerIcon ICON
1382 Specifies the pointer icon, associated with a widget.
1383
1384 See also: "pointerHotSpot", "pointer", "pointerType"
1385
1386 pointerPos X_OFFSET Y_OFFSET
1387 Specifies the mouse pointer coordinates relative to widget's
1388 coordinates.
1389
1390 See also: "get_mouse_state", "screen_to_client", "client_to_screen"
1391
1392 pointerType TYPE
1393 Specifies the type of the pointer, associated with the widget.
1394 TYPE can accept one constant of "cr::XXX" set:
1395
1396 cr::Default same pointer type as owner's
1397 cr::Arrow arrow pointer
1398 cr::Text text entry cursor-like pointer
1399 cr::Wait hourglass
1400 cr::Size general size action pointer
1401 cr::Move general move action pointer
1402 cr::SizeWest, cr::SizeW right-move action pointer
1403 cr::SizeEast, cr::SizeE left-move action pointer
1404 cr::SizeWE general horizontal-move action pointer
1405 cr::SizeNorth, cr::SizeN up-move action pointer
1406 cr::SizeSouth, cr::SizeS down-move action pointer
1407 cr::SizeNS general vertical-move action pointer
1408 cr::SizeNW up-right move action pointer
1409 cr::SizeSE down-left move action pointer
1410 cr::SizeNE up-left move action pointer
1411 cr::SizeSW down-right move action pointer
1412 cr::Invalid invalid action pointer
1413 cr::User user-defined icon
1414
1415 All constants except "cr::User" and "cr::Default" present a system-
1416 defined pointers, their icons and hot spot offsets. "cr::User" is a
1417 sign that an icon object was specified explicitly via
1418 "::pointerIcon" property. "cr::Default" is a way to tell that a
1419 widget inherits its owner pointer type, no matter is it a system-
1420 defined pointer or a custom icon.
1421
1422 See also: "pointerHotSpot", "pointerIcon", "pointer"
1423
1424 popup OBJECT
1425 Manages a Prima::Popup object associated with a widget. The
1426 purpose of the popup object is to show a context menu when the user
1427 right-clicks or selects the corresponding keyboard combination.
1428 Prima::Widget can host many children objects, Prima::Popup as well.
1429 But only the one that is set in "::popup" property will be
1430 activated automatically.
1431
1432 The popup object can be destroyed safely; its cancellation can be
1433 done either via "popup(undef)" or "destroy()" call.
1434
1435 See also: "Prima::Menu", "Popup", "Menu", "popupItems",
1436 "popupColorIndex", "popupFont"
1437
1438 popupColorIndex INDEX, COLOR
1439 Maintains eight color properties of a pop-up context menu,
1440 associated with a widget. INDEX must be one of "ci::XXX" constants
1441 ( see "::colorIndex" property ).
1442
1443 See also: "popupItems", "popupFont", "popup"
1444
1445 popupColor COLOR
1446 Basic foreground in a popup context menu color.
1447
1448 See also: "popupItems", "popupColorIndex", "popupFont", "popup"
1449
1450 popupBackColor COLOR
1451 Basic background in a popup context menu color.
1452
1453 See also: "popupItems", "popupColorIndex", "popupFont", "popup"
1454
1455 popupDark3DColor COLOR
1456 Color for drawing dark shadings in a popup context menu.
1457
1458 See also: "popupItems", "popupColorIndex", "popupFont", "popup"
1459
1460 popupDisabledColor COLOR
1461 Foreground color for disabled items in a popup context menu.
1462
1463 See also: "popupItems", "popupColorIndex", "popupFont", "popup"
1464
1465 popupDisabledBackColor COLOR
1466 Background color for disabled items in a popup context menu.
1467
1468 See also: "popupItems", "popupColorIndex", "popupFont", "popup"
1469
1470 popupFont %FONT
1471 Maintains the font of a pop-up context menu, associated with a
1472 widget.
1473
1474 See also: "popupItems", "popupColorIndex", "popup"
1475
1476 popupHiliteColor COLOR
1477 Foreground color for selected items in a popup context menu.
1478
1479 See also: "popupItems", "popupColorIndex", "popupFont", "popup"
1480
1481 popupHiliteBackColor COLOR
1482 Background color for selected items in a popup context menu.
1483
1484 See also: "popupItems", "popupColorIndex", "popupFont", "popup"
1485
1486 popupItems [ ITEM_LIST ]
1487 Manages items of a Prima::Popup object associated with a widget.
1488 The ITEM_LIST format is same as "Prima::AbstractMenu::items" and is
1489 described in Prima::Menu.
1490
1491 See also: "popup", "popupColorIndex", "popupFont"
1492
1493 popupLight3DColor COLOR
1494 Color for drawing light shadings in a popup context menu.
1495
1496 See also: "popupItems", "popupColorIndex", "popupFont", "popup"
1497
1498 rect X_LEFT_OFFSET Y_BOTTOM_OFFSET X_RIGHT_OFFSET Y_TOP_OFFSET
1499 Maintains the rectangular boundaries of a widget relative to its
1500 owner ( or to the screen if "::clipOwner" is set to 0 ).
1501
1502 See also: "bottom", "right", "top", "left", "origin", "width",
1503 "height", "size" "growMode", "Move", "Size", "get_virtual_size",
1504 "sizeMax", "sizeMin"
1505
1506 right INTEGER
1507 Maintains the right boundary of a widget. If changed, does not
1508 affect the widget width; but does so, if called in "set()" together
1509 with "::left".
1510
1511 See also: "left", "bottom", "top", "origin", "rect", "growMode",
1512 "Move"
1513
1514 scaleChildren BOOLEAN
1515 If a widget has "::scaleChildren" set to 1, then the newly-created
1516 children widgets inserted in it will be scaled corresponding to the
1517 owner's "::designScale", given that widget's "::designScale" is not
1518 "undef" and the owner's is not [0,0].
1519
1520 Default is 1.
1521
1522 See also: "designScale"
1523
1524 selectable BOOLEAN
1525 If 1, a widget can be granted focus implicitly, or by means of the
1526 user actions. "select()" regards this property, and does not focus
1527 a widget that has "::selectable" set to 0.
1528
1529 Default value is 0
1530
1531 See also: "current", "currentWidget", "selected", "selectedWidget",
1532 "focused"
1533
1534 selected BOOLEAN
1535 If called in get-mode, returns whether a widget or one of its
1536 (grand-) children is focused. If in set-mode, either simply turns
1537 the system with no-focus state ( if 0 ), or sends input focus to
1538 itself or one of the widgets tracked down by "::currentWidget"
1539 chain.
1540
1541 See also: "current", "currentWidget", "selectable",
1542 "selectedWidget", "focused"
1543
1544 selectedWidget OBJECT
1545 Points to a child widget, that has property "::selected" set to 1.
1546
1547 See also: "current", "currentWidget", "selectable", "selected",
1548 "focused"
1549
1550 selectingButtons FLAGS
1551 FLAGS is a combination of "mb::XXX" ( mouse button ) flags. If a
1552 widget receives a click with a mouse button, that has the
1553 corresponding bit set in "::selectingButtons", then "select()" is
1554 called.
1555
1556 See also: "MouseDown", "firstClick", "selectable", "selected",
1557 "focused"
1558
1559 shape REGION
1560 Maintains the non-rectangular shape of a widget. When setting,
1561 REGION is either a Prima::Image object, with 0 bits treated as
1562 transparent pixels, and 1 bits as opaque pixels, or a Prima::Region
1563 object. When getting, it is either undef or a Prima::Region
1564 object.
1565
1566 Successive only if "sv::ShapeExtension" value is true.
1567
1568 showHint BOOLEAN
1569 If 1, the toolkit is allowed to show the hint label over a widget.
1570 If 0, the display of the hint is forbidden. The "::hint" property
1571 must contain non-empty string as well, if the hint label must be
1572 shown.
1573
1574 Default value is 1.
1575
1576 See also: "hint", "ownerShowHint", "hintVisible", "ownerHint"
1577
1578 size WIDTH HEIGHT
1579 Maintains the width and height of a widget.
1580
1581 See also: "width", "height" "growMode", "Move", "Size",
1582 "get_virtual_size", "sizeMax", "sizeMin"
1583
1584 sizeMax WIDTH HEIGHT
1585 Specifies the maximal size for a widget that it is allowed to
1586 accept.
1587
1588 See also: "width", "height", "size" "growMode", "Move", "Size",
1589 "get_virtual_size", "sizeMin"
1590
1591 sizeMin WIDTH HEIGHT
1592 Specifies the minimal size for a widget that it is allowed to
1593 accept.
1594
1595 See also: "width", "height", "size" "growMode", "Move", "Size",
1596 "get_virtual_size", "sizeMax"
1597
1598 syncPaint BOOLEAN
1599 If 0, the "Paint" request notifications are stacked until the event
1600 loop is called. If 1, every time the widget surface gets
1601 invalidated, the "Paint" notification is called.
1602
1603 Default value is 0.
1604
1605 See also: "invalidate_rect", "repaint", "validate_rect", "Paint"
1606
1607 tabOrder INTEGER
1608 Maintains the order in which tab- and shift-tab- key navigation
1609 algorithms select the sibling widgets. INTEGER is unique among the
1610 sibling widgets. In set mode, if INTEGER value is already taken,
1611 the occupier is assigned another unique value, but without
1612 destruction of a queue - widgets with ::tabOrder greater than of
1613 the widget, receive their new values too. Special value -1 is
1614 accepted as 'the end of list' indicator; the negative value is
1615 never returned.
1616
1617 See also: "tabStop", "next_tab", "selectable", "selected",
1618 "focused"
1619
1620 tabStop BOOLEAN
1621 Specifies whether a widget is interested in tab- and shift-tab- key
1622 navigation or not.
1623
1624 Default value is 1.
1625
1626 See also: "tabOrder", "next_tab", "selectable", "selected",
1627 "focused"
1628
1629 text TEXT
1630 A text string for generic purpose. Many Prima::Widget descendants
1631 use this property heavily - buttons, labels, input lines etc, but
1632 Prima::Widget itself does not.
1633
1634 top INTEGER
1635 Maintains the upper boundary of a widget. If changed, does not
1636 affect the widget height; but does so, if called in "set()"
1637 together with "::bottom".
1638
1639 See also: "left", "right", "bottom", "origin", "rect", "growMode",
1640 "Move"
1641
1642 transparent BOOLEAN
1643 Specifies whether the background of a widget before it starts
1644 painting is of any importance. If 1, a widget can gain certain
1645 transparency look if it does not clear the background during
1646 "Paint" event.
1647
1648 Default value is 0
1649
1650 See also: "Paint", "buffered".
1651
1652 visible BOOLEAN
1653 Specifies whether a widget is visible or not. See "Visibility".
1654
1655 See also: "Show", "Hide", "showing", "exposed"
1656
1657 widgetClass CLASS
1658 Maintains the integer value, designating the color class that is
1659 defined by the system and is associated with Prima::Widget eight
1660 basic color properties. CLASS can be one of "wc::XXX" constants:
1661
1662 wc::Undef
1663 wc::Button
1664 wc::CheckBox
1665 wc::Combo
1666 wc::Dialog
1667 wc::Edit
1668 wc::InputLine
1669 wc::Label
1670 wc::ListBox
1671 wc::Menu
1672 wc::Popup
1673 wc::Radio
1674 wc::ScrollBar
1675 wc::Slider
1676 wc::Widget or wc::Custom
1677 wc::Window
1678 wc::Application
1679
1680 These constants are not associated with the toolkit classes; any
1681 class can use any of these constants in "::widgetClass".
1682
1683 See also: "map_color", "colorIndex"
1684
1685 widgets @WIDGETS
1686 In get-mode, returns list of immediate children widgets (identical
1687 to "get_widgets"). In set-mode accepts set of widget profiles, as
1688 "insert" does, as a list or an array. This way it is possible to
1689 create widget hierarchy in a single call.
1690
1691 width WIDTH
1692 Maintains the width of a widget.
1693
1694 See also: "height" "growMode", "Move", "Size", "get_virtual_size",
1695 "sizeMax", "sizeMin"
1696
1697 x_centered BOOLEAN
1698 A write-only property. Once set, widget is centered by the
1699 horizontal axis relative to its owner.
1700
1701 See also: "centered", "y_centered", "growMode", "origin", "Move".
1702
1703 y_centered BOOLEAN
1704 A write-only property. Once set, widget is centered by the vertical
1705 axis relative to its owner.
1706
1707 See also: "x_centered", "centered", "growMode", "origin", "Move".
1708
1709 Methods
1710 bring_to_front
1711 Sends a widget on top of all other siblings widgets
1712
1713 See also: "insert_behind", "send_to_back", "ZOrderChanged"
1714 ,"first", "next", "prev", "last"
1715
1716 can_close
1717 Sends "Close" message, and returns its boolean exit state.
1718
1719 See also: "Close", "close"
1720
1721 client_to_screen @OFFSETS
1722 Maps array of X and Y integer offsets from widget to screen
1723 coordinates. Returns the mapped OFFSETS.
1724
1725 See also: "screen_to_client", "clipOwner"
1726
1727 close
1728 Calls "can_close()", and if successful, destroys a widget. Returns
1729 the "can_close()" result.
1730
1731 See also: "can_close", "Close"
1732
1733 defocus
1734 Alias for focused(0) call
1735
1736 See also: "focus", "focused", "Enter", "Leave"
1737
1738 deselect
1739 Alias for selected(0) call
1740
1741 See also: "select", "selected", "Enter", "Leave"
1742
1743 exposed
1744 Returns a boolean value, indicating whether a widget is at least
1745 partly visible on the screen. Never returns 1 if a widget has
1746 "::visible" set to 0.
1747
1748 See also: "visible", "showing", "Show", "Hide"
1749
1750 fetch_resource CLASS_NAME, NAME, CLASS_RESOURCE, RESOURCE, OWNER,
1751 RESOURCE_TYPE = fr::String
1752 Returns a system-defined scalar of resource, defined by the widget
1753 hierarchy, its class, name and owner. RESOURCE_TYPE can be one of
1754 type qualificators:
1755
1756 fr::Color - color resource
1757 fr::Font - font resource
1758 fs::String - text string resource
1759
1760 Such a number of the parameters is used because the method can be
1761 called before a widget is created. CLASS_NAME is widget class
1762 string, NAME is widget name. CLASS_RESOURCE is class of resource,
1763 and RESOURCE is the resource name.
1764
1765 For example, resources 'color' and 'disabledColor' belong to the
1766 resource class 'Foreground'.
1767
1768 first
1769 Returns the first ( from bottom ) sibling widget in Z-order.
1770
1771 See also: "last", "next", "prev"
1772
1773 focus
1774 Alias for focused(1) call
1775
1776 See also: "defocus", "focused", "Enter", "Leave"
1777
1778 hide
1779 Sets widget "::visible" to 0.
1780
1781 See also: "hide", "visible", "Show", "Hide", "showing", "exposed"
1782
1783 hide_cursor
1784 Hides the cursor. As many times "hide_cursor()" was called, as many
1785 time its counterpart "show_cursor()" must be called to reach the
1786 cursor's initial state.
1787
1788 See also: "show_cursor", "cursorVisible"
1789
1790 help
1791 Starts an interactive help viewer opened on "::helpContext" string
1792 value.
1793
1794 The string value is combined from the widget's owner
1795 "::helpContext" strings if the latter is empty or begins with a
1796 slash. A special meaning is assigned to an empty string " " - the
1797 help() call fails when such value is found to be the section
1798 component. This feature can be useful when a window or a dialog
1799 presents a standalone functionality in a separate module, and the
1800 documentation is related more to the module than to an embedding
1801 program. In such case, the grouping widget holds "::helpContext" as
1802 a pod manpage name with a trailing slash, and its children widgets
1803 are assigned "::helpContext" to the topics without the manpage but
1804 the leading slash instead. If the grouping widget has an empty
1805 string " " as "::helpContext" then the help is forced to be
1806 unavailable for all the children widgets.
1807
1808 See also: "helpContext"
1809
1810 insert CLASS, %PROFILE [[ CLASS, %PROFILE], ... ]
1811 Creates one or more widgets with "owner" property set to the caller
1812 widget, and returns the list of references to the newly created
1813 widgets.
1814
1815 Has two calling formats:
1816
1817 Single widget
1818 $parent-> insert( 'Child::Class',
1819 name => 'child',
1820 ....
1821 );
1822
1823 Multiple widgets
1824 $parent-> insert(
1825 [
1826 'Child::Class1',
1827 name => 'child1',
1828 ....
1829 ],
1830 [
1831 'Child::Class2',
1832 name => 'child2',
1833 ....
1834 ],
1835 );
1836
1837 insert_behind OBJECT
1838 Sends a widget behind the OBJECT on Z-axis, given that the OBJECT
1839 is a sibling to the widget.
1840
1841 See also: "bring_to_front", "send_to_back", "ZOrderChanged"
1842 ,"first", "next", "prev", "last"
1843
1844 invalidate_rect X_LEFT_OFFSET Y_BOTTOM_OFFSET X_RIGHT_OFFSET
1845 Y_TOP_OFFSET
1846 Marks the rectangular area of a widget as 'invalid', so re-painting
1847 of the area happens. See "Graphic content".
1848
1849 See also: "validate_rect", "get_invalid_rect", "repaint", "Paint",
1850 "syncPaint", "update_view"
1851
1852 is_surface_layered
1853 Returns true if both the widget and it's top-most parent are
1854 layered. If the widget itself is top-most, i.e. a window, a non-
1855 clipOwner widget, or a child to application, then is the same as
1856 "layered".
1857
1858 See also: layered
1859
1860 key_down CODE, KEY = kb::NoKey, MOD = 0, REPEAT = 1, POST = 0
1861 The method sends or posts ( POST flag ) simulated "KeyDown" event
1862 to the system. CODE, KEY, MOD and REPEAT are the parameters to be
1863 passed to the notification callbacks.
1864
1865 See also: "key_up", "key_event", "KeyDown"
1866
1867 key_event COMMAND, CODE, KEY = kb::NoKey, MOD = 0, REPEAT = 1, POST = 0
1868 The method sends or posts ( POST flag ) simulated keyboard event to
1869 the system. CODE, KEY, MOD and REPEAT are the parameters to be
1870 passed to an eventual "KeyDown" or "KeyUp" notifications. COMMAND
1871 is allowed to be either "cm::KeyDown" or "cm::KeyUp".
1872
1873 See also: "key_down", "key_up", "KeyDown", "KeyUp"
1874
1875 key_up CODE, KEY = kb::NoKey, MOD = 0, POST = 0
1876 The method sends or posts ( POST flag ) simulated "KeyUp" event to
1877 the system. CODE, KEY and MOD are the parameters to be passed to
1878 the notification callbacks.
1879
1880 See also: "key_down", "key_event", "KeyUp"
1881
1882 last
1883 Returns the last ( the topmost ) sibling widget in Z-order.
1884
1885 See also: "first", "next", "prev"
1886
1887 lock
1888 Turns off the ability of a widget to re-paint itself. As many
1889 times "lock()" was called, as may times its counterpart, "unlock()"
1890 must be called to enable re-painting again. Returns a boolean
1891 success flag.
1892
1893 See also: "unlock", "repaint", "Paint", "get_locked"
1894
1895 map_color COLOR
1896 Transforms "cl::XXX" and "ci::XXX" combinations into RGB color
1897 representation and returns the result. If COLOR is already in RGB
1898 format, no changes are made.
1899
1900 See also: "colorIndex"
1901
1902 mouse_click BUTTON = mb::Left, MOD = 0, X = 0, Y = 0, DBL_CLICK = 0,
1903 POST = 0
1904 The method sends or posts ( POST flag ) simulated "MouseClick"
1905 event to the system. BUTTON, MOD, X, Y, and DBL_CLICK are the
1906 parameters to be passed to the notification callbacks.
1907
1908 See also: "MouseDown", "MouseUp", "MouseWheel", "MouseMove",
1909 "MouseEnter", "MouseLeave"
1910
1911 mouse_down BUTTON = mb::Left, MOD = 0, X = 0, Y = 0, POST = 0
1912 The method sends or posts ( POST flag ) simulated "MouseDown" event
1913 to the system. BUTTON, MOD, X, and Y are the parameters to be
1914 passed to the notification callbacks.
1915
1916 See also: "MouseUp", "MouseWheel", "MouseClick", "MouseMove",
1917 "MouseEnter", "MouseLeave"
1918
1919 mouse_enter MOD = 0, X = 0, Y = 0, POST = 0
1920 The method sends or posts ( POST flag ) simulated "MouseEnter"
1921 event to the system. MOD, X, and Y are the parameters to be passed
1922 to the notification callbacks.
1923
1924 See also: "MouseDown", "MouseUp", "MouseWheel", "MouseClick",
1925 "MouseMove", "MouseLeave"
1926
1927 mouse_event COMMAND = cm::MouseDown, BUTTON = mb::Left, MOD = 0, X = 0,
1928 Y = 0, DBL_CLICK = 0, POST = 0
1929 The method sends or posts ( POST flag ) simulated mouse event to
1930 the system. BUTTON, MOD, X, Y and DBL_CLICK are the parameters to
1931 be passed to an eventual mouse notifications. COMMAND is allowed
1932 to be one of "cm::MouseDown", "cm::MouseUp", "cm::MouseWheel",
1933 "cm::MouseClick", "cm::MouseMove", "cm::MouseEnter",
1934 "cm::MouseLeave" constants.
1935
1936 See also: "mouse_down", "mouse_up", "mouse_wheel", "mouse_click",
1937 "mouse_move", "mouse_enter", "mouse_leave", "MouseDown", "MouseUp",
1938 "MouseWheel", "MouseClick", "MouseMove", "MouseEnter", "MouseLeave"
1939
1940 mouse_leave
1941 The method sends or posts ( POST flag ) simulated "MouseLeave"
1942 event to the system.
1943
1944 See also: "MouseDown", "MouseUp", "MouseWheel", "MouseClick",
1945 "MouseMove", "MouseEnter", "MouseLeave"
1946
1947 mouse_move MOD = 0, X = 0, Y = 0, POST = 0
1948 The method sends or posts ( POST flag ) simulated "MouseMove" event
1949 to the system. MOD, X, and Y are the parameters to be passed to the
1950 notification callbacks.
1951
1952 See also: "MouseDown", "MouseUp", "MouseWheel", "MouseClick",
1953 "MouseEnter", "MouseLeave"
1954
1955 mouse_up BUTTON = mb::Left, MOD = 0, X = 0, Y = 0, POST = 0
1956 The method sends or posts ( POST flag ) simulated "MouseUp" event
1957 to the system. BUTTON, MOD, X, and Y are the parameters to be
1958 passed to the notification callbacks.
1959
1960 See also: "MouseDown", "MouseWheel", "MouseClick", "MouseMove",
1961 "MouseEnter", "MouseLeave"
1962
1963 mouse_wheel MOD = 0, X = 0, Y = 0, INCR = 0, POST = 0
1964 The method sends or posts ( POST flag ) simulated "MouseUp" event
1965 to the system. MOD, X, Y and INCR are the parameters to be passed
1966 to the notification callbacks.
1967
1968 See also: "MouseDown", "MouseUp", "MouseClick", "MouseMove",
1969 "MouseEnter", "MouseLeave"
1970
1971 next
1972 Returns the neighbor sibling widget, next ( above ) in Z-order. If
1973 none found, undef is returned.
1974
1975 See also: "first", "last", "prev"
1976
1977 next_tab FORWARD = 1
1978 Returns the next widget in the sorted by "::tabOrder" list of
1979 sibling widgets. FORWARD is a boolean lookup direction flag. If
1980 none found, the first ( or the last, depending on FORWARD flag )
1981 widget is returned. Only widgets with "::tabStop" set to 1
1982 participate.
1983
1984 Also used by the internal keyboard navigation code.
1985
1986 See also: "next_positional", "tabOrder", "tabStop", "selectable"
1987
1988 next_positional DELTA_X DELTA_Y
1989 Returns a sibling, (grand-)child of a sibling or (grand-)child
1990 widget, that matched best the direction specified by DELTA_X and
1991 DELTA_Y. At one time, only one of these parameters can be zero;
1992 another parameter must be either 1 or -1.
1993
1994 Also used by the internal keyboard navigation code.
1995
1996 See also: "next_tab", "origin"
1997
1998 pack, packForget, packSlaves
1999 See Prima::Widget::pack
2000
2001 place, placeForget, placeSlaves
2002 See Prima::Widget::place
2003
2004 prev
2005 Returns the neighbor sibling widget, previous ( below ) in Z-order.
2006 If none found, undef is returned.
2007
2008 See also: "first", "last", "next"
2009
2010 repaint
2011 Marks the whole widget area as 'invalid', so re-painting of the
2012 area happens. See "Graphic content".
2013
2014 See also: "validate_rect", "get_invalid_rect", "invalidate_rect",
2015 "Paint", "update_view", "syncPaint"
2016
2017 rect_bevel $CANVAS, @RECT, %OPTIONS
2018 Draws a rectangular area, similar to produced by "rect3d" over
2019 @RECT that is 4-integer coordinates of the area, but implicitly
2020 using widget's "light3DColor" and "dark3DColor" properties' values.
2021 The following options are recognized:
2022
2023 fill COLOR
2024 If set, the area is filled with COLOR, ortherwise is left
2025 intact.
2026
2027 width INTEGER
2028 Width of the border in pixels
2029
2030 concave BOOLEAN
2031 If 1, draw a concave area, bulged otherwise
2032
2033 responsive
2034 Returns a boolean flag, indicating whether a widget and its owners
2035 have all "::enabled" 1 or not. Useful for fast check if a widget
2036 should respond to the user actions.
2037
2038 See also: "enabled"
2039
2040 screen_to_client @OFFSETS
2041 Maps array of X and Y integer offsets from screen to widget
2042 coordinates. Returns the mapped OFFSETS.
2043
2044 See also: "client_to_screen"
2045
2046 scroll DELTA_X DELTA_Y %OPTIONS
2047 Scrolls the graphic context area by DELTA_X and DELTA_Y pixels.
2048 OPTIONS is hash, that contains optional parameters to the scrolling
2049 procedure:
2050
2051 clipRect [X1, Y1, X2, Y2]
2052 The clipping area is confined by X1, Y1, X2, Y2 rectangular
2053 area. If not specified, the clipping area covers the whole
2054 widget. Only the bits, covered by clipRect are affected. Bits
2055 scrolled from the outside of the rectangle to the inside are
2056 painted; bits scrolled from the inside of the rectangle to the
2057 outside are not painted.
2058
2059 confineRect [X1, Y1, X2, Y2]
2060 The scrolling area is confined by X1, Y1, X2, Y2 rectangular
2061 area. If not specified, the scrolling area covers the whole
2062 widget.
2063
2064 withChildren BOOLEAN
2065 If 1, the scrolling performs with the eventual children widgets
2066 change their positions to DELTA_X and DELTA_Y as well.
2067
2068 Cannot be used inside paint state.
2069
2070 See also: "Paint", "get_invalid_rect"
2071
2072 select
2073 Alias for selected(1) call
2074
2075 See also: "deselect", "selected", "Enter", "Leave"
2076
2077 send_to_back
2078 Sends a widget at bottom of all other siblings widgets
2079
2080 See also: "insert_behind", "bring_to_front", "ZOrderChanged"
2081 ,"first", "next", "prev", "last"
2082
2083 show
2084 Sets widget "::visible" to 1.
2085
2086 See also: "hide", "visible", "Show", "Hide", "showing", "exposed"
2087
2088 show_cursor
2089 Shows the cursor. As many times "hide_cursor()" was called, as many
2090 time its counterpart "show_cursor()" must be called to reach the
2091 cursor's initial state.
2092
2093 See also: "hide_cursor", "cursorVisible"
2094
2095 showing
2096 Returns a boolean value, indicating whether the widget and its
2097 owners have all "::visible" 1 or not.
2098
2099 unlock
2100 Turns on the ability of a widget to re-paint itself. As many times
2101 "lock()" was called, as may times its counterpart, "unlock()" must
2102 be called to enable re-painting again. When last "unlock()" is
2103 called, an implicit "repaint()" call is made. Returns a boolean
2104 success flag.
2105
2106 See also: "lock", "repaint", "Paint", "get_locked"
2107
2108 update_view
2109 If any parts of a widget were marked as 'invalid' by either
2110 "invalidate_rect()" or "repaint()" calls or the exposure caused by
2111 window movements ( or any other), then "Paint" notification is
2112 immediately called. If no parts are invalid, no action is
2113 performed. If a widget has "::syncPaint" set to 1, "update_view()"
2114 is always a no-operation call.
2115
2116 See also: "invalidate_rect", "get_invalid_rect", "repaint",
2117 "Paint", "syncPaint", "update_view"
2118
2119 validate_rect X_LEFT_OFFSET Y_BOTTOM_OFFSET X_RIGHT_OFFSET Y_TOP_OFFSET
2120 Reverses the effect of "invalidate_rect()", restoring the original,
2121 'valid' state of widget area covered by the rectangular area
2122 passed. If a widget with previously invalid areas was wholly
2123 validated by this method, no "Paint" notifications occur.
2124
2125 See also: "invalidate_rect", "get_invalid_rect", "repaint",
2126 "Paint", "syncPaint", "update_view"
2127
2128 Get-methods
2129 get_default_font
2130 Returns the default font for a Prima::Widget class.
2131
2132 See also: "font"
2133
2134 get_default_popup_font
2135 Returns the default font for a Prima::Popup class.
2136
2137 See also: "font"
2138
2139 get_invalid_rect
2140 Returns the result of successive calls "invalidate_rect()",
2141 "validate_rect()" and "repaint()", as a rectangular area ( four
2142 integers ) that cover all invalid regions in a widget. If none
2143 found, (0,0,0,0) is returned.
2144
2145 See also: "validate_rect", "invalidate_rect", "repaint", "Paint",
2146 "syncPaint", "update_view"
2147
2148 get_handle
2149 Returns a system handle for a widget
2150
2151 See also: "get_parent_handle", "Window::get_client_handle"
2152
2153 get_locked
2154 Returns 1 if a widget is in "lock()" - initiated repaint-blocked
2155 state.
2156
2157 See also: "lock", "unlock"
2158
2159 get_mouse_state
2160 Returns a combination of "mb::XXX" constants, reflecting the
2161 currently pressed mouse buttons.
2162
2163 See also: "pointerPos", "get_shift_state"
2164
2165 get_parent
2166 Returns the owner widget that clips the widget boundaries, or
2167 application object if a widget is top-level.
2168
2169 See also: "clipOwner"
2170
2171 get_parent_handle
2172 Returns a system handle for a parent of a widget, a window that
2173 belongs to another program. Returns 0 if the widget's owner and
2174 parent are in the same application and process space.
2175
2176 See also: "get_handle", "clipOwner"
2177
2178 get_pointer_size
2179 Returns two integers, width and height of a icon, that the system
2180 accepts as valid for a pointer. If the icon is supplied that is
2181 more or less than these values, it is truncated or padded with
2182 transparency bits, but is not stretched. Can be called with class
2183 syntax.
2184
2185 get_shift_state
2186 Returns a combination of "km::XXX" constants, reflecting the
2187 currently pressed keyboard modificator buttons.
2188
2189 See also: "get_shift_state"
2190
2191 get_virtual_size
2192 Returns virtual width and height of a widget. See "Geometry",
2193 Implicit size regulations.
2194
2195 See also: "width", "height", "size" "growMode", "Move", "Size",
2196 "sizeMax", "sizeMin"
2197
2198 get_widgets
2199 Returns list of children widgets.
2200
2201 Events
2202 Change
2203 Generic notification, used for Prima::Widget descendants;
2204 Prima::Widget itself neither calls not uses the event. Designed to
2205 be called when an arbitrary major state of a widget is changed.
2206
2207 Click
2208 Generic notification, used for Prima::Widget descendants;
2209 Prima::Widget itself neither calls not uses the event. Designed to
2210 be called when an arbitrary major action for a widget is called.
2211
2212 Close
2213 Triggered by "can_close()" and "close()" functions. If the event
2214 flag is cleared during execution, these functions fail.
2215
2216 See also: "close", "can_close"
2217
2218 ColorChanged INDEX
2219 Called when one of widget's color properties is changed, either by
2220 direct property change or by the system. INDEX is one of "ci::XXX"
2221 constants.
2222
2223 See also: "colorIndex"
2224
2225 Disable
2226 Triggered by a successive enabled(0) call
2227
2228 See also: "Enable", "enabled", "responsive"
2229
2230 DragDrop X Y
2231 Design in progress. Supposed to be triggered when a drag-and-drop
2232 session started by the widget. X and Y are mouse pointer
2233 coordinates on the session start.
2234
2235 See also: "DragOver", "EndDrag"
2236
2237 DragOver X Y STATE
2238 Design in progress. Supposed to be called when a mouse pointer is
2239 passed over a widget during a drag-and-drop session. X and Y are
2240 mouse pointer coordinates, identical to "MouseMove" X Y parameters.
2241 STATE value is undefined.
2242
2243 See also: "DragDrop", "EndDrag"
2244
2245 Enable
2246 Triggered by a successive enabled(1) call
2247
2248 See also: "Disable", "enabled", "responsive"
2249
2250 EndDrag X Y
2251 Design in progress. Supposed to be called when a drag-and-drop
2252 session is finished successfully over a widget. X and Y are mouse
2253 pointer coordinates on the session end.
2254
2255 See also: "DragDrop", "DragOver"
2256
2257 Enter
2258 Called when a widget receives the input focus.
2259
2260 See also: "Leave", "focused", "selected"
2261
2262 FontChanged
2263 Called when a widget font is changed either by direct property
2264 change or by the system.
2265
2266 See also: "font", "ColorChanged"
2267
2268 Hide
2269 Triggered by a successive visible(0) call
2270
2271 See also: "Show", "visible", "showing", "exposed"
2272
2273 Hint SHOW_FLAG
2274 Called when the hint label is about to show or hide, depending on
2275 SHOW_FLAG. The hint show or hide action fails, if the event flag is
2276 cleared during execution.
2277
2278 See also: "showHint", "ownerShowHint", "hintVisible", "ownerHint"
2279
2280 KeyDown CODE, KEY, MOD, REPEAT
2281 Sent to the focused widget when the user presses a key. CODE
2282 contains an eventual character code, KEY is one of "kb::XXX"
2283 constants, MOD is a combination of the modificator keys pressed
2284 when the event occurred ( "km::XXX" ). REPEAT is how many times the
2285 key was pressed; usually it is 1. ( see "::briefKeys" ).
2286
2287 The valid "km::" constants are:
2288
2289 km::Shift
2290 km::Ctrl
2291 km::Alt
2292 km::KeyPad
2293 km::DeadKey
2294 km::Unicode
2295
2296 The valid "kb::" constants are grouped in several sets. Some codes
2297 are aliased, like, "kb::PgDn" and "kb::PageDown".
2298
2299 Modificator keys
2300 kb::ShiftL kb::ShiftR kb::CtrlL kb::CtrlR
2301 kb::AltL kb::AltR kb::MetaL kb::MetaR
2302 kb::SuperL kb::SuperR kb::HyperL kb::HyperR
2303 kb::CapsLock kb::NumLock kb::ScrollLock kb::ShiftLock
2304
2305 Keys with character code defined
2306 kb::Backspace kb::Tab kb::Linefeed kb::Enter
2307 kb::Return kb::Escape kb::Esc kb::Space
2308
2309 Function keys
2310 kb::F1 .. kb::F30
2311 kb::L1 .. kb::L10
2312 kb::R1 .. kb::R10
2313
2314 Other
2315 kb::Clear kb::Pause kb::SysRq kb::SysReq
2316 kb::Delete kb::Home kb::Left kb::Up
2317 kb::Right kb::Down kb::PgUp kb::Prior
2318 kb::PageUp kb::PgDn kb::Next kb::PageDown
2319 kb::End kb::Begin kb::Select kb::Print
2320 kb::PrintScr kb::Execute kb::Insert kb::Undo
2321 kb::Redo kb::Menu kb::Find kb::Cancel
2322 kb::Help kb::Break kb::BackTab
2323
2324 See also: "KeyUp", "briefKeys", "key_down", "help", "popup",
2325 "tabOrder", "tabStop", "accelTable"
2326
2327 KeyUp CODE, KEY, MOD
2328 Sent to the focused widget when the user releases a key. CODE
2329 contains an eventual character code, KEY is one of "kb::XXX"
2330 constants, MOD is a combination of the modificator keys pressed
2331 when the event occurred ( "km::XXX" ).
2332
2333 See also: "KeyDown", "key_up"
2334
2335 Leave
2336 Called when the input focus is removed from a widget
2337
2338 See also: "Enter", "focused", "selected"
2339
2340 Menu MENU VAR_NAME
2341 Called before the user-navigated menu ( pop-up or pull-down ) is
2342 about to show another level of submenu on the screen. MENU is
2343 Prima::AbstractMenu descendant, that children to a widget, and
2344 VAR_NAME is the name of the menu item that is about to be shown.
2345
2346 Used for making changes in the menu structures dynamically.
2347
2348 See also: "popupItems"
2349
2350 MouseClick BUTTON, MOD, X, Y, DOUBLE_CLICK
2351 Called when a mouse click ( button is pressed, and then released
2352 within system-defined interval of time ) is happened in the widget
2353 area. BUTTON is one of "mb::XXX" constants, MOD is a combination of
2354 "km::XXX" constants, reflecting pressed modificator keys during the
2355 event, X and Y are the mouse pointer coordinates. DOUBLE_CLICK is a
2356 boolean flag, set to 1 if it was a double click, 0 if a single.
2357
2358 "mb::XXX" constants are:
2359
2360 mb::b1 or mb::Left
2361 mb::b2 or mb::Middle
2362 mb::b3 or mb::Right
2363 mb::b4
2364 mb::b5
2365 mb::b6
2366 mb::b7
2367 mb::b8
2368
2369 See also: "MouseDown", "MouseUp", "MouseWheel", "MouseMove",
2370 "MouseEnter", "MouseLeave"
2371
2372 MouseDown BUTTON, MOD, X, Y
2373 Occurs when the user presses mouse button on a widget. BUTTON is
2374 one of "mb::XXX" constants, MOD is a combination of "km::XXX"
2375 constants, reflecting the pressed modificator keys during the
2376 event, X and Y are the mouse pointer coordinates.
2377
2378 See also: "MouseUp", "MouseClick", "MouseWheel", "MouseMove",
2379 "MouseEnter", "MouseLeave"
2380
2381 MouseEnter MOD, X, Y
2382 Occurs when the mouse pointer is entered the area occupied by a
2383 widget ( without mouse button pressed ). MOD is a combination of
2384 "km::XXX" constants, reflecting the pressed modificator keys during
2385 the event, X and Y are the mouse pointer coordinates.
2386
2387 See also: "MouseDown", "MouseUp", "MouseClick", "MouseWheel",
2388 "MouseMove", "MouseLeave"
2389
2390 MouseLeave
2391 Occurs when the mouse pointer is driven off the area occupied by a
2392 widget ( without mouse button pressed ).
2393
2394 See also: "MouseDown", "MouseUp", "MouseClick", "MouseWheel",
2395 "MouseMove", "MouseEnter"
2396
2397 MouseMove MOD, X, Y
2398 Occurs when the mouse pointer is transported over a widget. MOD is
2399 a combination of "km::XXX" constants, reflecting the pressed
2400 modificator keys during the event, X and Y are the mouse pointer
2401 coordinates.
2402
2403 See also: "MouseDown", "MouseUp", "MouseClick", "MouseWheel",
2404 "MouseEnter", "MouseLeave"
2405
2406 MouseUp BUTTON, MOD, X, Y
2407 Occurs when the user depresses mouse button on a widget. BUTTON is
2408 one of "mb::XXX" constants, MOD is a combination of "km::XXX"
2409 constants, reflecting the pressed modificator keys during the
2410 event, X and Y are the mouse pointer coordinates.
2411
2412 See also: "MouseDown", "MouseClick", "MouseWheel", "MouseMove",
2413 "MouseEnter", "MouseLeave"
2414
2415 MouseWheel MOD, X, Y, INCR
2416 Occurs when the user rotates mouse wheel on a widget. MOD is a
2417 combination of "km::XXX" constants, reflecting the pressed
2418 modificator keys during the event, INCR is the wheel movement,
2419 scaled by 120. +120 is a step upwards, or -120 downwards. For
2420 wheels which are discrete button clicks INCR is +/-120 but other
2421 devices may give other amounts. A widget should scroll by INCR/120
2422 many units, or partial unit, for whatever its unit of movement
2423 might be, such as lines of text, slider ticks, etc.
2424
2425 A widget might like to vary its unit move according to the MOD
2426 keys. For example "Prima::SpinEdit" has a "step" and "pageStep"
2427 and moves by "pageStep" when "km::Ctrl" is held down (see
2428 Prima::Sliders).
2429
2430 See also: "MouseDown", "MouseUp", "MouseClick", "MouseMove",
2431 "MouseEnter", "MouseLeave"
2432
2433 Move OLD_X, OLD_Y, NEW_X, NEW_Y
2434 Triggered when widget changes its position relative to its parent,
2435 either by Prima::Widget methods or by the user. OLD_X and OLD_Y
2436 are the old coordinates of a widget, NEW_X and NEW_Y are the new
2437 ones.
2438
2439 See also: "Size", "origin", "growMode", "centered", "clipOwner"
2440
2441 Paint CANVAS
2442 Caused when the system calls for the refresh of a graphic context,
2443 associated with a widget. CANVAS is the widget itself, however its
2444 usage instead of widget is recommended ( see "Graphic content" ).
2445
2446 See also: "repaint", "syncPaint", "get_invalid_rect", "scroll",
2447 "colorIndex", "font"
2448
2449 Popup BY_MOUSE, X, Y
2450 Called by the system when the user presses a key or mouse
2451 combination defined for a context pop-up menu execution. By
2452 default executes the associated Prima::Popup object, if it is
2453 present. If the event flag is cleared during the execution of
2454 callbacks, the pop-up menu is not shown.
2455
2456 See also: "popup"
2457
2458 Setup
2459 This message is posted right after "Create" notification, and comes
2460 first from the event loop. Prima::Widget does not use it.
2461
2462 Show
2463 Triggered by a successive visible(1) call
2464
2465 See also: "Show", "visible", "showing", "exposed"
2466
2467 Size OLD_WIDTH, OLD_HEIGHT, NEW_WIDTH, NEW_HEIGHT
2468 Triggered when widget changes its size, either by Prima::Widget
2469 methods or by the user. OLD_WIDTH and OLD_HEIGHT are the old
2470 extensions of a widget, NEW_WIDTH and NEW_HEIGHT are the new ones.
2471
2472 See also: "Move", "origin", "size", "growMode", "sizeMax",
2473 "sizeMin", "rect", "clipOwner"
2474
2475 SysHandle
2476 Same as in "Component", but introduces the following "Widget"
2477 properties can trigger it:
2478
2479 clipOwner, syncPaint, layered, transparent
2480
2481 This event will be only needed when the system handle (that can be
2482 acquired by "get_handle" ) is needed.
2483
2484 TranslateAccel CODE, KEY, MOD
2485 A distributed "KeyDown" event. Traverses all the object tree that
2486 the widget which received original "KeyDown" event belongs to. Once
2487 the event flag is cleared, the iteration stops.
2488
2489 Used for tracking keyboard events by out-of-focus widgets.
2490
2491 See also: "KeyDown"
2492
2493 ZOrderChanged
2494 Triggered when a widget changes its stacking order, or Z-order
2495 among its siblings, either by Prima::Widget methods or by the user.
2496
2497 See also: "bring_to_front", "insert_behind", "send_to_back"
2498
2500 Dmitry Karasik, <dmitry@karasik.eu.org>.
2501
2503 Prima, Prima::Object, Prima::Drawable.
2504
2505
2506
2507perl v5.30.0 2019-08-21 pod::Prima::Widget(3)