.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{ . if \nF \{ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "Prima::Notebooks 3" .TH Prima::Notebooks 3 "2009-02-24" "perl v5.20.1" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" Prima::Notebooks \- multipage widgets .SH "DESCRIPTION" .IX Header "DESCRIPTION" The module contains several widgets useful for organizing multipage ( notebook ) containers. \f(CW\*(C`Prima::Notebook\*(C'\fR provides basic functionality of a widget container. \&\f(CW\*(C`Prima::TabSet\*(C'\fR is a page selector control, and \f(CW\*(C`Prima::TabbedNotebook\*(C'\fR combines these two into a ready-to-use multipage control with interactive navigation. .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 9 \& my $nb = Prima::TabbedNotebook\-> create( \& tabs => [ \*(AqFirst page\*(Aq, \*(AqSecond page\*(Aq, \*(AqSecond page\*(Aq ], \& ); \& $nb\-> insert_to_page( 1, \*(AqPrima::Button\*(Aq ); \& $nb\-> insert_to_page( 2, [ \& [ \*(AqPrima::Button\*(Aq, bottom => 10 ], \& [ \*(AqPrima::Button\*(Aq, bottom => 150 ], \& ]); \& $nb\-> Notebook\-> backColor( cl::Green ); .Ve .SH "Prima::Notebook" .IX Header "Prima::Notebook" .SS "Properties" .IX Subsection "Properties" Provides basic widget container functionality. Acts as merely a grouping widget, hiding and showing the children widgets when \&\f(CW\*(C`pageIndex\*(C'\fR property is changed. .IP "defaultInsertPage \s-1INTEGER\s0" 4 .IX Item "defaultInsertPage INTEGER" Selects the page where widgets, attached by \f(CW\*(C`insert\*(C'\fR call are assigned to. If set to \f(CW\*(C`undef\*(C'\fR, the default page is the current page. .Sp Default value: \f(CW\*(C`undef\*(C'\fR. .IP "pageCount \s-1INTEGER\s0" 4 .IX Item "pageCount INTEGER" Selects number of pages. If the number of pages is reduced, the widgets that belong to the rejected pages are removed from the notebook's storage. .IP "pageIndex \s-1INTEGER\s0" 4 .IX Item "pageIndex INTEGER" Selects the index of the current page. Valid values are from 0 to \f(CW\*(C`pageCount \- 1\*(C'\fR. .SS "Methods" .IX Subsection "Methods" .ie n .IP "attach_to_page \s-1INDEX,\s0 @WIDGETS" 4 .el .IP "attach_to_page \s-1INDEX,\s0 \f(CW@WIDGETS\fR" 4 .IX Item "attach_to_page INDEX, @WIDGETS" Attaches list of \s-1WIDGETS\s0 to INDEXth page. The widgets are not necessarily must be children of the notebook widget. If the page is not current, the widgets get hidden and disabled; otherwise their state is not changed. .IP "contains_widget \s-1WIDGET\s0" 4 .IX Item "contains_widget WIDGET" Searches for \s-1WIDGET\s0 in the attached widgets list. If found, returns two integers: location page index and widget list index. Otherwise returns an empty list. .IP "delete_page [ \s-1INDEX\s0 = \-1, \s-1REMOVE_CHILDREN\s0 = 1 ]" 4 .IX Item "delete_page [ INDEX = -1, REMOVE_CHILDREN = 1 ]" Deletes INDEXth page, and detaches the widgets associated with it. If \s-1REMOVE_CHILDREN\s0 is 1, the detached widgets are destroyed. .IP "delete_widget \s-1WIDGET\s0" 4 .IX Item "delete_widget WIDGET" Detaches \s-1WIDGET\s0 from the widget list and destroys the widget. .IP "detach_from_page \s-1WIDGET\s0" 4 .IX Item "detach_from_page WIDGET" Detaches \s-1WIDGET\s0 from the widget list. .ie n .IP "insert \s-1CLASS,\s0 %PROFILE [[ \s-1CLASS,\s0 %PROFILE], ... ]" 4 .el .IP "insert \s-1CLASS,\s0 \f(CW%PROFILE\fR [[ \s-1CLASS,\s0 \f(CW%PROFILE\fR], ... ]" 4 .IX Item "insert CLASS, %PROFILE [[ CLASS, %PROFILE], ... ]" Creates one or more widgets with \f(CW\*(C`owner\*(C'\fR property set to the caller widget, and returns the list of references to the newly created widgets. .Sp See \*(L"insert\*(R" in Prima::Widget for details. .IP "insert_page [ \s-1INDEX\s0 = \-1 ]" 4 .IX Item "insert_page [ INDEX = -1 ]" Inserts a new empty page at \s-1INDEX.\s0 Valid range is from 0 to \f(CW\*(C`pageCount\*(C'\fR; setting \s-1INDEX\s0 equal to \f(CW\*(C`pageCount\*(C'\fR is equivalent to appending a page to the end of the page list. .ie n .IP "insert_to_page \s-1INDEX, CLASS,\s0 %PROFILE, [[ \s-1CLASS,\s0 %PROFILE], ... ]" 4 .el .IP "insert_to_page \s-1INDEX, CLASS,\s0 \f(CW%PROFILE\fR, [[ \s-1CLASS,\s0 \f(CW%PROFILE\fR], ... ]" 4 .IX Item "insert_to_page INDEX, CLASS, %PROFILE, [[ CLASS, %PROFILE], ... ]" Inserts one ore more widgets to INDEXth page. The semantics of setting \s-1CLASS\s0 and \s-1PROFILE,\s0 as well as the return values are fully equivalent to \f(CW\*(C`insert\*(C'\fR method. .Sp See \*(L"insert\*(R" in Prima::Widget for details. .ie n .IP "insert_transparent \s-1CLASS,\s0 %PROFILE, [[ \s-1CLASS,\s0 %PROFILE], ... ]" 4 .el .IP "insert_transparent \s-1CLASS,\s0 \f(CW%PROFILE\fR, [[ \s-1CLASS,\s0 \f(CW%PROFILE\fR], ... ]" 4 .IX Item "insert_transparent CLASS, %PROFILE, [[ CLASS, %PROFILE], ... ]" Inserts one or more widgets to the notebook widget, but does not add widgets to the widget list, so the widgets are not flipped together with pages. Useful for setting omnipresent ( or transparent ) widgets, visible on all pages. .Sp The semantics of setting \s-1CLASS\s0 and \s-1PROFILE,\s0 as well as the return values are fully equivalent to \f(CW\*(C`insert\*(C'\fR method. .Sp See \*(L"insert\*(R" in Prima::Widget for details. .IP "move_widget \s-1WIDGET, INDEX\s0" 4 .IX Item "move_widget WIDGET, INDEX" Moves \s-1WIDGET\s0 from its old page to INDEXth page. .IP "widget_get \s-1WIDGET, PROPERTY\s0" 4 .IX Item "widget_get WIDGET, PROPERTY" Returns \s-1PROPERTY\s0 value of \s-1WIDGET.\s0 If \s-1PROPERTY\s0 is affected by the page flipping mechanism, the internal flag value is returned instead. .ie n .IP "widget_set \s-1WIDGET,\s0 %PROFILE" 4 .el .IP "widget_set \s-1WIDGET,\s0 \f(CW%PROFILE\fR" 4 .IX Item "widget_set WIDGET, %PROFILE" Calls \f(CW\*(C`set\*(C'\fR on \s-1WIDGET\s0 with \s-1PROFILE\s0 and updates the internal \f(CW\*(C`visible\*(C'\fR, \f(CW\*(C`enabled\*(C'\fR, \f(CW\*(C`current\*(C'\fR, and \f(CW\*(C`geometry\*(C'\fR properties if these are present in \s-1PROFILE. \s0 .Sp See \*(L"set\*(R" in Prima::Object. .IP "widgets_from_page \s-1INDEX\s0" 4 .IX Item "widgets_from_page INDEX" Returns list of widgets, associated with INDEXth page. .SS "Events" .IX Subsection "Events" .IP "Change \s-1OLD_PAGE_INDEX, NEW_PAGE_INDEX\s0" 4 .IX Item "Change OLD_PAGE_INDEX, NEW_PAGE_INDEX" Called when \f(CW\*(C`pageIndex\*(C'\fR value is changed from \&\s-1OLD_PAGE_INDEX\s0 to \s-1NEW_PAGE_INDEX.\s0 Current implementation invokes this notification while the notebook widget is in locked state, so no redraw requests are honored during the notification execution. .SS "Bugs" .IX Subsection "Bugs" Since the notebook operates directly on children widgets' \&\f(CW\*(C`::visible\*(C'\fR and \f(CW\*(C`::enable\*(C'\fR properties, there is a problem when a widget associated with a non-active page must be explicitly hidden or disabled. As a result, such a widget would become visible and enabled anyway. This happens because Prima \s-1API\s0 does not cache property requests. For example, after execution of the following code .PP .Vb 4 \& $notebook\-> pageIndex(1); \& my $widget = $notebook\-> insert_to_page( 0, ... ); \& $widget\-> visible(0); \& $notebook\-> pageIndex(0); .Ve .PP \&\f(CW$widget\fR will still be visible. As a workaround, \f(CW\*(C`widget_set\*(C'\fR method can be suggested, to be called together with the explicit state calls. Changing .PP .Vb 1 \& $widget\-> visible(0); .Ve .PP code to .PP .Vb 1 \& $notebook\-> widget_set( $widget, visible => 0); .Ve .PP solves the problem, but introduces an inconsistency in \s-1API.\s0 .SH "Prima::TabSet" .IX Header "Prima::TabSet" \&\f(CW\*(C`Prima::TabSet\*(C'\fR class implements functionality of an interactive page switcher. A widget is presented as a set of horizontal bookmark-styled tabs with text identifiers. .SS "Properties" .IX Subsection "Properties" .IP "colored \s-1BOOLEAN\s0" 4 .IX Item "colored BOOLEAN" A boolean property, selects whether each tab uses unique color ( \s-1OS/2\s0 Warp 4 style ), or all tabs are drawn with \f(CW\*(C`backColor\*(C'\fR. .Sp Default value: 1 .IP "firstTab \s-1INTEGER\s0" 4 .IX Item "firstTab INTEGER" Selects the first ( leftmost ) visible tab. .IP "focusedTab \s-1INTEGER\s0" 4 .IX Item "focusedTab INTEGER" Selects the currently focused tab. This property value is almost always equals to \f(CW\*(C`tabIndex\*(C'\fR, except when the widget is navigated by arrow keys, and tab selection does not occur until the user presses the return key. .IP "topMost \s-1BOOLEAN\s0" 4 .IX Item "topMost BOOLEAN" Selects the way the widget is oriented. If 1, the widget is drawn as if it resides on top of another widget. If 0, it is drawn as if it is at bottom. .Sp Default value: 1 .IP "tabIndex \s-1INDEX\s0" 4 .IX Item "tabIndex INDEX" Selects the INDEXth tab. When changed, \f(CW\*(C`Change\*(C'\fR notification is triggered. .IP "tabs \s-1ARRAY\s0" 4 .IX Item "tabs ARRAY" Anonymous array of text scalars. Each scalar corresponds to a tab and is displayed correspondingly. The class supports single-line text strings only; newline characters are not respected. .SS "Methods" .IX Subsection "Methods" .IP "get_item_width \s-1INDEX\s0" 4 .IX Item "get_item_width INDEX" Returns width in pixels of INDEXth tab. .IP "tab2firstTab \s-1INDEX\s0" 4 .IX Item "tab2firstTab INDEX" Returns the index of a tab, that will be drawn leftmost if INDEXth tab is to be displayed. .SS "Events" .IX Subsection "Events" .IP "Change" 4 .IX Item "Change" Triggered when \f(CW\*(C`tabIndex\*(C'\fR property is changed. .IP "DrawTab \s-1CANVAS, INDEX, COLOR_SET, POLYGON1, POLYGON2\s0" 4 .IX Item "DrawTab CANVAS, INDEX, COLOR_SET, POLYGON1, POLYGON2" Called when INDEXth tab is to be drawn on \s-1CANVAS. COLOR_SET\s0 is an array reference, and consists of the four cached color values: foreground, background, dark 3d color, and light 3d color. \s-1POLYGON1\s0 and \s-1POLYGON2\s0 are array references, and contain four points as integer pairs in (X,Y)\-coordinates. \s-1POLYGON1\s0 keeps coordinates of the larger polygon of a tab, while \s-1POLYGON2\s0 of the smaller. Text is displayed inside the larger polygon: .Sp .Vb 1 \& POLYGON1 \& \& [2,3] [4,5] \& o..........o \& . . \& [0,1]. TAB_TEXT . [6,7] \& o................o \& \& POLYGON2 \& \& [0,1] [2,3] \& o................o \& [6,7]o..............o[4,5] .Ve .Sp Depending on \f(CW\*(C`topMost\*(C'\fR property value, \s-1POLYGON1\s0 and \s-1POLYGON2\s0 change their mutual vertical orientation. .Sp The notification is always called from within \f(CW\*(C`begin_paint/end_paint\*(C'\fR block. .IP "MeasureTab \s-1INDEX, REF\s0" 4 .IX Item "MeasureTab INDEX, REF" Puts width of INDEXth tab in pixels into \s-1REF\s0 scalar value. This notification must be called from within \f(CW\*(C`begin_paint_info/end_paint_info\*(C'\fR block. .SH "Prima::TabbedNotebook" .IX Header "Prima::TabbedNotebook" The class combines functionality of \f(CW\*(C`Prima::TabSet\*(C'\fR and \f(CW\*(C`Prima::Notebook\*(C'\fR, providing the interactive multipage widget functionality. The page indexing scheme is two-leveled: the first level is equivalent to the \f(CW\*(C`Prima::TabSet\*(C'\fR \- provided tab scheme. Each first-level tab, in turn, contains one or more second-level pages, which can be switched using native \f(CW\*(C`Prima::TabbedNotebook\*(C'\fR controls. .PP First-level tab is often referred as \fItab\fR, and second-level as \fIpage\fR. .SS "Properties" .IX Subsection "Properties" .IP "defaultInsertPage \s-1INTEGER\s0" 4 .IX Item "defaultInsertPage INTEGER" Selects the page where widgets, attached by \f(CW\*(C`insert\*(C'\fR call are assigned to. If set to \f(CW\*(C`undef\*(C'\fR, the default page is the current page. .Sp Default value: \f(CW\*(C`undef\*(C'\fR. .IP "notebookClass \s-1STRING\s0" 4 .IX Item "notebookClass STRING" Assigns the notebook widget class. .Sp Create-only property. .Sp Default value: \f(CW\*(C`Prima::Notebook\*(C'\fR .IP "notebookProfile \s-1HASH\s0" 4 .IX Item "notebookProfile HASH" Assigns hash of properties, passed to the notebook widget during the creation. .Sp Create-only property. .IP "notebookDelegations \s-1ARRAY\s0" 4 .IX Item "notebookDelegations ARRAY" Assigns list of delegated notifications to the notebook widget. .Sp Create-only property. .IP "orientation \s-1INTEGER\s0" 4 .IX Item "orientation INTEGER" Selects one of the following tno::XXX constants .RS 4 .IP "tno::Top" 4 .IX Item "tno::Top" The TabSet will be drawn at the top of the widget. .IP "tno::Bottom" 4 .IX Item "tno::Bottom" The TabSet will be drawn at the bottom of the widget. .RE .RS 4 .Sp Default value: tno::Top .RE .IP "pageIndex \s-1INTEGER\s0" 4 .IX Item "pageIndex INTEGER" Selects the INDEXth page or a tabset widget ( the second-level tab ). When this property is triggered, \f(CW\*(C`tabIndex\*(C'\fR can change its value, and \f(CW\*(C`Change\*(C'\fR notification is triggered. .IP "style \s-1INTEGER\s0" 4 .IX Item "style INTEGER" Selects one of the following tns::XXX constants .RS 4 .IP "tns::Standard" 4 .IX Item "tns::Standard" The widget will have a raised border surrounding it and a +/\- control at the top for moving between pages. .IP "tns::Simple" 4 .IX Item "tns::Simple" The widget will have no decorations (other than a standard border). It is recommended to have only one second-level page per tab with this style. .RE .RS 4 .Sp Default value: tns::Standard .RE .IP "tabIndex \s-1INTEGER\s0" 4 .IX Item "tabIndex INTEGER" Selects the INDEXth tab on a tabset widget using the first-level tab numeration. .IP "tabs \s-1ARRAY\s0" 4 .IX Item "tabs ARRAY" Governs number and names of notebook pages. \s-1ARRAY\s0 is an anonymous array of text scalars, where each corresponds to a single first-level tab and a single notebook page, with the following exception. To define second-level tabs, the same text string must be repeated as many times as many second-level tabs are desired. For example, the code .Sp .Vb 1 \& $nb\-> tabs(\*(Aq1st\*(Aq, (\*(Aq2nd\*(Aq) x 3); .Ve .Sp results in creation of a notebook of four pages and two first-level tabs. The tab \f(CW\*(Aq2nd\*(Aq\fR contains three second-level pages. .Sp The property implicitly operates the underlying notebook's \f(CW\*(C`pageCount\*(C'\fR property. When changed at run-time, its effect on the children widgets is therefore the same. See pageCount for more information. .IP "tabsetClass \s-1STRING\s0" 4 .IX Item "tabsetClass STRING" Assigns the tab set widget class. .Sp Create-only property. .Sp Default value: \f(CW\*(C`Prima::TabSet\*(C'\fR .IP "tabsetProfile \s-1HASH\s0" 4 .IX Item "tabsetProfile HASH" Assigns hash of properties, passed to the tab set widget during the creation. .Sp Create-only property. .IP "tabsetDelegations \s-1ARRAY\s0" 4 .IX Item "tabsetDelegations ARRAY" Assigns list of delegated notifications to the tab set widget. .Sp Create-only property. .SS "Methods" .IX Subsection "Methods" The class forwards the following methods of \f(CW\*(C`Prima::Notebook\*(C'\fR, which are described in Prima::Notebook: \f(CW\*(C`attach_to_page\*(C'\fR, \f(CW\*(C`insert_to_page\*(C'\fR, \&\f(CW\*(C`insert\*(C'\fR, \f(CW\*(C`insert_transparent\*(C'\fR, \f(CW\*(C`delete_widget\*(C'\fR, \f(CW\*(C`detach_from_page\*(C'\fR, \&\f(CW\*(C`move_widget\*(C'\fR, \f(CW\*(C`contains_widget\*(C'\fR, \f(CW\*(C`widget_get\*(C'\fR, \f(CW\*(C`widget_set\*(C'\fR, \&\f(CW\*(C`widgets_from_page\*(C'\fR. .IP "tab2page \s-1INDEX\s0" 4 .IX Item "tab2page INDEX" Returns second-level tab index, that corresponds to the INDEXth first-level tab. .IP "page2tab \s-1INDEX\s0" 4 .IX Item "page2tab INDEX" Returns first-level tab index, that corresponds to the INDEXth second-level tab. .SS "Events" .IX Subsection "Events" .IP "Change \s-1OLD_PAGE_INDEX, NEW_PAGE_INDEX\s0" 4 .IX Item "Change OLD_PAGE_INDEX, NEW_PAGE_INDEX" Triggered when \f(CW\*(C`pageIndex\*(C'\fR property is changes it s value from \s-1OLD_PAGE_INDEX\s0 to \s-1NEW_PAGE_INDEX.\s0 .SH "AUTHORS" .IX Header "AUTHORS" Dmitry Karasik, . Teo Sankaro, . .SH "SEE ALSO" .IX Header "SEE ALSO" Prima, Prima::Widget, \fIexamples/notebook.pl\fR.