REVO2700gRect Selection3Yon CleanStak -- private handler set the hilite of btn "TopLevel" to false save this stack put "done" end CleanStak ----------------------------------- on openStack if revAppVersion() < 2.7 then answer info "This tutorial, that uses the 'blendlevel' property, needs Rev 2.7 or later." \ & cr & "You'll get unexpected results with a prior version." as sheet end if end openStack ^ uPaypalURLChttps%3A%2F%2Fwww.paypal.com%2Fcgi-bin%2Fwebscr%3Fcmd%3D_xclick%26business%3Deric%252echatonet%2540sosmartsoftware%252ecom%26item_name%3DEric%2520Chatonet%26item_number%3DDev%2520Support%26no_shipping%3D0%26no_note%3D1%26tax%3D0%26currency_code%3DEUR%26return%3Dhttp%3A%2F%2Fwww.sosmartsoftware.com%2F%26charset%3DUTF%252d8$Selecting objects using a rectangle ULucida Grande ULucida Grande WLucida Grande ULucida Grande UTahoma UTahoma WTahoma @ULucida Grande UGeorgia UGeorgia UCourier WLucida Grande UTimes New RomanUTimes New RomanWTimes New Roman UVerdana WVerdana UVerdana WVerdana @UVerdanaUGeorgiaUVerdanaUVerdana U Segoe UI UVerdana uPosition Horizontal329 Vertical-118uGuideCentered Horizontalfalse cREVGeneral debugObjectsstackfileversion2.7cREVGeometryCachestackID2078 X#on mouseDown pButton if pButton = 1 and the mouseLoc is within the rect of group "Test" then -- right click is not taken into account -- group limits set the area where the feature may occur: -- you can use any invisible object if needed put empty into fld "Result" -- for demo purpose CreateSelRect -- see below -- creates the rectangle graphic according to current chosen style: see below else pass mouseDown end mouseDown ------------------------------- on mouseUp local tSelectedObjs ----- if there is a graphic "SelRect" then put CheckObjs() into tSelectedObjs -- see below delete graphic "SelRect" ProcessResults tSelectedObjs -- see below end if end mouseUp ------------------------------- on mouseMove px,py -- px and py parameters are current mouse coordinates local tMouseHStart,tMouseVStart,tSelectedObjs,tTrash ----- if the mouse is down and there is a grc "SelRect" then put item 1 of the clickLoc into tMouseHStart put item 2 of the clickLoc into tMouseVStart -- stores starting point -- note that the clickloc is set by the engine at mouseDown and not at mouseUp ----- -- normally, you may just draw an object from its bottomLeft to its bottomright -- this part allows to draw a rectangle in all directions: ----- switch case (px > tMouseHStart) and (py > tMouseVStart) -- drawing from topleft to botright set the rect of grc "SelRect" to tMouseHStart,tMouseVStart,px,py break case (px < tMouseHStart) and (py > tMouseVStart) -- drawing from topright to botleft set the rect of grc "SelRect" to px,tMouseVStart,tMouseHStart,py break case (px > tMouseHStart) and (py < tMouseVStart) -- drawing from botleft to topright set the rect of grc "SelRect" to tMouseHStart,py,px,tMouseVStart break case (px < tMouseHStart) and (py < tMouseVStart) -- drawing from botright to topleft set the rect of grc "SelRect" to px,py,tMouseHStart,tMouseVStart end switch ----- put CheckObjs() into tSelectedObjs -- see below -- this function checks which objects are selected and sets their hilite property: see below end if end mouseMove ------------------------------- on CreateSelRect -- this handler creates a rectangle graphic using the templateGraphic: lock messages -- speeds up process if there is a graphic "SelRect" then delete graphic "SelRect" -- security switch PlatformStyle() -- see this function below case 1 -- Mac OS set the opaque of the templateGraphic to true set the backColor of the templateGraphic to "white" set the borderColor of the templateGraphic to "black" set the blendlevel of the templateGraphic to 80 break case 2 -- Win XP set the opaque of the templateGraphic to false set the antialiased of the templateGraphic to false set the dashes of the templateGraphic to 3,1 break case 3 -- Win Vista set the opaque of the templateGraphic to true set the backColor of the templateGraphic to 103,186,245 set the borderColor of the templateGraphic to "blue" set the blendlevel of the templateGraphic to 80 end switch ----- set the name of the templateGraphic to "SelRect" create invisible graphic in grp "Test" -- we need to set its rect before showing it -- it contains the long name of the graphic set the rect of it to the clickLoc,the mouseLoc -- the clickloc is set by the engine at mouseDown -- so the clickLoc,the mouseLoc defines the current right rect show it -- the graphic reset the templateGraphic -- always think about others :-) unlock messages end CreateSelRect ------------------------------- function PlatformStyle return the hilitedButton of group "Appearance" -- an integer -- of course you will adjust this to fit your needs end PlatformStyle ------------------------------- function SelMode return the hilitedButtonName of grp "Mode" -- enclose or intersect -- of course you will adjust this to fit your needs end SelMode ------------------------------- function CheckObjs -- called by mouseMove and mouseUp local tFlag,tSelectedObjs ----- if SelMode() = "enclose" then -- see this function below -- enclose mode: the control must be enclosed in the rectangle repeat with i = 1 to the number of btns in grp "Test" put the topLeft of btn i of grp "Test" is within the rect of graphic "SelRect" and the botright of btn i of grp "Test" is within the rect of graphic "SelRect" into tFlag if tFlag then put the long name of btn i of grp "Test" & cr after tSelectedObjs -- feeds a local variable that is returned to be used by ProcessResults: see below set the hilite of btn i of grp "Test" to tFlag -- shows to user end repeat else -- intersect mode: any part of the control must be in the rectangle repeat with i = 1 to the number of btns in grp "Test" put intersect(btn i of grp "Test",graphic "SelRect") into tFlag -- see intersect function in the docs if tFlag then put the long name of btn i of grp "Test" & cr after tSelectedObjs -- feeds a local variable that is returned to be used by ProcessResults: see below set the hilite of btn i of grp "Test" to tFlag -- shows to user end repeat end if return tSelectedObjs -- returns the list of selected objects -- of course you will adjust this code according to your needs end CheckObjs ------------------------------- on ProcessResults pSelectedObjs -- for demo purpose local tSelectedObjs ----- if the mouseLoc <> the clickLoc then -- note that the clickloc is set by the engine at mouseDown and not at mouseUp repeat with i = 1 to the number of lines of pSelectedObjs put word 1 to 6 of line i of pSelectedObjs & "..." & cr after tSelectedObjs end repeat if tSelectedObjs <> empty then put "You have selected:" & cr & tSelectedObjs into fld "Result" else put "You selected nothing" into fld "Result" end if end ProcessResults ############################### # below code is not used in this tutorial but it might help you ############################### function PlatformStyle if the platform = "MacOS" then set the itemDelimiter to "." if item 1 of the systemVersion = 10 then return "OSX" else return "WinXP" -- OS 9 uses the same type as Win XP else if the systemVersion = "NT 6.0" then return "WinVista" else return "WinXP" end if end PlatformStyle ------------------------------- on CreateSelRect switch PlatformStyle() -- the value returned by the above function case "OSX" set the opaque of the templateGraphic to true set the backColor of the templateGraphic to "white" set the borderColor of the templateGraphic to "black" set the blendlevel of the templateGraphic to 80 break case "WinXP" set the opaque of the templateGraphic to false set the antialiased of the templateGraphic to false set the dashes of the templateGraphic to 3,1 break case "WinVista" set the opaque of the templateGraphic to true set the backColor of the templateGraphic to 103,186,245 set the borderColor of the templateGraphic to "blue" set the blendlevel of the templateGraphic to 80 end switch ----- set the name of the templateGraphic to "SelRect" create invisible graphic set the rect of it to the clickLoc,the mouseLoc show it reset the templateGraphic end CreateSelRect uAnimtrue cREVGeneral breakPointscREVGeometryCacheIDs12184851624001902121848161308018711218485037535189812166770239451094121667702401010931218485037455189711584953422191039121847307062518341218466172046173412184661688861733121848508555719011218471242074179611584963203121042121846815264617271218468152647173212166767945101105121846815264817351159864971330105612184850373871896115849640228110441218463056996173112184850373191895121682398098512121218470972510179012184734921761837115849810204616001218484703670188511598676162801059115849762535510461218473093242183512184730932431836cREVGeometrycachetotal31order#QFE@O]ghij Tab Menu}ron menuPick pNewItem,pOldItem lock screen show grp pNewItem hide grp pOldItem unlock screen end menuPick ]Action Discussion cREVGeometryMaster,scaleBottomObjectSideBottomMaster,movehDistancefalseMastertrueMaster,scaleBottomObjectRefcardMaster,scaleBottomAbsolutetrueMaster,scaleBottomtrueMaster,movevDistancefalseMaster,scalebottomDistance-58Master,expectedRect 20,15,380,476Master,scaleRightAbsolutetrueMaster,scaleRighttrueMaster,scalerightDistance-20Master,scaleRightObjectSideRightMaster,scaleRightObjectRefcardMaster,cardRanking2Master,scaletopDistanceMaster,scaleleftDistance cREVGeneral revUniqueID 1158495342219  Discussiona$/tz cREVGeometryMaster,scaleBottomObjectSideBottomMaster,movehDistancefalseMastertrueMaster,scaleBottomObjectRefcardMaster,scaleBottomAbsolutetrueMaster,scaleBottomtrueMaster,movevDistancefalseMaster,scalebottomDistance-70Master,expectedRect 36,47,364,464Master,scaleRightAbsolutetrueMaster,scaleRighttrueMaster,scalerightDistance-36Master,scaleRightObjectSideRightMaster,scaleRightObjectRefcardMaster,cardRanking2Master,scaletopDistanceMaster,scaleleftDistance cREVGeneral revUniqueID 1158496402281 Info)xon mouseDown if the textStyle of the clickchunk = "link" then EditTheScript the clickText -- end mouseDown ---------------------------- on EditTheScript pWhich local tObjs ----- switch pWhich case "card's script" put "this cd" into tObjs break case "the script of the drop box field" put "fld ID 1071" into tObjs break case "four custom properties" select fld "Box1" send "revBuildPropertyPalette" to stack "revTemplatePalette" wait 200 millisecs with messages go cd "revCustomProperties" of stack line 1 of the windows exit to top end switch ----- repeat for each item tObj in tObjs do "edit script of" && tObj end repeat end EditTheScript (3lruList0qHow-To Stack #025 by Eric Chatonet 07/22/06 Initial release When checked, the "TopLevel" check box allows you to access all objects and scripts easily. This stack shows how to put some divination into your projects. Enjoy! If customized interfaces require mainly a lot of work, they allow the same layout on all platforms and give a strong personality to your interfaces. To buid a customized interface, you need to replace standard controls by transpatent ones using images you have prepared. Why would you work with PNG images? Portable Network Graphics format was created primarily to by-pass GIF patents (that are no longer valid since 2006 October 1th :-) Compared to JPEG, PNG format brings three great advantages: It's a non-destructive format. Its weight is not heavy. Using an alpha channel, it's able to handle transparency. As a rule, prefer to use PNG when you need transparency and JPEG when you don't need it. BTW, always use JPEG for photos: PNG is not suitable for them. What allows transparency? Mastering transparency is a key for well done interfaces: You can smooth graphics edges. You can drop shadows as you wish. You can overlay graphics with graphics, with background colors or images and achieve very subtle effects. In addition, you can combine transparency with blendLevel Rev feature that may be changed on-the-fly. A world :-) How to prepare PNG images? You need PhotoShop or whatever image-editing program you wish. Sometimes you will find convenient to prepare your draft in a vector edting software then import it in PhotoShop as a background tracing. To be frank, mastering all aspects of such images editing requires a bit of training ;-) But results will amaze you! The standard button in this stack The 'Run It!" button is very easy to make: It's just a transparent button the icon and hilitedIcon of which are set to the right PNG images IDs. The PNG used are semi-transparent then the button catches a bit of the background color. The button is overlayed by a transparent field to specify its label. mouseUp, mouseDown and mouseRelease events that are received by this field are sent to the button itself (both share the same name and are grouped): on mouseDown send "mouseDown" to btn the short name of me end mouseDown ----------------------------------- on mouseUp send "mouseUp" to btn the short name of me end mouseUp ----------------------------------- on mouseRelease send "mouseRelease" to btn the short name of me end mouseRelease Effective code is in the button's script. This way of doing allows to duplicate the group to make another button by just setting its icons IDs. Show button scripts The progress bar This one is a bit more complicated ;-) It's a group using one PNG embedded image and two graphics: the progress bar edges and the progress bar itself. Here, the PNG overlies the progress bar graphics that is seen through it. Modifying the blend level of the PNG allows to master the progress bar gloss :-) A simple handler allows to monitor the progress bar: on DisplayProgress pPos,pTotal local tRect ----- if pPos = 0 then put 1 into pPos put the rect of img "Progress" into tRect put item 1 of tRect + \ round(pPos/pTotal*the width of img "Progress") \ into item 3 of tRect set the rect of grc "Bar" to tRect end DisplayProgress And to set the progress bar position: DisplayProgress 0,72 -- beginning DisplayProgress 50,100 -- half DisplayProgress 50,50 -- complete Where pPos is the current thumb position. And pTotal is the end value of the progress bar. Note that the code handles ratios automatically. If you copy the progress bar using the "Copy" button, you will be able to resize the pasted group in your own stack using the pointer tool. Show progress bar scripts The So Smart logo (for fun) The logo itselg is a PNG shadowed image overlayed by a tiny and almost transparent PNG image that is moved using the send command. Show logo script Vocabulary Here are the main dictionary entries you can check in the Revolution documentation about this topic: Icon property HilitedIcon property Hilite property MouseUp message MouseDown message MouseRelease message Rect property Send command Move command 1 How-To Stack #025 by Eric Chatonet 07/22/06 Initial release When checked, the "TopLevel" check box allows you to access all objects and scripts easily. This stack shows how to put some divination into your projects. Enjoy! Good ergonomics and . Why would you work with PNG images? Portable Network Graphics format was created primarily to by-pass GIF patents (that are no longer valid since 2006 October 1th :-) Compared to JPEG, PNG format brings three great advantages: It's a non-destructive format. Its weight is not heavy. Using an alpha channel, it's able to handle transparency. As a rule, prefer to use PNG when you need transparency and JPEG when you don't need it. BTW, always use JPEG for photos: PNG is not suitable for them. What allows transparency? Mastering transparency is a key for well done interfaces: You can smooth graphics edges. You can drop shadows as you wish. You can overlay graphics with graphics, with background colors or images and achieve very subtle effects. In addition, you can combine transparency with blendLevel Rev feature that may be changed on-the-fly. A world :-) How to prepare PNG images? You need PhotoShop or whatever image-editing program you wish. Sometimes you will find convenient to prepare your draft in a vector edting software then import it in PhotoShop as a background tracing. To be frank, mastering all aspects of such images editing requires a bit of training ;-) But results will amaze you! The standard button in this stack The 'Run It!" button is very easy to make: It's just a transparent button the icon and hilitedIcon of which are set to the right PNG images IDs. The PNG used are semi-transparent then the button catches a bit of the background color. The button is overlayed by a transparent field to specify its label. mouseUp, mouseDown and mouseRelease events that are received by this field are sent to the button itself (both share the same name and are grouped): on mouseDown send "mouseDown" to btn the short name of me end mouseDown ----------------------------------- on mouseUp send "mouseUp" to btn the short name of me end mouseUp ----------------------------------- on mouseRelease send "mouseRelease" to btn the short name of me end mouseRelease Effective code is in the button's script. This way of doing allows to duplicate the group to make another button by just setting its icons IDs. Show button scripts The progress bar This one is a bit more complicated ;-) It's a group using one PNG embedded image and two graphics: the progress bar edges and the progress bar itself. Here, the PNG overlies the progress bar graphics that is seen through it. Modifying the blend level of the PNG allows to master the progress bar gloss :-) A simple handler allows to monitor the progress bar: on DisplayProgress pPos,pTotal local tRect ----- if pPos = 0 then put 1 into pPos put the rect of img "Progress" into tRect put item 1 of tRect + \ round(pPos/pTotal*the width of img "Progress") \ into item 3 of tRect set the rect of grc "Bar" to tRect end DisplayProgress And to set the progress bar position: DisplayProgress 0,72 -- beginning DisplayProgress 50,100 -- half DisplayProgress 50,50 -- complete Where pPos is the current thumb position. And pTotal is the end value of the progress bar. Note that the code handles ratios automatically. If you copy the progress bar using the "Copy" button, you will be able to resize the pasted group in your own stack using the pointer tool. Show progress bar scripts The So Smart logo (for fun) The logo itselg is a PNG shadowed image overlayed by a tiny and almost transparent PNG image that is moved using the send command. Show logo script Vocabulary Here are the main dictionary entries you can check in the Revolution documentation about this topic: Icon property HilitedIcon property Hilite property MouseUp message MouseDown message MouseRelease message Rect property Send command Move command 1 How-To Stack #025 by Eric Chatonet 07/22/06 Initial release When checked, the "TopLevel" check box allows you to access all objects and scripts easily. This stack shows how to put some divination into your projects. Enjoy! Good ergonomics and a touch of magic make good projects :-) Why would you work with PNG images? Portable Network Graphics format was created primarily to by-pass GIF patents (that are no longer valid since 2006 October 1th :-) Compared to JPEG, PNG format brings three great advantages: It's a non-destructive format. Its weight is not heavy. Using an alpha channel, it's able to handle transparency. As a rule, prefer to use PNG when you need transparency and JPEG when you don't need it. BTW, always use JPEG for photos: PNG is not suitable for them. What allows transparency? Mastering transparency is a key for well done interfaces: You can smooth graphics edges. You can drop shadows as you wish. You can overlay graphics with graphics, with background colors or images and achieve very subtle effects. In addition, you can combine transparency with blendLevel Rev feature that may be changed on-the-fly. A world :-) How to prepare PNG images? You need PhotoShop or whatever image-editing program you wish. Sometimes you will find convenient to prepare your draft in a vector edting software then import it in PhotoShop as a background tracing. To be frank, mastering all aspects of such images editing requires a bit of training ;-) But results will amaze you! The standard button in this stack The 'Run It!" button is very easy to make: It's just a transparent button the icon and hilitedIcon of which are set to the right PNG images IDs. The PNG used are semi-transparent then the button catches a bit of the background color. The button is overlayed by a transparent field to specify its label. mouseUp, mouseDown and mouseRelease events that are received by this field are sent to the button itself (both share the same name and are grouped): on mouseDown send "mouseDown" to btn the short name of me end mouseDown ----------------------------------- on mouseUp send "mouseUp" to btn the short name of me end mouseUp ----------------------------------- on mouseRelease send "mouseRelease" to btn the short name of me end mouseRelease Effective code is in the button's script. This way of doing allows to duplicate the group to make another button by just setting its icons IDs. Show button scripts The progress bar This one is a bit more complicated ;-) It's a group using one PNG embedded image and two graphics: the progress bar edges and the progress bar itself. Here, the PNG overlies the progress bar graphics that is seen through it. Modifying the blend level of the PNG allows to master the progress bar gloss :-) A simple handler allows to monitor the progress bar: on DisplayProgress pPos,pTotal local tRect ----- if pPos = 0 then put 1 into pPos put the rect of img "Progress" into tRect put item 1 of tRect + \ round(pPos/pTotal*the width of img "Progress") \ into item 3 of tRect set the rect of grc "Bar" to tRect end DisplayProgress And to set the progress bar position: DisplayProgress 0,72 -- beginning DisplayProgress 50,100 -- half DisplayProgress 50,50 -- complete Where pPos is the current thumb position. And pTotal is the end value of the progress bar. Note that the code handles ratios automatically. If you copy the progress bar using the "Copy" button, you will be able to resize the pasted group in your own stack using the pointer tool. Show progress bar scripts The So Smart logo (for fun) The logo itselg is a PNG shadowed image overlayed by a tiny and almost transparent PNG image that is moved using the send command. Show logo script Vocabulary Here are the main dictionary entries you can check in the Revolution documentation about this topic: Icon property HilitedIcon property Hilite property MouseUp message MouseDown message MouseRelease message Rect property Send command Move command 1 cREVGeometryMaster,scaleBottomObjectSideBottomMaster,movehDistancefalseMastertrueMaster,scaleBottomObjectRefcardMaster,scaleBottomAbsolutetrueMaster,scaleBottomtrueMaster,movevDistancefalseMaster,scalebottomDistance-74Master,expectedRect 40,51,360,469Master,scaleRightAbsolutetrueMaster,scaleRighttrueMaster,scalerightDistance-40Master,scaleRightObjectSideRightMaster,scaleRightObjectRefcardMaster,cardRanking2Master,scaletopDistanceMaster,scaleleftDistance cREVGeneral revUniqueID 1158496320312 breakPoints  #How-To Stack #027 by Eric Chatonet @"  08/12/08 Initial release @ S08/13/08 Modified the process to use a mouseMove handler instead of a repeat loop @R  bNote: when checked, the "TopLevel" check box allows you to access all objects and scripts easily. a  On any desktop or when using Revolution pointer tool, you can hold down the mouse and draw a rectangle to select several items.  qThis stack shows how to implement this usual feature using the browse tool and according to different platforms. p Enjoy! @   How does it work?   3There are a few tricks but it is rather simple :-) 2  n On mouseDown, in an area that is defined here by a group limits, a rectangle graphic is created on-the-fly. @1600    _ UThen a mouseMove handler checks which objects are within the rectangle graphic zone. T VWhen the mouse is up, the list can be used for processing and the graphic is deleted. U   The code   All the code is in the card script and fully commented. Note that you can't put this code in the group script because a group does not receive mouse events when clicking on a blank part of it.   H CreateSelRect creates a graphic rectangle on-the-fly by setting properties of the templateGraphic. In this stack, three graphic types may be used: Mac OS, Win XP/Mac OS 9 and Win Vista. In a real project, you will test the platform and the systemVersion functions to use the right graphic definition instead of radio buttons: @1600         function PlatformStyle @blue @black ! if the platform = "MacOS" then  @brown @black  @black @ darkorange  @black  @black  @black @brown ! set the itemDelimiter to "." @black @blue @black  @black  @red @black  @black  : if item 1 of the systemVersion = 10 then return "OSX" @black @brown @black  @black   @black   @black  @black @ darkorange @black" # @black$ % @black' @brown( @black, @blue- @black3 4 = else return "WinXP" -- OS 9 uses the same type as Win XP  @brown @black @blue  @black  @hh"" DarkOrchid4$  else @brown @black ; if the systemVersion = "NT 6.0" then return "WinVista" @brown @black  @black  @ darkorange @black  @black  @brown$ ( @blue) /  else return "WinXP" @brown @black @blue  @black  end if @brown @black @brown end PlatformStyle @brown @black  0And CreateSelRect will be modified in this way: on CreateSelRect @brown @black  @black E switch PlatformStyle() -- the value returned by the above function  @brown  @black @hh"" DarkOrchid4+ case "OSX"  @brown @black  2 set the opaque of the templateGraphic to true  @blue  @red   @ darkorange ) 8 set the backColor of the templateGraphic to "white"  @blue  @red  @ darkorange , : set the borderColor of the templateGraphic to "black"  @blue  @red  @ darkorange . 4 set the blendlevel of the templateGraphic to 80  @blue  @red  @ darkorange - break  @blue  case "WinXP"  @brown @black  3 set the opaque of the templateGraphic to false  @blue  @red   @ darkorange ) 8 set the antialiased of the templateGraphic to false  @blue  @red  @ darkorange . 1 set the dashes of the templateGraphic to 3,1  @blue  @red   @ darkorange ) break  @blue  case "WinVista"  @brown @black  2 set the opaque of the templateGraphic to true  @blue  @red   @ darkorange ) < set the backColor of the templateGraphic to 103,186,245  @blue  @red  @ darkorange , 9 set the borderColor of the templateGraphic to "blue"  @blue  @red  @ darkorange . 4 set the blendlevel of the templateGraphic to 80  @blue  @red  @ darkorange - end switch  @brown  @brown  -----  @hh"" DarkOrchid4 3 set the name of the templateGraphic to "SelRect"  @blue  @red   @ darkorange %  create invisible graphic  @blue @black  @red @black  @black 2 set the rect of it to the clickLoc,the mouseLoc  @blue @black  @black  @red  @black  @black  @black  @black  @black  @ darkorange @black$ ( @ darkorange) @black1 show it  @blue @black  @black  reset the templateGraphic  @blue @black  @black  @ darkorange  @black end CreateSelRect @brown  ;These handlers are in the card script to be easily copied. :  Of course, when you draw a rectangle, using for instance Revolution pointer tool, you always draw it from top left to bottom right. Here the user may choose to draw the rectangle in any direction so the code must take this into account: see the code in mouseMove handler. @1600 ^ _ During the loop while the mouse is down, CheckObjs function checks which objects are selected and returns a list of selected objects long names that will be used as soon as the mouse is up. @1600 * + 4S  . "In this tutorial, two selection modes may be used: or any object must be completely enclosed in the selection rectangle or the selection rectangle (as Revolution pointer tool) just need to intersect any control boundaries. Use the way that fits your needs or make it an user preference :-) w As soon as the mouse is up, the graphic that is no longer needed is deleted and the selected objects list processed. @1600  t yHere ProcessResults handler just outputs the list of the selected controls but you will use this list to fit your needs.   e   Some tips     Of course you could use a built-in graphic that you would make visible then hidden but creating a graphic on-the-fly is more elegant. In addition, in a standalone, you can be sure that such a graphic will always be deleted because nothing can be saved in a standalone :-) @1600    , ISo if you are aware of the weight of your apps/exes, prefer this method. H   Here, the graphic is created in a locked group then the rectangle limits are set by the group boundaries. If you want the rectangle to be able to be extended all around the card window, just don't mention 'in group < group name>' when creating the graphic in CreateSelRect handler. @1600 # $ 0      The code uses the clickLoc coordinates and it's valuable to know that this function does not return the mouseLoc at last mouseUp but at last mouseDown: here it makes the job easier. @1600    n     Before creating any object (a button, a field, a graphic, etc.) you can set the properties of the template (templateButton, templateField, templateGraphic, etc.) then create the object invisibly: when shown at the right location, it will appear with all attributes specified. This Revolution feature is often forgotten because it does not exists in other xTalks but it's very handy. @1600 c d v  ` Note that the code is modular, using short handlers (commands and functions): this way of writing code, that never repeats anything and isolates specific features makes it very readable and reusable in another projects... as soon as you have understood what is a parametered command and an argumented function (see 5.4.2 page 115 in the user guide). @1600   @   Vocabulary   XHere are the main dictionary entries you can check in Revolution docs about this topic: 6 6 E   MouseDown message @1600    Switch control structure @1600    ClickLoc function @1600   MouseLoc function @1600   TemplateGraphic keyword @1600    Create command @1600    Reset command @1600    Rect[angle] property @1600  ' TopLeft and bot[tom]Right properties @1600     `4p ToplevelhExon mouseUp if the hilite of me then topLevel this stack else set the style of this stack to "modeless" end mouseUp R1Check this box to access all objects and scripts cREVGeometryMaster,scaleBottomObjectSideBottomMaster,moveVObjectSidebottomMaster,movehDistancefalseMaster,scaleBottomscaleBottomtrueMastertrueMaster,moveVObjectRefcardMaster,scaleBottomObjectRefcardMaster,scaleBottomAbsolutefalseMaster,moveVAbsolutetrueMaster,scaleBottomfalse Master,moveVtrueMaster,expectedRect18,301,100,324Master,scalebottomDistance -0.032323Master,movevDistance-28Master,scalerightDistanceMaster,cardRanking1Master,scaleleftDistanceMaster,scaletopDistance cREVGeneral revUniqueID 1158497625355 @ Flche2.png PNG  IHDR Kpl_ pHYs  gAMA|Q cHRMz%u0`:o_FIDATxb?,Xv$ϯ.?~~e'P#@11 @?~23_k_?V@p /÷>|()%ţ,%-F2\@ *n w JU牓/_ o_ū(II` b`AM]Nk5 _ ,?d+@021~K?@fӬ ~W XXY};w<||| ߿}Kw^W@koǑ74;Gڷo_߿uLL7qe`&Fqϟ_sPuFFfbA8`(10r=zk~ TxNP`=l|,IENDB` cREVGeneral revUniqueID 1158498102046#Logo i cREVGeometryMaster,moveVObjectSidebottomMaster,movehDistance -0.502857MastertrueMaster,moveVObjectRefcardMaster,moveHObjectRefcardMaster,moveVAbsolutetrue Master,moveVtrueMaster,movevDistance-26Master,scalebottomDistanceMaster,expectedRect130,494,269,523Master,moveHObjectSiderightMaster,scalerightDistanceMaster,cardRanking2Master,scaletopDistanceMaster,scaleleftDistanceMaster,moveHAbsolutefalse Master,moveHtrue cREVGeneral revUniqueID 1159867616280 SSS  Hon mouseDown revGoUrl "http://www.sosmartsoftware.com" end mouseDown ~custom control- PNG  IHDR~lC| pHYs.#.#x?v 9iCCPPhotoshop ICC profilexڝwTTϽwz0z.0. Qf Ml@DEHb!(`HPb0dFJ|yyǽgs{.$O./ 'z8WGбx0Y驾A@$/7z HeOOҬT_lN:K"N3"$F/JPrb[䥟}Qd[Sl1x{#bG\NoX3I[ql2$ 8xtrp/8 pCfq.Knjm͠{r28?.)ɩL^6g,qm"[Z[Z~Q7%" 3R`̊j[~: w!$E}kyhyRm333: }=#vʉe tqX)I)B>== <8Xȉ9yP:8p΍Lg kk Ѐ$t!0V87`ɀ2A. @JPA#h'@8 .: ``a!2D!UH 2 dA>P ECqB**Z:]B=h~L2  5pN:|ó@ QC !H,G6 H9R ]H/r Aw( Q(OTJCm@*QGQ-(j MF+ 6h/*t:].G7Зw7 Xa<1:L1s3bXyeb~19 vGĩp+5qy^ oó|= ?'Htv`Ba3BDxHxE$Չ"XAP44077&9$An0;T2421t.54ld+s;# V]=iY9FgM֚k&=%Ō:nc1gcbcfX.}lGv{c)LŖN퉛w/p+/<j$.$%&㒣OdxTԂԑ4i3|o~C:&S@L u[Uo3C3OfIgwdO|;W-wsz 17jl8c͉̈́3+{%lKWr[ $ llGmnacOkE&EEY׾2⫅;K,KhtiN=e²{^-_V^Oo§s]?TWީrjVQ=w}`嚢zԶiו8>k׍ E  [ly邟~_Y53rW򯎼^{7so}x>|쇊z>yzgAMA|Q cHRMz%u0`:o_F"QIDATxbdF$G H4>nGkͽ $I5U/WhfO^/@@ܿĂQ&v;, U|||O$0ȂgӸGLP^So]uX7 9+i|zWSH?WOVxJY s001rK0:F9o(?" X)5m]eO~.z۝=KםYrJ@tAQݻy\{}L@չ-Sw' ^~G{lWOV~%(v~ZVPB\lZw_z#rӇ[')U ̞qA#ݿLb,"o'|_c?_=aAs,t85'~~߿?~}s+YDl Y83rϛS9KW˳?H?3 @,Š 9 02qrrﳃ_+yoYt|m{̌oHucdF:_ "|c|ԏo]edb+!oξw|fqbg{sηw ϯ/|E. ă2312;Fv^!O7segdgz䇄u<+&糝{oL?| t Bg  '8Yٔ39xG2 2J33P+"㋃prsٰ3˝C ?eQ0ovswׂeHaeƏW~t߯ :r~ǻ3Hl38>@*p>ֿO~tcKjb>_?֦ =v=aO#"#d'mS">Qǧ ,T|1UBRV%'4Y˓p nŦn?f1,( YsW22WqT?~?r98Xz.5S43#?R }WzQ/#qowLэX9XŕmL,Y?=VBLX,w*<?]{ġ23a,fگ00e>ߎCXC]F͏\х.lvxuE,`_YXX߿NwyT71s 3zy͒ٴ lUK͕ -)}c5nnl듂[3*n8yU,x$ bY$d$4L$>>:{ꭀЗ>|g= P~|o_g`|/.{|\RZą95,4%D~Ç_022qIrJV*q**ᗒ32._ s~}ȅ,ncgĮ#ig^޼GR׷/>ajSRD?ãj*OoLܾx1 faeV s9fN!-KQe5G!aa[ ^oN~{rnHA 󋫨KqqSn}k>q1XUdT%C_ڒ[$SJKSTTLIU8ZNۏ?Gx~GW+2(*sٱ ޿q X @W޳2>eͩ\Pvw׾zY-NݛoM7+Iq+Z(V2{sW/~PvKꙟ(wnZ_V!_xDľTbƯ@I]u &vnn:aAJJ}0-{aQf_>\~A>/x a|x]=҆'?X=ۜ\VqIe̩>[g$\be4 KkabEXOH9 ϟqɍO^-V`%ʇ{<~y1I 2sps2 }g,,j2 UWUgWĿ630~}go |mĦ#".$"oϸd⃥>_v>AFN~A&P&S网ٳ (9i5jfA] 7٨} ! Lڿּ$8&ц;ɀAѓäRz4 Dk'U帊֒?*9pa.MQ;N)R$h։ŃY󣛛^8(3qި4wmv v?V,A{ak2xr+Sg-yJp ,$Cg7XRhBL_٪V$`)V4b(Xǐ>U%:.0  9uylq.,ZNp}ռ#ƨC9EL*UI\&qbAlND-- HK뭌&X襥s7h^5Yr"V~ݳp#<7im" PßO_ 5TӅK&6D7;3.Ik66@ /??מzW(g J^bKi%P(Kc m&n-=oo 2i /ov2u d -gzqg(\pQf+ZT=G<^|:{eQdwW&>9}Ezut5]?0F!,|$uM8koeSӛ/g?_[_A恴'eiY:sZN(Z[k?_m :ςéjfl^yE2LфP@SXݟq[ZLu|0@d<MM  E"'8mu+*VƔn}Oӵ8G;o9ZZ>=20mr8 %1x*4[(h!qi:䁎9kuʹ^1COiojʗt'4 q}g.<`B0I"{XW p0+;Rg!&v6;ϋې7&wu.'/oZcz(03,pAA:++ (%-`o@-B !4P ‡DZ{{;ss$~<xZ{W9g) Hcd@g2(ۗ{L?~!?~6ﯣt mG:xe"gxAXրFcF0Xf2A1] \ ˆ)Bky]iFݞUi7e٬Xl,8_ۥog;_=k 'ZhXI ي"5;$ a+?fJrrd(BM7w d,%aIx.)dmж\z8F^Us_oFJAX[7*P!䲵u[uJg 4 v|\Jt^c N@JXJMR;øy̠5Ϲ:≷_Ӂyi4뾾Kj"%DF`e &%Rvd{ uYz|7:^*}&%HB"&63eY&ç0}3Cp 0BPXve4M(T4,6 0UHt\B 㵁1N!a?V֛Rgsf&D&?S|m+ǘ7B2QL4 x0L&H*Wo]dہ|"{/W,4WDRkL:sx"V*&x(k2sMra6b]7W; vp6 IlmKKHDB0ƋWo^ 1"Q ƀPLNf߾7fY! !%[ߥޠ9x=Pg `2tq7[FJ0_.@uGANz }\fܟ|P5\`ƈ ͒*Ýaf![]$и KA׹1jfghAe՗eƱfyy$o"59 ^{Z20(pYwrqݟtPBRGbek2{׻+B׶ǻ)©(Fƙy7Zu@l`fVw `lQֲ8|8{'U߶r+^[ ӡ\ED[~ymiYssqӍ .zrٯ_~ rʲ JJ·soؤ${"*)`Y *4J[Ov`dgg& ,1Xz3J(3N3K厼I]_#Yt%D`+րρ*OJ+@#E Xh ,RdõcaSĒz6jܼ\==ǯ/ L$_9yĀf̜8"HӐ҇XX32Kn6Bc b?!!>yB z\@*gN4^/A]a9]cٮ¢B\*2~<&FS`KB^Ԯtuv.mxof/X5LV󿤼?~?w|?|vH˙xHWR[!+o zY}jV?ÿ;ٙ fdw6.~zߏ?~~~ó;w~|2/Ĥ%u%=9xT|CTP!_XAxxwoJDX̎[cƒ+_ X'~*fZ+krWCּs Ý _=l>$ٹ#WTOGOgGp[`C0W'=?Ǡw\"zi+'Z{7Μ r7/_ZAˋfeTxoW@PSsEon?MM(WT ֥y  + %1 (0"ɟđk)= +ֻС*  --Ėd( ٻ Ŭ ;  ξċ[-R ̸ٺ+ͷѽ!5 ȴ &.+ "ò`%6 7ұװ/TtM óȲ"6ױ1Q Ѽ{I * ιФ 2ȹ ȳ0 ֳȵԸqFvB%~/Yo؟f1w~vWFjqC!rjb~ƹ/~ laٿH|Fh S:B_/.lvtQ.H^,DG<y(.䊜m ~xxR d ͡Z$$*-~{r.51tTxxz Au3 6..K&{9KrgoaS1 G'ցV/1j )>IݫPw}`@_,ly%ǧ7% DEWаcSTonz*/v/bNQC8VG[$1HK~ DH6gy"a0!͌nds$=wF~D,z& X_O.Z)(qcYwv-~#y_#b[k?1~l_φ -bpm4 Ƽ$D>!X6S0"5\9#nhQ?h?p ů8?@`$r all handlers on mouseUp revGoUrl urldecode(the uPaypalURL of stack (the mainstack of this stack)) end mouseUp @p'Please, consider making a donation :-)FE cREVGeometryMaster,moveVObjectSidebottomMaster,movehDistance -0.147143MastertrueMaster,moveVObjectRefcardMaster,moveHObjectRefcardMaster,moveVAbsolutetrue Master,moveVtrueMaster,expectedRect110,453,222,478Master,scalebottomDistanceMaster,movevDistance-28Master,moveHObjectSiderightMaster,scalerightDistanceMaster,cardRanking1Master,scaleleftDistanceMaster,moveHAbsolutefalseMaster,scaletopDistance Master,moveHfalse cGlx2GeneralcScriptChecksumcExplicitVariablescHscrollScript0cLocalscHscrollHandlers0cSelectedChunk char 55 to 64 cHtmlScriptg5= 0 =FzWz`#cS#x{'JDp[3E|QAv 2(+o @gEm_#I `P&[cHandlersListWidth125 cConstantscHtmlHandlersb)I). EɶJƆƖJv6 qĜļԢb}B;.;5eKk4f&pũ ɯs i cDirtyFlagtrue cFolders all handlers cHandlersmouseUpcVscrollScript0cVscrollHandlers0 cHilitedLine cGlobalscGlx2TimeStamp 1213353886start 1213355679end checksum;ZU a0W 1213298238start cREVGeneral revUniqueID 1216676794510  F Donate+.png (|p PNG  IHDRp pHYs  gAMA|Q cHRMz%u0`:o_F IDATxb?( X@ 2|y4D97ÃǯiR?@FCgV% @,0QPBO  ʒ _U= 3?"`?,"^z $:8t6CH4r1H3Dz[2$[So?2843@D u~vf͹(/|!en*hϿ kE>g8s>u^%\\ =8"f0pp,]d x-k}ok 9Pγ1`Hy'DNd2Rc8v>%9qw ?~=y )rs)Cz]B;Cz%$B<| bp2bH et!"8~6@& :/T>@́❧ Ab.r6';Cgq8/} +pqn5Y#0Oo0D`v!*\ofbp(']J ;]F C9\-oa `p?FޕOtdqHow2:90vVq\l0@›Oyuܞ=gl`d@E_101,\qX=(wxac 3mcX2xǰtq;CUxBïtPr?(!LŰѐ!`2ḿ pmp]mg3@X{ ){/WWpn߽ŅP]Qp=eVQoSUV{*"5 ,v !(d8w6?H=-Uc5 \l, l|E/ex$n=|dhHp=G/i G,8@@OULfPW| Mm:}&##ɩs @́W& (Pn&(F6Xff' .rk3;Ns$(a @ZsvEJ˫j:p$?&( C5 5 `{%!<|@9^& Lݿ,ʕ5\ˡF %.##}Y@V(8(Ԁī\9aBC5C+P=L Ԃ@bf4/A*;}xS zVu,ϠW'.e8?lXQx# o>MB1d05 @A`s}p- y@f ;;9gc`S(*gOW5&F(v {Al9 >H=솖6[0a` 9T/d".~ރ]= yxn) de j܀فʵ1Y}  ^Z%Ϩ] R+KA֭a0:[TR޾tGEYAEBL۳. ;@ s@`u} ՕD@Yp*RT-f6хńv8l,[]E)a@Gx+ԑΎtf8q E lPi b]\R~ ur-ZA[7[l 2:;:#S:T/[ i&A RFLN·! ˷dQPG&~9 _Br3z@L9AgP.UxآՇ R"#nxs@m`5l@z^{n@ӝ'o ®(Āwσ NDԿtQA^prHI`E:(`XPTO0r/2syY`P\b )Mf9^ہd,؃\E3^iep$o5J*r Yј!E/PٷxU͙msҸ kz@r_0u7@ې(1!%҃gHkbUK`i4LvK΁@S|9?a N gϜe{4XԞny&r*052f..e!2#lG[]vTŠm,m cu?[_f蚷prEV_q8x|4 bXNBZP@mV(\T[^*?y\<Ύ^k™%$?8fZ_%% ނ0AEx\g 6 T0:fH0 eʁDp,x8ظ8p6 (  y,g T 04K`p>@r@ _11J3 +g?0l@, 0B#DcbD9GCeO?(P|@,, ŪXX(j2c(b< a"@իW(bĂ,R2o(\ * ޖ I;ۏ 1 `: ^ E |x9tCݔu`= {Y1Aa?}ex#@#[}:?;3\@CN_ǐٲL7DWDx_5q "p3za ^`:l..{@EޞY l e388p.C ` 9[ . :rgcT;̿%ûO*#.`ep-}Jr ]+~{ShSPvJHy./dĐhpC3EpNlM 6u_b3꓋w2$Ë \ rb ^VZ r" kc\kd{Hb/Ï? ,Aڭ Fzp- x@vY*18v6 ap:qf @7eUř#` YepgVM -|]\_1HËFzP }zS:l7PԸ kcD$6KpQ|V"9r(*)ŷ[`u &>}<\޷g\(-\8vAM-+΁<|.8uUE![ҝl 3:p҃Y> R V #pqp1@Ҕлp&Y&2([" n<0A'(3LiKeu0wAu"(BAu!8.G>?iu X_BMJ"YC6k 03#o Ld0= s@ >flu @1!@uA?V!`T[x'H>oQp5)԰9{!Ow7H \ vAz6?N(+8S=`{Dye =' bAW;S ?a9<{0\eełCCs}h3$ؚs,7!u>x}n9 pbp 9GH(%yQRcȊpƴX)zц@;Ż hl3e0\},\ ꔣ@6(J؆@ ٽ+,׸8CZZ[ M1gg243\:w,jˁ Wfeppb8{, t7A+W1Cvq) 9 Aեk>@U "Aj܆ =v`Q0ey[N/,w+@-WPd'AWhc{ bXNBZP@mV(\T[^*?y\<Ύ^P&@á \Me3HWoc"q{`jIp KA`]O`2L@@;J Xu ^ElrrMn  y,g d  0? / h@47L !7 Ep @^&dhp )= PPz Z ߃qRMIENDB` cREVGeneral revUniqueID 1216677024010Actioni"9ot cREVGeneral revUniqueID 1218470972510Scriptep1on mouseUp edit script of this cd end mouseUp mpZ{ Show script cREVGeometry Master,expectedRect109,373,199,396Master,scalebottomDistanceMaster,movevDistance-116Master,moveVObjectSidebottomMaster,movehDistancefalseMastertrueMaster,scalerightDistanceMaster,moveVObjectRefcardMaster,moveVAbsolutetrueMaster,cardRanking1 Master,moveVtrueMaster,scaleleftDistanceMaster,scaletopDistance cREVGeneral revUniqueID 1216823980985 Test ,i = Game area2222 cREVGeneral revUniqueID 1218468152646Revolution 3.0jGR8]O cREVGeneral revUniqueID 1218463056996 mRevolution 2.6bG8R8ij cREVGeneral revUniqueID 1218485085557 nRevolution 2.2bGR8gh cREVGeneral revUniqueID 1218485162400 Mode ,i`V=LSelection mode cREVGeneral revUniqueID 1218468152647 Intersect`D`Rc cREVGeneral revUniqueID 1218466168886  Enclose`D`ht cREVGeneral revUniqueID 1218466172046   Result 5XGQ cREVGeneral revUniqueID 1218468152648 Intro &-uList3Begin to type a Christian name, a name or an email address: If existing entries are found in the list on the right they will appear in a drop box. If you create a new entry it will be added. In all cases, ranking will be fed and you'll see the drop list reordered if you call the same entry several times. 1 cREVTable currentview?Within the game area, hold down the mouse and select objects... cREVGeneral revUniqueID 1218471242074 @Within the game area, hold down the mouse and select objects...* Appearance i`Wb cREVGeneral revUniqueID 1218473070625+Mac OSX`Dac cREVGeneral revUniqueID 1218473093242  ,Win XP/Mac OS9`Dat cREVGeneral revUniqueID 1218473093243  - Win Vista`Da't cREVGeneral revUniqueID 1218473492176  O Rev3.3.0.png @@e$$WPNG  IHDR$$ pHYs  gAMA|Q cHRMz%u0`:o_FIDATxb?`8@A4@D;ׯ_ ׮])O0031dee2AlܸǏ  yxxHv@?0L8鿌'Õ+W$%D=z /^d~*CbB< #)@|^&LHDj2( tA˺1pwr̐ҎZ/B` @n|ﴁ J o#Xq5lll@{nn.{Ltg /W8T"*N:w ** ?aFYNbbdeeŐ ;ϟ?}po;d? r#ömBF=xUkɠ`eiv̥K/Z̐?!tR/^0hjj1 d۷o$*bAO+7oa077g; >s,ʕ+^? );0mꠗρQr0'0|!߇V4 PBp<JB (?`ϟ?1 gx*X/qo ?3<:fw A?@r\/2<rb"* ]b:3i`y~3021b8 Ђ1 >_ /z7c(*XB~ ?1gx4z 4 ƨ۶=bP[ LePnifbX(FˮhV >t!44 #0g0` LXɀ7oނAXX\6ǀ]lmm1mYR3KaP2CXf`ZaO>D...0 P.E<` ,FAU: y~A!,Of!8УPA?{w,z9eaeecz ր &rw ?+Ep/` ;3&{?1LXt7b Te#GVmzl޲=AUMAF L_?8A/43E`Ɏ]>|B{~ 03 ~bPTTddP%#j_1 gyC###sؗ_DD$f(J@MRm^ivُ lFb`&Y|e_03 Bi ?+pnnn@a4?Μ9㦭@'D))i`+QAΝ; weXPȀr0BSF@۷rAEYn @P*A dTUT9XS(t@RHX 'kW4Ձ &8Ga 4X? 0GZA?`XiN@zCNv#(߼}R`aa"b"P0 8|> 1ܗ/_')!.@mc-A߽{ Ԡ9Zy}CI)ŠL*$$Yݪp>@ ``H|; ؐϟ31r(_z\ @GbV J>f+H"(!ǁM  @ P*GP)o~SS`;= ]W h9 h9  IIENDB` cREVGeneral revUniqueID 1218481613080]Rev3.3.0+.png @4$${PNG  IHDR$$ pHYs  gAMA|Q cHRMz%u0`:o_FIDATxb9r666_~1 @L b8ab!U ‚!d; v߿>~ " ex CA]]߿@˟20333ya`6?Í7 <<<`u XM7gccex=77 pB Lo@ .^`dF)vD@kVd%>D?vZ}==LՙtK.1f55U@rP#KH3$3? 0s+W5< 2`ǀxb `50.] MM-`cdax9 @8g1{x2 ! |Y+W2~Sv`A/d8u00|!߇C"É 'tB_2 0Bs Bmƍ gx*X/qoN<Xv=:f}) }S'Ϟs\/2<rb¿*a>A.~ >3>} !l~ ,K0@(cptg8t`?0~_9 ^yk@3y  ($UӧOх% BCXXڊڵYwZ`gO *"7͒'p$ZU9K7_`bbQPrH+Wg` ̼b?o޼e3"D cX>~Ȱz*yy9`Ha΂PX00YʉDKC:QFFAYYk@X#iY9"N`qOf!8УP?}p >1XrpU@Bطw/Ϊ ˡw2l`GPP\0=a`lYsągL ~b虰 0:A oVV W^a @L!3q h tU55 _20}ʫ3X2K33\p&D`]v : &gp. ~ |7d`QmB+U,ohdvz 8'@!nnnC~ktP 6X X/4s^pG6#}`t 10I ʕ >`0S S` T=`41J J0@n7n0ܹ@CG +dܹNgo߾&`ǂBHA(4AWP;ǠʠlakgݺyAFe @;X /g07```F :-Q7~.2\8AB\[XvFX @ Pѣ _(кk?J БOw2Cݻw4T{= r @l1IIIPYJ*PAAiPd=rU@OA1@D5aA \ZW/_ | ꉀ %p XEh38~$++ mD@ԩ @Ei捫A?t,8^z`ei H=(@!0: I \ | j]~XA~baFQ}/^ p]bR{DлҸX"\@$96J4F?h9 h9 QIENDB` cREVGeneral revUniqueID 1218484703670g Rev 2.1+.png @h$$XPNG  IHDR$$ pHYs  gAMA|Q cHRMz%u0`:o_FIDATxb9rAalll ᘙ30ͤj8 j9 Y2= a3޽lG5 ()u@1Q1J@1#QDc@9ӘAPPA!EWEcٳtuueEADAڴ4%xZ U"QA8::BIv@1fcX 1իJSD Ǽ{Wư(Cv `P!G5C9waJii@Lr0r VT0ܛ5 EbȎ|)KĂܠB 11 x\8kV:g E+r !ȎuC.% asԪąY 3ecL! #(NAd 1BXǀ@,4c%ݻiz =q Β4{09!1 @x t TB"}Jdr3b$-M;PCc@ IJr޿Cc@ IvY$Y$9^Gc@ aw"(j8=f9Ec@ X(mfkdQ D-@ 4?Ŗ*IENDB` cREVGeneral revUniqueID 1218485037319h Rev 2.1.png @:$$[PNG  IHDR$$ pHYs  gAMA|Q cHRMz%u0`:o_FIDATxb?`0@QAAf 53sgς@HyD @ZLJC j9 Y 666fؽ{7َ &j8@QRzf(bc::b:H .F؂c@HK3ΞE8Օ@D9WE!09 Xզ)RhY "1JL 5CEjx^MTB &j8ݻr0E`}G0t9 2: իa/`7k<6G 5#$ԉ7Đ#1RB9 WA)(bx %c@(p֬t$o9(AϜ"V4 C3 )*\ JUgӉ g B1 @X FP5Ⱦ%(3cYR; J[I}nCOࠨ%b&%Ma@ju @9BtG*Ulc@ n~ G& !%d` Hj)t s؞={Hv #)]iBBv{Hv #}{Ž:$7Ԏ#@(s Y2쎢1 @d\E ǀ@QԷ,(s #5`,J8FhЍ#d3IENDB` cREVGeneral revUniqueID 1218485037387i Rev 2.8+.png @Z$$ `PNG  IHDR$$ pHYs  gAMA|Q cHRMz%u0`:o_F IDATxb9rAa>}j=*TXde$kj)*2{C@AJJJ ,a"&p*"چ᛾_?3 a L^^ ^fGw[߿2133HT1031X3 c @˗1-W12`02z --SޯfPr ߾}C NlN|/20Ù?PI] &X%F&3`8 vбc.}pTZ_ _h1gĈK0efz2/QQiܹw 93Lo@_f?~3cߎaΝ;7_ M^Ǐc !pî] ׯ:0C3C ]b`?Dxxx|7JV B˖3ܾNS.2y1,X~0C`W ?~ <_&FhNadC0&! o888b_|fx=m-_us^ӧO1 :s%0v478Z~NMMMEsg`db00L[ >}t=L^'3H[ wVǀ@!AAA'O$`ؼ ?:111666ۀ-fPa`` T<=ҁ o,tp&; 2怷@Oc@29L!OP ?C/@G030 ;]., N`p1d LS'1(+1x͛3Lr *@3@? VaΜm(h˛: Nϟez7Czz<;8ý.^7t@ _G`f& @ݣ*^>a@F!ChVVF#C!3ahj`dϰq%Gt@t- -k` 0A ~i.^`gX0q~:X Q 0ӓ4;ۍ\p{1ܾȰ}GիςK~t@uٖ-R ؁kfEd3*YX2vV&I .ŋ&20:05fz=>y L3+1p>ٳg`#81۷X[80s6( LgM> *%;CKk Û*OO3\a8Ç_>7'~˳_ /Nex00+ К5q :8@#$X@A])CBB@wo1^x*Ƶ{f;P/~3|xç EEqX^!)G0×@~G8၂΀ÊU@~KpvU` pCbJ)P&Ȑ?`Tݳ# rlll=tqeKYc;дLax_n0H>̰amm`ڹӽATDOc2apwwx1 %%`l1R/|aP-7) l1e:Ú= ,  :`Qk:@ش nZ.98\efT1\rcaprrVȯ1̒@%<.@Cͅ+R󊁅?1XXrr32k1LRffn l)C)e ..1 s"O9`12LP᚝޽ =]|AMM@04& J\ G2Yp#"A-@ǼW,, 11%d; Hj䗗3Xsw61  uw`?lm $; P g)%%&ǠlXfompyCxoFDSŐBc@ PʦwX6{pAuY~0̚~1.0e7@}}~GD3+ kRXǏ0x!33Xw߁`aa:R rTߨ38pXn<6O{r ZZZ(z W *`llL1Z0O(iT@XsNGD@n :ЋIENDB` cREVGeneral revUniqueID 1218485037455j Rev 2.8.png @$$ wPNG  IHDR$$ pHYs  gAMA|Q cHRMz%u0`:o_F IDATxb?`0@Ò˗/10ëWoq :h۶-Uز$nb`fcePe"&Vi/Yўԩ ̬ 6 @6ܼR ɓgΜc ϟYYYƇg5e…+ /c@@d9hƌEDW߿122`02z3|޿_o+`hh HJC.\'02<_ e`Uv L H2ܾ=uu>VG}?#gD0huwOϰt37o~C/(tt? h_F~1|ŰgϞ...Q!La@UMG Ӧ=&o ߾f?~3cߎaΝ;7_ M^999P !tԩ1%p C0T~10d !`3:AŋZ3ܼAhrw @8??Â^ ^^1!( @6$ɟ߀QnΝ;W@aݺ5 X Q6q:`1Lz/t9e MM6 KT3lR~'#p(L[ >}π=8 n=0&zB k׮| %QE, I1112˃ !mmvC?1@7'AAA[noto~a۶0x{L&={?p0f( v 0e0pqi0=;$%% P$+ ;]., w1d LS'1(+2r ڼ<Ô)7 pAi߿?@'01$&V:&@:@/8? d fXx! @p3|tpfP t=Z ׯ;j„{ tfCЬ FB fԂ4aK Y=A Z+ ,,c&H/UO0mcx.a: &  >F o7seÅNz,oPP0?Gw@ae׭&hv _@0ٌ`e`V<< L \ 30||1gWcxC]}2"8]< ~2sٟ?*ge+0\T6]b3 j*f 0pbx}^3|x ~zh0/?^1|PTl ͏#GOM9 t0×@~G$i^~0Xe`ffx̙/^0MNa8r!1LXdzY`cc. ˖}vi uax_n0H>̰amm`ڹӽATDOc2 @l9;'XF(XHf,ПpƖAt 18:}+S.NP155Z8A={쿽]#woppA,0ˆ:ܿʠa{srrKx\y,,9f)3\37c]2PRRb h&&&r 0cce4ɃT5;;ɽ{znCs`s5="g-`{&G_ã6|BW[<zl{_5 4`_766P] yy !!! 8A&]ooG3;w]v KK$n\gìY{9.0eefd$7 FzXU {/'N0qaXs + O6Yn[Z   d;A*&VIIR$0 Pfwvk5=ϟ+j+&H8FhЍ8\IENDB` cREVGeneral revUniqueID 1218485037535