AaRffHH Hd    ; doFootnote TableFootnotel**. . / - (2\*  \<TOCHeading    !<$lastpagenum><$monthname> <$daynum>, <$year>"<$monthnum>/<$daynum>/<$shortyear>;<$monthname> <$daynum>, <$year> <$hour>:<$minute00> <$ampm>"<$monthnum>/<$daynum>/<$shortyear><$monthname> <$daynum>, <$year>"<$monthnum>/<$daynum>/<$shortyear> <$fullfilename>  <$filename>  <$paratext[Title]>  <$paratext[Heading]>  <$curpagenum>  <$marker1> <$marker2> (Continued)Pagepage<$pagenum>Heading & Page <$paratext> on page<$pagenum>AaSee Heading & Page%See <$paratext> on page<$pagenum>. Table & Page7Table<$paranumonly>, <$paratext>, on page<$pagenum>+ (Sheet <$tblsheetnum> of <$tblsheetcount>) wwlooxxyyzz{{A2||A }}~~einAAVJVItpaIJthnUynuIr>X$mo=$daJhorPPthnPynuPr> b$mi=$amP"Pm>/P/<$P>P$mob<$d=$yeP"Pm>/P/<$b>=$fu?e>P$fiP  PateP>b$pa=adi? PnumP b>=$ma?PtinPbe=gen?HePagePbge=>Aa? HePagePparbn p=enu? TaPe7Parab <=>,?<$pPPet btnu=bls?>)PPPooPxPbyP?P{PP|PPP~'Pn=?PAPVPJPVbI?IPJbU=IPXb==JPPbP=PPPbb==PPbP=P PP bP =b P= bP=PPPbb==P?bP=PPPbP=bP=b?=PPPbb ==!P?"bP#=P$Pb%b=&=?'PP(bP)=b*P=+b?,=P-PP.bb/==0=?1PP2bP3=b4b=5P?6=P7PP8Pb:b=;P?<PPOPPPPPQPPRPPSPbTPPUP?VPPWPPXPPYPPZPP[PP\P'P]Pn=^P?_PP`PPaPPbPPdPbeP?fPPgPbhP=iPPjPbkP=lPPmPbnP=oPPpPbqP=rPPsPbtP=uP PvP bwP =xP PyP bzP={PP|Pb}P=~PPPbb=PPPbP=?P?b?=?PPb? =?!P?"b?#=?$P?%b?&=?'P?(b??*P?+b?,=?-P?.b?/=?0=P1PP2bP3=?4b=5Pb6=u$duPw|PdvP}PH$ wxu PH$ PUU`P =Hz xwyu PHz PUU`b H$ yxzu H$ =PUU` PHz zy{u PHz PUU`P =HH{z|u =HHP`= HH|{u HHP?` ?H$ }~v ?H$ s-bUU`? PHz ~}v =Hz ?UTUTh=0SlingShot 2.0 Programmers Handbook60 HH~v HHP` dH3K ^ H RH RFootnoteHqv? ^ HzHz Single Line H'Footnote z HvDf ^ HHP Double LineH  Double Line?H  Single LinezHZ TableFootnote EGX-Rb ^ EPoEPo TableFootnotedHH HH/KUT UT`Appendix B: Functions (UU`ncanvas_shell_split_proc() 8UU fThis is the default OPENWIN_SPLIT_INIT_PROC for a canvas_shell. If your application has its own split DUU@>init proc, make sure the split init proc calls this function. S`void canvas_shell_split_proc( ^`Xv_windoworigview, i`inXv_windownewview, t` intpos) UU` UU`event_to_rectobj() UU oGiven an event and a rectobj to identify the canvas shell that the event occured in, this function will return zUU@'the rectobj that the event occured on. `Rectobj event_to_rectobj( `'Rectobjrectobj, `8eFEvent*event); ٪UU` 媠UU`rectobj_add_to_selected_list() `$voidrectobj_add_to_selected_list( UT`ApRectobjrectobj, `caintexclusive, `Event*event); UU`T_ T)UU`_srectobj_button_event_proc() it4`!voidrectobj_button_event_proc( t?` cXv_windowpaint_window, J`nvEvent*event, (U`Canvas_shellcanvas_shell, ``inRectobjrectobj); lUU` xUU`!rectobj_del_from_selected_list() `()&voidrectobj_del_from_selected_list( `idRectobjrectobj, l `urEvent*event); UU` UU`rerectobj_delta_move_children() UU kMoves all the children of a rectobj by calculating the new position using the delta_x and delta_y and then *ͪUU@UUccalling the childs set_geometry_proc. Typically used by classes that manage geometry of children. bj_`st#voidrectobj_delta_move_children( rec`Rectobjrectobj, si`intdelta_x, en`intdelta_y); U UU`bu nUU`rectobj_destroy_children() bj_%UU` t3Calls xv_destroy on all the children of a rectobj. J4` voidrectobj_destroy_children( ?`caRectobjrectobj); KUU`j cdobHH HHte+( UU`idrectobj_finish_set() UU urnFor package implementors only. Call at the end of the xv_set operation by subclasses of the rectobj to handle "UU@e 2callbacks for geometry management and repainting. 1`x voidrectobj_finish_set( <`caRectobjrectobj); HUU`al uTUU`t rectobj_finish_set1() dUU nFor package implementors only. Call at the end of the xv_set operation by subclasses of the rectobj to handle pUUenicallbacks for managing children (add_child_proc and del_child_proc). This gives a finer grain of control r|UUUUlthan rectobj_finish_set(). This detects when xv_set() has been called recursively and returns TRUE if it is ilUU@Wactually the last xv_set. If TRUE is returned, rectobj_finish_set2() should be called. `intrectobj_finish_set1( `Rectobjrectobj); UU`(  UU`rerectobj_finish_set2() ʪUU FocFor package implementors only. Call when rectobj_finish_set1() returns TRUE. This invokes geometry han֪UUgmanagement functions if the objects dimensions have changed and invokes repaint functions for damaged <⪝UU@areas. re`UUvoidrectobj_finish_set2( t `etRectobjrectobj); UU`em oUU`herectobj_fit() $UU bc`Calculates the minimum rect that contains an objects children and sets the objects XV_WIDTH and ro0UU@ocXV_HEIGHT accordingly. in ?`voidrectobj_fit( ctoJ`hiRectobjrectobj); VUU`cu vbUU`UErectobj_flush_repaint() rUU  lrCalls the repaint functions of objects that need repainting in all canvas_shells in the application. If the force ~UU]argument is FALSE, repainting may not occur if CANVAS_SHELL_DELAY_REPAINT is set to TRUE. If tUU@9force is TRUE, the repainting will happen regardlessly. s`RUvoidrectobj_flush_repaint( `maintforce); iUU`en nUU` irectobj_geometry_manage() ̪UU ^For package implementors only. Requests a change in geometry by calling the objects parents تUUobhgeometry_manage_proc. rectobj_finish_set2() calls this automatically if the geometry has changed during um䪏UUs jthe xv_set operation, it may also be called by a geometry_manage_proc to request a new size. This returns UU@v8TRUE if the desired_rect was set exactly as requested. ob`intrectobj_geometry_manage(  `Ot(Rectobjrectobj, l`Pt Rect*desired_rect); e!UU`ll ndthHH g HHT / tUU`rectobj_get_selected_list() heUU aprReturns the list of selected objects. There is one list per application. It is advisable to use xv_destroy_safe() "UU@ nErather than xv_destroy() if you are destroying objects on this list. o1`to0Rectobj_list *rectobj_get_selected_list(void); thAUU`s #To destroy all objects on a list: _prP`_s{ ca[`alRectobj_list *list; f`&list = rectobj_get_selected_list(); q`lelist_for(list) a|` a/xv_destroy_safe(RECTOBJ_LIST_HANDLE(list)); E i` w} t e`d. bUU` iUU`y_rectobj_help_show() OUU reeDisplays help for an object. Help is associated with a rectobj with the XV_HELP_DATA attribute. This ƪUUpfunction first looks for help data in the rectobj (argument), then checks its owners until it finds help data. UUҪUU@geeUsually applications dont need to call this function because displaying help is handled internally. p`dvvoidrectobj_help_show( f`QXv_Windowpaint_window, i`RngEvent*event, `SRectobjrectobj); UU`li vUU`UUrectobj_invalidate_repaint() t*UU lThis function cancels the repainting of any damaged areas. The area that needed to be repainted is returned _s6UUwin the second argument and the r_width and r_height fields of repaint_area will be zero if there is nothing to `BUUmbe repainted. This is usually only useful if you have specific knowledge of what needs to be repainted. This aNUUechmust be used carefully because if you do not manually repaint damaged areas with rectobj_repaint_rect() fZUU@p Oand rectobj_flush_repaint() the state of the application may appear incorrect. UUi`ge"voidrectobj_invalidate_repaint( t`Tn Rectobjrectobj, `llRect*repaint_area); vUU`ho fUU`rectobj_menu_show() wiUU fDisplays the menu for an object. Menus are associated with a rectobj with the RECTOBJ_MENU attribute. UUobmThis function first looks for the menu in the rectobj (argument), then looks in its owners until it finds a eUU@e mmenu. Usually applications dont need to call this function because displaying menus are handled internally. ` ilvoidrectobj_menu_show( n`UUUXv_Windowpaint_window, s `Vl Event*event, `W nRectobjrectobj); UU`  cUU` efrectobj_min_enclosing_rect() aUU`d VCalculates the minimum enclosing rect for a list of rectobjs. See also rectobj_fit(). &` li"voidrectobj_min_enclosing_rect( 1`XvRectobj_list*list, ai<`YTRect*return_rect); HUU` ll dUUUUHH HH o, MUU`d rectobj_move_children() CTUU . aFor package implementors only. Move children according to how the parent has been moved. This is i"UU@l +generally used during a set_geometry_proc. ly 1` nvoidrectobj_move_children( s<`Z aRectobjrectobj); HUU`il vTUU`horectobj_paint_child() dUU`inRCalls the paint_proc of the child if the damaged area intersect the childs rect. s`voidrectobj_paint_child( ` ~`[enRectobjchild, `\ulDisplay*display, `] oWindowwindow, rec`^Xv_xrectlist*damage); in_UU` UU`3ecrectobj_paint_children() ǪUU`ecTCalls the paint_procs of a rectobjs children when they intersect the damaged area. `5void rectobj_paint_children( H`7Rectobjrectobj, `}Display*display, `~UUWindowwindow, im`ovXv_xrectlist*damage); he UU`ve TUU`UUrectobj_process_drop_event() *UU`c.YFor use by event handlers. Handles ACTION_DRAG events and calls the rectobjs drop_proc. e9`UU"voidrectobj_process_drop_event( D`_) Xv_windowpaint_window, e O``chEvent*event, Z`achCanvas_shellcanvas_shell, ve`bchRectobjrectobj); qUU`ch ,}UU`\rectobj_repaint_rect() y, UU  osMarks a rect of the canvas_shell that rectobj is on as damaged. If clear is set, the area needs a full repaint and ecUUilcwill be cleared to background color before repainting. If damaged_rect is NULL, the XV_RECT of the amaUU@*rectobj will be used as the damaged rect. `7voidrectobj_repaint_rect( `dRectobjrectobj, `eRect*damaged_rect, `fv_intclear); );᪙UU` eUU`rectobj_reset_set_info() eUU`UUYFor package implementors only. Resets internal rectobj data structures in case of error. p `voidrectobj_reset_set_info( `gRectobjrectobj); #UU`e  d, HH HH/UUUU` rectobj_selection_event_proc() t()UU hUsed as the default event_proc by many classes, it supports the single click, double click, menu, help, ll"UUestart_drag callbacks and maintains the selected list. Applications may set the RECTOBJ_EVENT_PROC to V.UU@0this function if the default is something else. ge=`!$voidrectobj_selection_event_proc( H`hXv_windowpaint_window, S`iecEvent*event, ^`jv_Canvas_shellcanvas_shell, `i`kUURectobjrectobj); uUU`" UUU`#agrectobj_set_delay_repaint() teUU stVTurns on/off immediate repaint for the canvas_shell that rectobj is on. Equivalent to UU@ecCANVAS_SHELL_DELAY_REPAINT. `$!voidrectobj_set_delay_repaint( `lRectobjrectobj, `mintflag); ΪUU`% ڪUU`&obrectobj_set_event_grab() )ꪠUU \For event handlers only. Redirects all future events on the canvas_shells paint windows to meUUlcallback_function, regardless of what rectobj they map to. This is useful for focusing events while waiting C UU@\for a specific event. Setting the function to NULL restores the event processing to normal. le`'voidrectobj_set_event_grab( `nCanvas_shellcanvas_shell, eve'`ojRectobjrectobj, c2`p Proc_ptrcallback_function, ob=`q"void*associated_data); reIUU`(pa (UUU`)rectobj_set_geometry() ateeUU anlFor package implementors only. Sets the size and position of rectobj to newrect. Usually used to manipulate $qUU@j_%children during geometry management. `*obvoidrectobj_set_geometry( nt`rRectobjrectobj, `sobRect*newrect); UU`+Fo vUU`, Rrectobj_set_paint_style() UU`s$Set the paint style for an object. `-n,voidrectobj_set_paint_style( map`tl Rectobjrectobj, l`uEvent*event, `vttAttr_attributenew_style); UU`.si tUU`/ rectobj_set_stacking_position() enUU`*Sets the stacking position for an object. %`;j%voidrectobj_set_stacking_position( p0`wcRectobjrectobj, ;`xintnew_pos); GUU`2UU (dobHH emHH r! tUU` urectobj_toggle_event_proc() UUUU` dfCauses the object to act as a two state toggle. To use this, set RECTOBJ_EVENT_PROC to this function. %` !voidrectobj_toggle_event_proc( r0`UUXv_windowpaint_window, R;`t_Event*event, F`Canvas_shellcanvas_shell, Q`dRectobjrectobj); ]UU`t iUU`0obrectobj_upsearch() yUU , nWalks up the rectobj hierarchy and calls xv_get with get_attribute and get_arg. Returns the first object that UUenmthe return value from xv_get is non-NULL and sets return_value to that value. If the canvas_shell is reached gUU@Hand no non-NULL value has been returned, rectobj_upsearch returns NULL. ; `1UURectobj rectobj_upsearch( `yRectobjrectobj, `zXv_opaque*return_value, `{!Attr_attributeget_attribute, o`|UUintget_arg); fCaتUU`4 a a䪢UU`6letraverse_rectobj_tree() _EUU`fuWRecursively walks down the rectobj tree calling function for each rectobj in the tree. Xv_`<owvoid*traverse_rectobj_tree( `Rectobjrectobj, _`l,&void*(*)()traverse_function_arg, $`UUvoid*call_data_arg); 4UU`ar!Function has the following form: C`ravoid*traverse_function( N`etRectobjrectobj, Y`void*call_data); iUU  imThe call_data_arg is passed to the traversal callback function unchanged. If the traversal callback function nuUUenbever returns non-NULL, the traversal is stopped and the return value is returned to the caller of UU@traverse_rectobj_tree. UU`:v_ qUU`  A duibLeftdvRightUd Reference4 adled_Edrsdbjd edv_=}Af=P voi attr-namesattr-description$$f>tt raclass-descriptioni class-end$$f?p rg attr-description attr-argumentunc$$f@pr ppeattr-description attr-argumentlerfAA_ d class-endfBQ4  H_Elbj D ehcode( fDP voi class-name Single Linerclass-descriptionfF ss- CellHeadingfG CellBodyfHT   TableTitleT:Table : fI  Body@Jf   Header $$fLq lde attr-default Default: attr-procsfNA Hscptlf Dattr-end@O  FooterCefPQ  HlTaeTe +> fDhcode$$fSA l attr-usageUsage:attr-end@Uf  Footer@V N  FooterfWP ttr attr-nameattr-description( fXP  class-name Single Lineclass-description$$f[q le attr-argument Argument: attr-default$$f^q l attr-procsProcs: attr-usage fbA Hl  er Dattr-end zV  Times-12-i   _  Courier-10 egY   zV zVgleinegY [ Times-10-i h Times-10-it:Times-16au Times-12Times-24 s Courier-9:  Helvetica-12 ;eujeThinfMediumgDoublehThick@i Very Thin eeeeeeeeegHHFGFHFGFHFGFHFGFHFGFFormat A efeeeeefHHFGFHFGFHFGFHFGFHFGFFormat B-=-.CommentCourierTimes Helvetica Regulare Regular BoldRegularItalic}C3'ᔘTfTWpmm htEbLW L+Oi$,DzmIv.K(c -N.='rL8 ٰխЙ@uS: