REVO2700r7 ListMagic3 Y&------------------------------------ ## System messages ------------------------------------ on preOpenCard if there is a btn "Tabs" then lock screen set the menuHistory of btn "Tabs" to the number of this cd unlock screen end if pass preOpenCard end preOpenCard ------------------------------------ on preOpenStack local tFonts ----- if the long name of me = the long name of this stack and the short name of this cd = "Action" then start using stack "SSSLMLib" if version() < 2.9 then if IsMC() then answer error "ListMagic requires 2.9 engine or later." with "Sorry" -- lib else answer error "

ListMagic requires Rev 2.9 or later.

" with "Sorry" close this stack exit to top end if ----- if isMC() then modeless this stack -- lib set the loc of this stack to the screenLoc put the fontNames into tFonts sort tFonts put tFonts into btn "Fonts" ----- if the platform = "MacOS" then set the menuHistory of btn "Fonts" to lineOffset("Lucida Grande",tFonts) set the loc of btn "Actions" to 710,40 else set the menuHistory of btn "Fonts" to lineOffset("Tahoma",tFonts) set the loc of btn "Actions" to 710,33 end if set the menuHistory of btn "Size" to 1 ----- lock messages set the cSSSHeader["uCurHeaderLabels"] of fld "ALaiTunes" to empty if the platform = "MacOS" then LMPopulate isoToMac(the uRefList of cd "Action") -- lib else LMPopulate the uRefList of cd "Action" -- lib unlock messages end if end preOpenStack ------------------------------------ on commandKeyDown pKey if pKey = "F" and the short name of this cd <> "Action" then click at the loc of btn "Search" else if pKey = "P" and the short name of this cd <> "Action" then click at the loc of btn "Print" else pass commandKeyDown end commandKeyDown ------------------------------------ on resizeStack pNewWidth,pNewHeight,pOldWidth,pOldHeight -- resizing is completely scripted for compatibility with MC local tHDelta,tVDelta,tNewLoc,tNewTop ----- if the long name of this stack = the long name of me then put pNewWidth - pOldWidth into tHDelta put pNewHeight - pOldHeight into tVDelta ----- set the rect of btn "Tabs" to NewRect(the long ID of btn "Tabs",tHDelta,tVDelta) -- set the loc of img "SSS.png" to NewLoc(the long ID of img "SSS.png",pNewWidth,tVDelta) -- set the rect of fld "Info" of cd "Presentation" to NewRect(the long ID of fld "Info" of cd "Presentation",tHDelta,tVDelta) ----- set the rect of fld "Prompt" of cd "Action" to NewWidth(the long ID of fld "Prompt" of cd "Action",tHDelta,tVDelta) -- set the top of fld "Prompt" of cd "Action" to NewTop(the long ID of fld "Prompt" of cd "Action",tVDelta) -- set the left of btn "Actions" of cd "Action" to NewLeft(the long ID of btn "Actions" of cd "Action",tHDelta) -- ----- set the right of btn "Print" of cd "Presentation" to the right of fld "Info" of cd "Presentation" put NewTop(the long ID of btn "Print" of cd "Presentation",tVDelta) into tNewTop -- set the top of btn "Print" of cd "Presentation" to tNewTop set the top of btn "Search" of cd "Presentation" to tNewTop ----- put NewLoc(the long ID of btn "Buy" of cd "Presentation",pNewWidth,tVDelta) into tNewLoc -- set the loc of btn "Buy" of cd "Presentation" to tNewLoc set the loc of btn "Install" of cd "Installation" to tNewLoc end if pass resizeStack end resizeStack ------------------------------------ private function NewRect pObj,pHDelta,pVDelta local tRect ----- put the rect of pObj into tRect add pHDelta to item 3 of tRect add pVDelta to item 4 of tRect return tRect end NewRect ------------------------------------ private function NewWidth pObj,pHDelta local tRect ----- put the rect of pObj into tRect add pHDelta to item 3 of tRect return tRect end NewWidth ------------------------------------ private function NewTop pObj,pVDelta local tTop ----- put the top of pObj into tTop add pVDelta to tTop return tTop end NewTop ------------------------------------ private function NewLeft pObj,pHDelta local tLeft ----- put the left of pObj into tLeft add pHDelta to tLeft return tLeft end NewLeft ------------------------------------ private function NewLoc pObj,pNewWidth,pVDelta local tLoc ----- put the loc of pObj into tLoc put pNewWidth div 2 into item 1 of tLoc add pVDelta to item 2 of tLoc return tLoc end NewLoc ------------------------------------ -- added for Metacard compatibility: command revMail pTo, pCC, pSubject, pBody revMailUnicode pTo, pCC, uniEncode(pSubject), uniEncode(pBody) end revMail ------------------------------------ command revMailUnicode pTo, pCC, pSubject, pBody local tURL,tCC,tSubject,tBody ----- put uniDecode(pSubject, "UTF8") into pSubject put uniDecode(pBody, "UTF8") into pBody put urlEncode(pSubject) into pSubject put urlEncode(pBody) into pBody replace "+" with "%20" in pSubject replace "+" with "%20" in pBody ----- if the paramcount is 1 then put "mailto:" & pTo into tURL else if pCC is not empty then put true into tCC if pSubject is not empty then put true into tSubject if pBody is not empty then put true into tBody ----- put "mailto:" & pTo into tURL if tCC then if (tURL contains "?Subject=") or (tURL contains "?Body=") then put "&" & "CC=" & pCC after tURL else put "?" & "CC=" & pCC after tURL end if end if if tSubject then if (tURL contains "?CC=") or (tURL contains "?Body=") then put "&" & "Subject=" & pSubject after tURL else put "?" & "Subject=" & pSubject after tURL end if end if if tBody then if (tURL contains "?CC=") or (tURL contains "?Subject=") then put "&" & "Body=" & pBody after tURL else put "?" & "Body=" & pBody after tURL end if end if if tCC or tBody or tSubject then put "&Content-Type:text/plain;"&"charset=utf-8" after tURL end if end if launch url tURL end revMailUnicode  w  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%252d8ListMagic 1.1 - Trial version  ULucida Grande ULucida Grande ULucida Grande UGeorgiaUGeorgia Utahoma Uarial U Arial Black UB Optima Bold UCracked U Courier New U Courier CE UCourier UCopperplate Light UCopperplate Gothic Light U Chalkboard UTektoMMObl_240 RG 250 CN UTahoma ULucida GrandeULucida GrandeULucida Grande UTahoma ULucida Grande CE ULucida Handwriting WVerdana UVerdana UVerdana U4 data columns U New York U New York UMonaco WVerdana WLucida Grande ULucida Grande CE,Polish @UVerdana AUVerdana WVerdana UVerdana WLucida Grande W U U U Krungthep UKrop UI Garamond LightItalic UNovarese Bold ULucida Grande CY WVerdana UVerdana WVerdana U Segoe UI UPapyrus UPapyrus UTahoma U Segoe UI U Segoe UI @U Segoe UI W Segoe UI WVerdana U Segoe UI W Segoe UI U@Gulim U@Gulim UAharoni UAharoni UCambria UCambriaULucida Grande ULucida Handwriting ULucida Grande ULucida Grande U Marker Felt @WVerdana ULucida Grande UVerdana @WLucida Grande0ULucida Grande0WLucida GrandeUTahomaUTahoma WTahoma0UTahoma0WTahoma WLucida Grande W Marker Felt Umad Wmad UI Optima Oblique WI Optima Oblique WMonaco WTahoma WTahoma UArial WArialUArial WArialWArialU Book Antiqua W Book Antiqua U Book AntiquaW Book Antiqua U Book Antiqua WArial W Book Antiqua W Book Antiqua U Book AntiquaU Book AntiquaW Book AntiquaUVerdana WVerdanaWVerdanaWTahoma UI Optima Oblique WI Optima Oblique UOptima WOptima UOptima WOptima UOptima WOptima U Helvetica U HelveticaW courier new UTahomaWLucida Grande WLucida HandwritingWLucida Grande W Marker Felt U Marker Felt Lucida Grande cREVGeneralscriptChecksum;ؒ`e debugObjects breakPoints handlerList|preOpenCard preOpenStack SSSAdjustColumn SSSAdjustAllColumns SSSExtractList SSSExtractColumn SSSExtractLines SSSGetCheckedBoxes SSSGetHilitedLines SSSGetCurSort SSSPopulate SSSSetCheckBoxes SSSSetHilitedLines SSSSetHilitedLinesColor SSSCreateHeader SSSLastVisibleTab cSSSHeader[pProp] _RealTabStops _RealColumnsNum _SSSAnswerError _CreateFieldAlternatingColors _RightColorNotationbreakpointstatesscriptSelectionchar 457 to 456scripteditorvscroll0breakpointconditions bookmarksscripteditorselection55 tempScript prevHandler preOpenStackstackfileversion2.7scriptAlreadyHiddenfalsecREVGeometryCachestackID94757 altStackID9259 cSSSHeader uLibNameSSSLMLibAction PY------------------------------------ ## Messages sent by ListMagic widget -- To get the short name of the widget use: -- put the short name of pWidget into tWidgetShortName ------------------------------------ on LMSelectionChanged pWidget,pHilitedLines DisplayPrompt "LMSelectionChanged - highlighted line(s):" && pHilitedLines -- sent when selection changed in the list -- pWidget is the long ID of the widget -- pHilitedLines is an integer (one line number) or a comma delimited list (multiple lines) -- write your code here: end LMSelectionChanged ------------------------------------ on LMListEdited pWidget,pItem,pLineNo,pOldValue,pNewValue DisplayPrompt "LMListEdited - item" && pItem && "of line" && pLineNo && "-" && pOldValue && ">" && pNewValue -- sent when an item has been edited and changed in the list -- pWidget is the long ID of the widget -- pItem is the item number -- pLineNo is the line number -- pOldValue is previous value -- pNewValue is new vlaue -- write your code here: end LMListEdited ------------------------------------ on LMListFiltered pWidget,pColumn,pPattern DisplayPrompt "LMListFiltered - column:" && pColumn && "by" && pPattern -- sent when a column is filtered -- pWidget is the long ID of the widget -- pColumn is a column number -- pPattern is the pattern used to filter -- write your code here: end LMListFiltered ------------------------------------ on LMLineHovered pWidget,pLineNo DisplayPrompt "LMLineHovered - hovered line:" && pLineNo -- sent when a line is hovered or the hovered line changes -- pWidget is the long ID of the widget -- pLineNo is a line number -- write your code here: end LMLineHovered ------------------------------------ on LMCheckBoxChanged pWidget,pLineNo,pStatus DisplayPrompt "LMCheckBoxChanged - on line:" && pLineNo && "- status:" && pStatus -- sent when a mini check box highlight changed in the list -- pWidget is the long ID of the widget -- pLineNo is a line number and pStatus is a Boolean (true or false) -- write your code here: end LMCheckBoxChanged ------------------------------------ on LMColumnsReorganized pWidget,pSourceColumn,pDestColumn DisplayPrompt "LMColumnsReorganized -" && pSourceColumn && ">" && pDestColumn -- sent when columns order changed in the list -- pWidget is the long ID of the widget -- pSourceColumn has been put at pDestColumn place (columns numbers) -- write your code here: end LMColumnsReorganized ------------------------------------ on LMColumnWidthChanged pWidget,pColumn,pNewWidth DisplayPrompt "LMColumnWidthChanged - column" && pColumn && ">" && pNewWidth && "pixels" -- sent when a column width was manually changed -- pWidget is the long ID of the widget -- pColumn is the column number -- write your code here: end LMColumnWidthChanged ------------------------------------ on LMSort pWidget,pColumn,pDirection DisplayPrompt "LMSortChanged -" && "column:" && pColumn && "- direction:" && pDirection -- sent when columns order changed in the list -- pWidget is the long ID of the widget -- pSourceColumn has been put at pDestColumn place (columns numbers) -- write your code here: end LMSort ------------------------------------ on LMMouseDoubleUp pWidget,pLineNo DisplayPrompt "LMMouseDoubleUp - double click on line" && pLineNo -- sent when a double click occurs in the list -- pWidget is the long ID of the widget -- pLineNo is a line number -- write your code here: end LMMouseDoubleUp ----------------------------------- on rawKeyDown pKey -- allows to delete lines using the delete key in edition mode global gLMLanguage local tWidget,tText,tRef,tLocalizedData,tPrompt,tDelete,tCancel ------ if the selectedField <> empty then pass rawKeyDown if pKey = 65288 and the clickLine <> empty then put word 4 to 5 of the clickLine into tWidget if the short name of tWidget is among the lines of the cSSSHeader["uLMWidgets"] of this cd then put the long name of tWidget into tWidget put the hilitedText of tWidget into tText if tText = empty then pass rawKeyDown set the itemdel to tab if the cSSSHeader["uNumLines"] of tWidget then repeat for each line tLine in tText if the cSSSHeader["uCheckbox"] of tWidget then put "

" & item 1 of tLine && char 5 to -1 of item 2 of tLine & "...

" after tRef else put "

" & item 1 of tLine && item 2 of tLine & "...

" after tRef end if end repeat else repeat for each line tLine in tText if the cSSSHeader["uCheckbox"] of tWidget then put "

" & char 5 to -1 of item 1 of tLine && item 2 of tLine & "...

" after tRef else put "

" & item 1 of tLine && item 2 of tLine & "...

" after tRef end if end repeat end if if gLMLanguage = empty then put GetUserLang() into gLMLanguage -- lib put line 4 of the cSSSMenus[gLMLanguage] of tWidget into tLocalizedData if the platform <> "MacOS" then put MacToIso(tLocalizedData) into tLocalizedData set the itemDel to tab if the number of lines of tText = 1 then delete item 2 of tLocalizedData else delete item 1 of tLocalizedData put item 1 of tLocalizedData into tPrompt put item 2 of tLocalizedData into tDelete put item 3 of tLocalizedData into tCancel answer warning "

" & tPrompt & "

" & tRef & "

" with tDelete or tCancel as sheet send "resumeStack" to me if it = tDelete then LMChangeLine 3,tWidget -- lib end if else pass rawKeyDown else pass rawKeyDown end rawKeyDown ----------------------------------- private command DisplayPrompt pPrompt -- used in the tutorial only put pPrompt into fld "Prompt" end DisplayPrompt ------------------------------------ on mouseLeave -- used in the ListMagic only put empty into fld "Prompt" end mouseLeave   uRefList @Name First Name N Street City ZIP Phone Ref Status Allen Jimmy 100 Broadway street Baltimore 38781 968-7544-278 451 Inactive Morgan Oliver 41 West street Las Vegas 99486 169-5976-968 447 Inactive Smith Bryan 21 Lee street Tucson 91613 194-8382-252 634 Inactive Cooper Kevin 26 College street Cleveland 81562 615-3117-191 650 Active Williams Geoffrey 83 Lakeview street Louisville 31677 681-7798-324 685 Inactive Davis Logan 81 Central street Oklahoma 39212 272-5166-877 990 Active James Paul 86 Center street Portland 66536 136-5264-574 552 Active Baker Vanessa 82 Birch street Washington 33499 247-8738-258 433 Inactive Harris James 69 Smith street Indianapolis 28599 658-6799-758 697 Active Moore Dave 42 Adams street San Jose 59668 487-7299-928 179 Inactive Lewis Harold 51 Church street Fort Worth 68579 278-1981-384 729 Inactive Martin Marvin 17 Lake street Memphis 59847 835-5356-155 326 Inactive Anderson Luke 36 Pine street Los Angeles 86738 465-8596-327 114 Inactive Morris David 50 East street Philadelphia 13498 113-8322-247 547 Inactive Clarke Sandy 86 Wilson street Chicago 29685 282-2721-673 404 Inactive Thompson Jennifer 18 Spring street Austin 21297 774-2651-145 227 Inactive Green Karen 60 Hill street Phoenix 19397 416-3259-699 911 Inactive Watson Edward 39 North street Mesa 81828 124-4778-284 989 Active Jones Georgia 96 Cedar street San Diego 33652 139-1989-938 355 Active Roberts William 2 Washington street El Paso 63533 454-4646-748 703 Active Evans John 81 Ridge street New York 74217 397-8334-542 490 Active Parker Elton 21 Elme street San Antonio 82917 212-1113-633 808 Active Edwards Bill 90 South street Fresno 96531 165-5472-839 329 Active Phillips Dorothy 2 Locust street Jacksonville 48418 842-8223-813 546 Active Lee Ronald 95 Sunset street Denver 64632 562-4515-784 265 Active Wilson Shirley 10 Taylor street Boston 11346 493-4438-492 588 Inactive Turner Douglas 14 Hillcrest street Nashville 57864 438-2594-899 429 Inactive Walker Gordon 17 Madison street Dallas 57794 613-4264-532 742 Active Brown Peter 90 Oak street Albuquerque 79219 141-1335-686 232 Inactive Scott Stephen 20 Highland street Houston 37185 248-2653-553 177 Inactive Mitchell Joey 28 Mill street Charlotte 75861 255-2638-754 876 Inactive Hall Ian 85 Green street Seattle 34461 882-7776-233 155 Active Hughes Harry 84 Twelfth street San Francisco 19493 345-2916-715 768 Active Robinson Donald 72 Main street Atlanta 93593 214-9546-394 642 Inactive Taylor Heather 68 Franklin street Detroit 88723 512-5686-681 655 Active Wright Gary 15 Sycamore street Kansas City 77263 788-2546-251 542 Active Bell Irwin 61 Jefferson street Milwaukee 47423 545-9367-869 997 Inactive Johnson Walter 45 Park street Long Beach 55165 523-9985-779 156 Active Jackson Dustin 87 View street Columbus 15936 935-7265-122 628 Active Wood Edwin 25 Maple street Sacramento 17595 257-3159-952 621 InactivecREVGeometryCacheIDs0122588850894420081226493549508190201227461701508334061229072969553533021104075103241160012258861954551921122582082093416921226066164278120821229076165859534691225960768142533012260483515011083112260528667361092712259883673098120122588365854717801225885462753191612259883756508121122788365845437290123134118968994740123134118969094741123134118970094751122725848486829818122598914057481221231341189691947421231341189701947521225990147442837312313411896929474312313411896939474412258879356571979122597314481563531231341189694947451231341189695947461231341189696947471225883327554177712313411896979474812313411896989474912263079465221418912313411896999475012265667637451916112275247874573350012258885863412009122588626758119221225989160435812312273532450103251412289883031985090112260470704581081812289918292755090212251208383161006123065431176077490cREVGeometrycachetotal48order  cREVGeneral scriptChecksum.t 0ű3\PM breakPoints handlerListSSSSelectionChanged SSSLIneHovered SSSCheckBoxChanged SSSSortChanged SSSRightClick SSSMouseDoubleUp resizeStack resumeStack suspendStack closeCard GetHilitedLines preOpenCard CheckForRegistration DisplayPrompt mouseLeavescriptSelectionchar 5544 to 5543scripteditorvscroll1636 bookmarksscripteditorselection5796 prevHandlerCheckForRegistration tempScriptscript cSSSHeaderuHilitedLines uLMWidgets ALaiTunes| *B*O@JL6.r&+ Presentation Pon preOpenCard set the enabed of btn "Buy" to not CheckForRegistration() -- lib -- resizeStack -- pass preOpenCard end preOpenCard   uDisclaimer

ListMagic provides a full automatized Installation and Modification Wizard dedicated to a highly sophisticated widget. Using this Wizard, you are sure to get ListMagic customized as you want it in your projects with one or two clicks only: a lot of time saved for you and a professional look for your applications.

ListMagic is provided with a library of more than twenty custom messages, commands and functions allowing to master it straightforward in your scripts.

In this trial version, all features are fully functional: the only restriction is lines added to your data saying it is a trial version as you can see it in Action section. Of course, this limitation will disappear once you will have bought ListMagic.

Just click on the Buy ListMagic! button below to know how you can purchase ListMagic for 49 dollars (36 euros) only.

uSpecialOfferDisclaimer

ListMagic provides a full automatized Installation and Modification Wizard dedicated to a highly sophisticated widget. Using this Wizard, you are sure to get ListMagic customized as you want it in your projects with one or two clicks only: a lot of time saved for you and a professional look for your applications.

ListMagic is provided with a library of more than twenty custom messages, commands and functions allowing to master it straightforward in your scripts.

In this trial version, all features are fully functional: the only restriction is lines added to your data saying it is a trial version as you can see it in Action section. Of course, this limitation will disappear once you will have bought ListMagic.

Just click on the Buy ListMagic! button below to know how you can take advantage of ListMagic introducing offer for 39 dollars (28 euros) only (a 20% discount). This offer will end on 2009 January 15th and then retail price will be 49 dollars.

 cSSSHeaderuHilitedLines cREVGeneral bookmarksscripteditorvscroll0scripteditorselection97 handlerList tempScript prevHandlerscriptcREVGeometryCacheIDs 122588850894420081227962444708377501226228315196134681225973144815635312258885863412009122893362155650807122951322819860559122777925704237075122673673544524792cREVGeometrycacheordertotal9v$ Installation P   cSSSHeaderuHilitedLines cREVGeneralscripteditorvscroll0scripteditorselection97cREVGeometryCacheIDs122588850894420081226513797939190481226513797940190491229175877755260601225973144815635312291055820212605912291055819232605812265135524951904512265135524961904612265135524971904712289336215565080712258885863412009122951322819860559122917817335726062122795834183437713122651398059819050122917831176626063122622831519613468122917817325226061122673673544524792122777925704237075cREVGeometrycacheordertotal21JjQeeeeee:Syntax P   cSSSHeaderuHilitedLines cREVGeneralscripteditorvscroll0scripteditorselection0cREVGeometryCacheIDs122588850894420081226228315196134681225973144815635312258885863412009122893362155650807122951322819860559122777925704237075122673673544524792cREVGeometrycachetotal8orderFAQ P  ( cREVGeneralscripteditorvscroll0scripteditorselection0 cSSSHeaderuHilitedLinescREVGeometryCacheIDs122588850894420081226228315196134681225973144815635312258885863412009122893362155650807122951322819860559122777925704237075122673673544524792cREVGeometrycachetotal8orderVHistory @  cSSSHeaderuHilitedLinescREVGeometryCacheIDs122588850894420081226228315196134681225973144815635312258885863412009122893362155650807122951322819860559122777925704237075122673673544524792cREVGeometrycachetotal8order |ListMagic settings i 6G  cREVGeneral bookmarks revUniqueID 1225885462753 handlerList prevHandler tempScriptscript LinesNumheon mouseUp local tCurSort ----- put the cSSSHeader["uCurSort"] of fld "ALaiTunes" into tCurSort set the cSSSHeader["uNumLines"] of fld "ALaiTunes" to the hilite of me lock messages set the cSSSHeader["uCurSort"] of fld "ALaiTunes" to empty -- see setprop cSSSHeader[pProp] in field's script if tCurSort <> empty and item 1 of tCurSort <> 0 then LMSetSort item 1 of tCurSort,item 3 of tCurSort,the long ID of fld "ALaiTunes" end if end mouseUp Dt#Add a first column numbering linesLines numbering cREVGeneral scriptChecksum rJ^M handlerListmouseUpscriptSelectionchar 140 to 139scripteditorvscroll0 bookmarks revUniqueID 1225820820934scripteditorselection369 prevHandlermouseUp tempScriptscript/

on mouseUp

set the cSSSHeader["uNumLines"] of this cd to the hilite of me

-- see setprop cSSSHeader[pProp] in card's script

end mouseUp

Fonts uon menuPick pFont set the cSSSHeader["uFont"] of fld "ALaiTunes" to pFont -- see setprop cSSSHeader[pProp] in field's script if the cSSSHeader["uDefaultTabStop"] of fld "ALaiTunes" = "Auto" then LMAdjustColumn -- lib end menuPick B Font name?Lucida Grande #PC #üü #A #ʱü ACaslon AltBold ACaslon AltBoldItalic ACaslon AltItalic ACaslon AltRegular ACaslon AltSemibold ACaslon AltSemiboldItalic ACaslon Bold ACaslon BoldItalic ACaslon BoldItalicOsF ACaslon BoldOsF ACaslon Italic ACaslon ItalicOsF ACaslon Ornaments ACaslon Regular ACaslon RegularSC ACaslon Semibold ACaslon SemiboldItalic ACaslon SemiboldItalicOsF ACaslon SemiboldSC ACaslon SwashBoldItalic ACaslon SwashItalic ACaslon SwashSemiboldItalic ACaslonExp Bold ACaslonExp BoldItalic ACaslonExp Italic ACaslonExp Regular ACaslonExp Semibold ACaslonExp SemiboldItalic AGaramond AGaramond Bold AGaramond BoldItalic AGaramond Italic AGaramond Semibold AGaramond SemiboldItalic American Typewriter American Typewriter Condensed American Typewriter Condensed Light American Typewriter Light Andale Mono Apple Chancery Apple LiGothic Medium Apple LiSung Light AppleGothic AppleMyungjo Arial Arial Black Arial Narrow Arial Rounded MT Bold Ayuthaya B Optima Bold baby Baskerville Baskerville Semibold BI Optima BoldOblique BiauKai Big Caslon BlairMdITC TT-Medium Brush Script MT Capitals Century Gothic Chalkboard Chalkboard Bold Charcoal Charcoal CY Chicago Cochin Comic Sans MS Copperplate Copperplate Gothic Bold Copperplate Gothic Light Copperplate Light Courier Courier CE Courier New Cracked Curlz MT Didot dyrk Edwardian Script ITC erkend Euphemia UCAS Euphemia UCAS Bold Euphemia UCAS Italic Futura Futura Condensed Gadget Garamond GB18030 Bitmap Geeza Pro Geeza Pro Bold Geneva Geneva CE Geneva CY Georgia Gill Sans Gill Sans Light Handwriting - Dakota Hei Helvetica Helvetica CE Helvetica CY Helvetica Neue Helvetica Neue Black Condensed Helvetica Neue Bold Condensed Helvetica Neue Light Helvetica Neue UltraLight Herculanum Hoefler Text Hoefler Text Ornaments hushold I Garamond LightItalic I Optima Oblique Impact InaiMathi info Kai Krop Krungthep Lucida Grande Lucida Grande CE Lucida Grande CY Lucida Handwriting mad Marker Felt Monaco Monaco CE Monaco CY Monotype Sorts New York Novarese Bold Novarese BoldItalic Novarese Book Novarese BookItalic Novarese Medium Novarese MediumItalic Novarese Ultra Optima Optima ExtraBlack Osaka Osaka| Palatino Papyrus Plantagenet Cherokee PortagoITC TT rg samvr Sand Sathu Silom Skia sport Symbol Tahoma Techno TektoMM_100 LT 250 CN TektoMM_100 LT 564 NO TektoMM_100 LT 850 EX TektoMM_240 RG 250 CN TektoMM_240 RG 564 NO TektoMM_240 RG 850 EX TektoMM_503 BD 250 CN TektoMM_503 BD 488 NO TektoMM_503 BD 850 EX TektoMMObl_100 LT 250 CN TektoMMObl_100 LT 564 NO TektoMMObl_100 LT 850 EX TektoMMObl_240 RG 250 CN TektoMMObl_240 RG 564 NO TektoMMObl_240 RG 850 EX TektoMMObl_503 BD 250 CN TektoMMObl_503 BD 488 NO TektoMMObl_503 BD 850 EX Textile Thonburi Tilstand Times Times CE Times CY Times New Roman Trebuchet MS ude Verdana VT100 Webdings Wingdings Zapf Dingbats Zapfino qMmpS Pro W3 qMmpS Pro W6 qMmpS Std W8 qMmۃS Pro W4 qMm Pro W3 qMm Pro W6 ķ ĺ Ŀ ϸ ק Pro ׶ Pro{ cREVGeneral scriptChecksumEy}N(U҈T handlerListmenuPickscriptSelection char 19 to 18scripteditorvscroll0 bookmarks revUniqueID 1225883327554scripteditorselection76 prevHandlermenuPick tempScriptscript

on menuPick pFont

set the cSSSHeader["uFont"] of this cd to pFont

-- see setprop cSSSHeader[pProp] in card's script

end menuPick

Size uon menuPick pSize set the cSSSHeader["uFontSize"] of fld "ALaiTunes" to pSize -- see setprop cSSSHeader[pProp] in field's script if the cSSSHeader["uDefaultTabStop"] of fld "ALaiTunes" = "Auto" then LMAdjustColumn -- lib end menuPick B*F Font size;1111 12 13 14 16 cREVGeneral scriptChecksum-C handlerListmenuPickscriptSelectionchar 125 to 124 bookmarks revUniqueID 1225883658547scripteditorvscroll0scripteditorselection230 prevHandlermenuPick tempScriptscript

on menuPick pSize

set the cSSSHeader["uFontSize"] of this cd to pSize

-- see setprop cSSSHeader[pProp] in card's script

end menuPick

 Label Field on mouseEnter set the tooltip of me to "Stripes color:" && the backColor of fld "Stripes" & cr & "Click on the square to change it" end mouseEnter ^MdFor demonstration only, the number of columns is limited to nine.

ListMagic wizard allows to specify any number of columns." into tPrompt answer info tPrompt as sheet send "resumeStack" to this cd lock screen set the menuHistory of me to sCurMenuHistory unlock screen else SetColumns tNumOfColumns -- end if unlock screen end menuPick --------------------------------------- private command SetColumns pColumns local tWidget,tHilitedLines,tRefList,tData ----- put the long ID of fld "ALaiTunes" into tWidget put the hilitedLines of tWidget into tHilitedLines lock messages set the cSSSHeader["uHeaderColumsNum"] of tWidget to pColumns -- see setprop cSSSHeader[pProp] in field's script if the cSSSHeader["uHeaderColumsNum"] of tWidget = "Auto" then if the platform = "MacOS" then put isoToMac(the uRefList of this cd) into tRefList else put the uRefList of this cd into tRefList set the itemDel to tab if pColumns = "Auto" then put the number of items of line 1 of tRefList into pColumns repeat for each line tLine in tRefList put item 1 to pColumns of tLine & cr after tData end repeat delete last char of tData else if the platform = "MacOS" then put isoToMac(the uRefList of this cd) into tData else put the uRefList of this cd into tData end if ----- lock screen set the hScroll of tWidget to 0 set the hScroll of grp "ALaiTunes" to 0 LMPopulate tData,tWidget -- lib LMSetHilitedLines tHilitedLines -- lib unlock screen end SetColumns B^Number of columns: 'Auto' fits data list according to the number of items per line Specifying a number limits data seen by the user to this number Horizontal scroll bar is only shown when 'Auto' is chosen 5 columnsgAuto 1 column 2 columns 3 columns 4 columns 5 columns 6 columns 7 columns 8 columns 9 columns Other...  cREVGeneral scriptChecksum| 0MH breakPoints handlerListmenuPickscriptSelection char 89 to 88scripteditorvscroll43 bookmarks revUniqueID 1225960768142scripteditorselection905 prevHandlermenuPick tempScriptscript0

on menuPick pItem

set the cSSSHeader["uHeaderColumsNum"] of this cd to word 1 of pItem

-- see setprop cSSSHeader[pProp] in card's script

end menuPick

 Label Field on mouseEnter set the tooltip of me to "Highlight color:" && the hiliteColor of fld "ALaiTunes" & cr & "Click on the square to change it" end mouseEnter ^fd=Highlight color: 62,127,227 Click on the square to change it cREVTable currentviewHighlight color: cREVGeneralscripteditorvscroll0 revUniqueID 1225988375650scripteditorselection0 Highlight color:  Label Field on mouseEnter set the tooltip of me to "Highlighted text color:" && the backColor of fld "HighlightText" & cr & "Click on the square to change it" end mouseEnter BEHighlighted text color: 255,255,255 Click on the square to change it cREVTable currentviewHighlighted text color: cREVGeneralscripteditorvscroll0 revUniqueID 1225989160435scripteditorselection148 Highlighted text color: Stripes pon mouseUp answer color with the backColor of me if it = empty then exit mouseUp set the backColor of me to it mouseEnter -- set the cSSSHeader["uStripsColor"] of fld "ALaiTunes" to it -- see setprop cSSSHeader[pProp] in field's script end mouseUp ---------------------------------- on mouseEnter set the tooltip of me to "Stripes color:" && the backColor of me & cr & "Click here to change it" end mouseEnter @L3Stripes color: 241,245,250 Click here to change it cREVGeneral scriptChecksumٶͻlH2?j handlerListscriptSelectionchar 240 to 239 bookmarks revUniqueID 1225886267581scripteditorvscroll0scripteditorselection424 prevHandlermouseUp tempScriptscript

on mouseUp

answer color with the backColor of me

if it = empty then exit mouseUp

set the backColor of me to it

mouseEnter --

set the cSSSHeader["uStripsColor"] of this cd to it

-- see setprop cSSSHeader[pProp] in card's script

end mouseUp

----------------------------------

on mouseEnter

set the tooltip of me to "Stripes color:" && the backColor of me

end mouseEnter

  HighLight pon mouseUp answer color with the hiliteColor of fld (the cSSSHeader["uWidgetName"] of fld "ALaiTunes") if it = empty then exit mouseUp set the backColor of me to it mouseEnter -- set the cSSSHeader["uHighlightColor"] of fld "ALaiTunes" to it -- see setprop cSSSHeader[pProp] in field's script end mouseUp ---------------------------------- on mouseEnter set the tooltip of me to "Highlight color:" && the hiliteColor of fld "ALaiTunes" & cr & "Click here to change it" end mouseEnter >>@f5Highlight color: 192,192,192 Click here to change it cREVGeneral scriptChecksum[^!P>~w'z handlerListmouseUp mouseEnterscriptSelectionchar 258 to 257scripteditorvscroll0 revUniqueID 1225988367309 bookmarksscripteditorselection20 tempScript prevHandlermouseUpscript *

on mouseUp

answer color with the hiliteColor of fld "ListField"

if it = empty then exit mouseUp

set the backColor of me to it

mouseEnter --

set the cSSSHeader["uHighlightColor"] of this cd to it

-- see setprop cSSSHeader[pProp] in card's script

end mouseUp

----------------------------------

on mouseEnter

set the tooltip of me to "Highlight color:" && the hiliteColor of fld "ListField"

end mouseEnter

 HighLightText pon mouseUp answer color with the backColor of me if it = empty then exit mouseUp set the backColor of me to it mouseEnter -- set the cSSSHeader["uHighlightedTextColor"] of fld "ALaiTunes" to it -- see setprop cSSSHeader[pProp] in field's script end mouseUp ---------------------------------- on mouseEnter set the tooltip of me to "Highlighted text color:" && the backColor of me & cr & "Click here to change it" end mouseEnter @on mouseUp

answer color with the backColor of me

if it = empty then exit mouseUp

set the backColor of me to it

mouseEnter --

set the cSSSHeader["uHighlightedTextColor"] of this cd to it

-- see setprop cSSSHeader[pProp] in card's script

end mouseUp

----------------------------------

on mouseEnter

set the tooltip of me to "Highlighted text color:" && the backColor of me

end mouseEnter

 * Selection ujon menuPick set the cSSSHeader["uSelectType"] of fld "ALaiTunes" to the menuHistory of me end menuPick BSelection modeqSelect non contiguous linesGSelect one line only Select multiple lines Select non contiguous lines cREVGeneral scriptChecksum("> k'#^vW handlerListmenuPickscriptSelection char 12 to 11 revUniqueID 1226052866736 bookmarksscripteditorvscroll0scripteditorselection50 tempScript prevHandlermenuPickscript

on menuPick

set the cSSSHeader["uSelectType"] of this cd to the menuHistory of me

end menuPick

/2Boxheon mouseUp local tCurSort ----- set the cSSSHeader["uCheckBox"] of fld "ALaiTunes" to the hilite of me -- see setprop cSSSHeader[pProp] in field's script put the cSSSHeader["uCurSort"] of fld "ALaiTunes" into tCurSort if tCurSort <> empty and item 1 of tCurSort <> 0 then LMSetSort item 1 of tCurSort,item 3 of tCurSort,the long ID of fld "ALaiTunes" end if end mouseUp D4Add a check boxes row in front of first data columnCheck boxes column cREVGeneral scriptChecksum|wi handlerListmouseUpscriptSelection char 34 to 51scripteditorvscroll0 revUniqueID 1226066164278 bookmarksscripteditorselection396 tempScript prevHandlermouseUpscript

on mouseUp

set the cSSSHeader["uSelectAllCheckBox"] of this cd to the hilite of me

-- see setprop cSSSHeader[pProp] in card's script

end mouseUp

7m TabStops u~local sCurMenuHistory --------------------------------------- on mouseDown put the menuHistory of me into sCurMenuHistory end mouseDown --------------------------------------- on menuPick pItem local tTabStops,tPrompt,tCurSort ----- lock screen put word 1 of pItem into tTabStops if tTabStops = "Other..." then if IsMC() then put "For demonstration only, columns width is limited to five choices." & cr & cr & "ListMagic wizard allows to specify any width." into tPrompt else put "

For demonstration only, columns width is limited to five choices.

ListMagic wizard allows to specify any width." into tPrompt answer info tPrompt as sheet send "resumeStack" to this cd lock screen set the menuHistory of me to sCurMenuHistory unlock screen else set the cSSSHeader["uDefaultTabStop"] of fld "ALaiTunes" to word 1 of pItem -- see setprop cSSSHeader[pProp] in field's script if the cSSSHeader["uHeaderColumsNum"] of fld "ALaiTunes" = "Auto" then set the hScrollBar of fld "ALaiTunes" to the formattedWidth of fld "ALaiTunes" > the width of fld "ALaiTunes" end if put the cSSSHeader["uCurSort"] of fld "ALaiTunes" into tCurSort if tCurSort <> empty then LMSetSort item 1 of tCurSort,item 3 of tCurSort,the long ID of fld "ALaiTunes" end if unlock screen end menuPick ByZColumns width: Auto fits data width A number forces columns width to this value in pixels*Auto9Auto 50 pixels 100 pixels 150 pixels 200 pixels Other... cREVGeneral scriptChecksum| 0MH handlerListmenuPick breakPointsscriptSelection char 89 to 88scripteditorvscroll0 revUniqueID 1226307946522 bookmarksscripteditorselection677 tempScript prevHandlermenuPickscript0

on menuPick pItem

set the cSSSHeader["uHeaderColumsNum"] of this cd to word 1 of pItem

-- see setprop cSSSHeader[pProp] in card's script

end menuPick

JDandDheon mouseUp set the cSSSHeader["uColumnsDandD"] of fld "ALaiTunes" to the hilite of me -- see setprop cSSSHeader[pProp] in field's script end mouseUp D7Allow columns order reorganization using drag and dropColumns drag & drop cREVGeneral scriptChecksum|wi handlerListmouseUpscriptSelection char 34 to 51 bookmarks revUniqueID 1226566763745scripteditorvscroll0scripteditorselection46 prevHandlermouseUp tempScriptscript

on mouseUp

set the cSSSHeader["uSelectAllCheckBox"] of this cd to the hilite of me

-- see setprop cSSSHeader[pProp] in card's script

end mouseUp

tz TextHeight uon menuPick pItem set the cSSSHeader["uTextHeight"] of fld "ALaiTunes" to the menuHistory of me -- see setprop cSSSHeader[pProp] in field's script if the cSSSHeader["uDefaultTabStop"] of fld "ALaiTunes" = "Auto" then LMAdjustColumn end menuPick *F Line space-16Auto 16 cREVGeneral scriptChecksum-C handlerListmenuPickscriptSelectionchar 125 to 124scripteditorvscroll0 revUniqueID 1227258484868 bookmarksscripteditorselection237 tempScript prevHandlermenuPickscript

on menuPick pSize

set the cSSSHeader["uFontSize"] of this cd to pSize

-- see setprop cSSSHeader[pProp] in card's script

end menuPick

~Resize uoon menuPick set the cSSSHeader["uResizeType"] of fld "ALaiTunes" to the menuHistory of me - 1 end menuPick BResizing modeResize both directionsJDon't resize Resize vertically Resize horizontally Resize both directions cREVGeneral scriptChecksum("> k'#^vW handlerListmenuPickscriptSelection char 12 to 11scripteditorvscroll0 bookmarks revUniqueID 1227461701508scripteditorselection66 prevHandlermenuPick tempScriptscript

on menuPick

set the cSSSHeader["uSelectType"] of this cd to the menuHistory of me

end menuPick

Editheon mouseUp set the cSSSHeader["uEdition"] of fld "ALaiTunes" to the hilite of me -- see setprop cSSSHeader[pProp] in field's script end mouseUp DAllow list editing into a superimposed entry box using a second mouseDown on any item Allow to add or delete lines: see list pop up menuyEditing cREVGeneral scriptChecksum|wi handlerListmouseUpscriptSelection char 34 to 51scripteditorvscroll0 revUniqueID 1228991829275 bookmarksscripteditorselection148 tempScript prevHandlermouseUpscript

on mouseUp

set the cSSSHeader["uSelectAllCheckBox"] of this cd to the hilite of me

-- see setprop cSSSHeader[pProp] in card's script

end mouseUp

Filterhe on mouseUp set the cSSSHeader["uFiltering"] of fld "ALaiTunes" to the hilite of me -- see setprop cSSSHeader[pProp] in field's script if not the hilite of me and there is a grp "LMFilterALaiTunes" then LMShowFilters the long ID of fld "ALaiTunes" end mouseUp D;Allow list filtering by any column: see header pop up menuk Filtering cREVGeneral scriptChecksum|wi handlerListmouseUpscriptSelection char 34 to 51 bookmarks revUniqueID 1229076165859scripteditorvscroll0scripteditorselection204 prevHandlermouseUp tempScriptscript

on mouseUp

set the cSSSHeader["uSelectAllCheckBox"] of this cd to the hilite of me

-- see setprop cSSSHeader[pProp] in card's script

end mouseUp

LMGenericHeaderi&w/* ListMagic 1.1 by Eric Chatonet http://www.sosmartsoftware.com/ */ local sPopUpInUse,sSourceHeaderTab,sHilitedLines,sDragData,sDrag,sMoveColumnFlag,sMouseH -- script local variables ----------------------------------------------- on mouseDown pButton global gLMLanguage local tNumOfColumns,tHeaderNum,tMenu,tWidget ----- LMHideEntryBox -- lib put pButton = 3 into sPopUpInUse -- a flag if sPopUpInUse then lock messages set the cSSSHeader["uCurHeader"] of fld (the short name of me) to char 7 to -1 of the short name of the target -- header number unlock messages put LMRealColumnsNum(the long ID of fld (the short name of me)) into tNumOfColumns -- lib if the cSSSHeader["uNumLines"] of fld (the short name of me) then add 1 to tNumOfColumns -- builds popUp menu if gLMLanguage = empty then put GetUserLang() into gLMLanguage -- lib put line 1 to 2 of the cSSSMenus[gLMLanguage] of me into tMenu if the uAdjust of btn ("Header" & the cSSSHeader["uCurHeader"] of fld (the short name of me)) of me then put "(" before line 1 of tMenu if AllColumnsAdjusted() then put "(" before line 2 of tMenu -- if the cSSSHeader["uCheckBox"] of fld (the short name of me) then put the long ID of fld (the short name of me) into tWidget if (the cSSSHeader["uCurHeader"] of fld (the short name of me) = 1 and not the cSSSHeader["uNumLines"] of fld (the short name of me)) or (the cSSSHeader["uCurHeader"] of fld (the short name of me) = 2 and the cSSSHeader["uNumLines"] of fld (the short name of me)) then put cr & line 3 to 6 of the cSSSMenus[gLMLanguage] of me after tMenu if not (quote & the ID of img "CaseChecked" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) & quote is in the htmlText of tWidget) then put "(" before line -2 of tMenu else if not (quote & the ID of img "Case" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) & quote is in the htmlText of tWidget) then put "(" before line -3 of tMenu if not (quote & the ID of img "Case" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) & quote is in the htmlText of tWidget and quote & the ID of img "CaseChecked" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) & quote is in the htmlText of tWidget) then put "(" before line -1 of tMenu end if end if end if if the cSSSHeader["uFiltering"] of fld (the short name of me) then put cr & line 7 to 8 of the cSSSMenus[gLMLanguage] of me after tMenu if the textColor of char 1 of fld (the short name of me) = "160,0,0" then put "!c" before last line of tMenu else if the number of lines of the text of fld (the short name of me) < 2 then put "(" before line -1 of tMenu else if there is a fld ("Filter" & the short name of me & 1) then put "!c" before last line of tMenu end if end if if the platform <> "MacOS" then put MacToIso(tMenu) into tMenu put tMenu into btn "LMPopUp" set the uCurCall of btn "LMPopUp" to "Header" set the uCurWidget of btn "LMPopUp" to the long ID of fld (the short name of me) popup btn "LMPopUp" else put char 7 to -1 of the short name of the target into tHeaderNum if the cursor = 81 then ResizeHeaders tHeaderNum -- resizes columns else -- set patterns and icons according to possible states ----- if the number of lines of the text of fld (the short name of me) < 2 then exit mouseDown lock screen if the backPattern of btn ("Header" & tHeaderNum) of me = the ID of img "Header" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) then set the backPattern of btn ("Header" & tHeaderNum) of me to the ID of img "Header+" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) set the icon of btn ("HArrow" & tHeaderNum) of me to the ID of img "Arrow+" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) else set the backPattern of btn ("Header" & tHeaderNum) of me to the ID of img "HeaderHilited+" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) if the icon of btn ("HArrow" & tHeaderNum) of me = the ID of img "Arrow Down" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) then set the icon of btn ("HArrow" & tHeaderNum) of me to the ID of img "Arrow Down+" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) else set the icon of btn ("HArrow" & tHeaderNum) of me to the ID of img "Arrow Up+" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) end if end if unlock screen end if end if end mouseDown ----------------------------------------------- on mouseEnter global gLMLanguage local tTooltip ----- if gLMLanguage = empty then put GetUserLang() into gLMLanguage -- lib put the cSSSTooltips[gLMLanguage] of me into tTooltip if the platform <> "MacOS" then put MacToIso(tTooltip) into tTooltip set the tooltip of the target to tTooltip end mouseEnter ----------------------------------------------- on mouseLeave if the mouse is up then unlock cursor -- when cursor 81 has been used end mouseLeave ----------------------------------------------- on mouseRelease -- restores previous state local tHeaderNum ----- if the cursor <> 81 and not sDrag and not sMoveColumnFlag and the number of lines of fld (the short name of me) > 1 then put char 7 to -1 of the short name of the target into tHeaderNum ----- lock screen if the backPattern of btn ("Header" & tHeaderNum) = the ID of img "Header+" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) then set the backPattern of btn ("Header" & tHeaderNum) to the ID of img "Header" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) set the icon of btn ("HArrow" & tHeaderNum) to the ID of img "Arrow" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) else set the backPattern of btn ("Header" & tHeaderNum) to the ID of img "HeaderHilited" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) if the icon of btn ("HArrow" & tHeaderNum) = the ID of img "Arrow Down+" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) then set the icon of btn ("HArrow" & tHeaderNum) to the ID of img "Arrow Down" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) else set the icon of btn ("HArrow" & tHeaderNum) to the ID of img "Arrow Up" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) end if end if put false into sMoveColumnFlag unlock screen unlock cursor end if end mouseRelease ----------------------------------------------- on mouseUp local tHeaderNum,tColumNo ----- if sPopUpInUse then exit mouseUp ----- if sMoveColumnFlag then put false into sMoveColumnFlag exit mouseUp end if ----- if the number of lines of the text of fld (the short name of me) < 2 then exit mouseUp if the cursor <> 81 then -- not resizing a column put char 7 to -1 of the short name of the target into tHeaderNum ----- lock screen repeat with i = 1 to (the number of btns of me / 2) if i = tHeaderNum then next repeat set the backPattern of btn ("Header" & i) of me to the ID of img "Header" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) set the icon of btn ("HArrow" & i) of me to the ID of img "Arrow" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) end repeat set the backPattern of btn ("Header" & tHeaderNum) of me to the ID of img "HeaderHilited" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) ----- if the cSSSHeader["uNumLines"] of fld (the short name of me) then put tHeaderNum - 1 into tColumNo else put tHeaderNum into tColumNo if the number of lines of the text of fld (the short name of me) > 1 then if the icon of btn ("HArrow" & tHeaderNum) of me = the ID of img "Arrow Up+" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) then set the icon of btn ("HArrow" & tHeaderNum) of me to the ID of img "Arrow Down" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) SortColumn the long ID of fld (the short name of me),tHeaderNum,"Up" -- lib lock messages set the cSSSHeader["uCurSort"] of fld (the short name of me) to tColumNo,the label of btn ("Header" & tHeaderNum) of me,"descending" if "#A00000" is not in the htmlText of fld (the short name of me) then set the CSSSHeader["uCurList"] of fld (the short name of me) to LMExtractList(true,the long ID of fld (the short name of me)) end if try -- in the case this message is not handled higher in the message hierarchy LMSort the long ID of me,tHeaderNum,"descending" -- sent to the card catch tErr end try else set the icon of btn ("HArrow" & tHeaderNum) of me to the ID of img "Arrow Up" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) SortColumn the long ID of fld (the short name of me),tHeaderNum,"Down" -- lib lock messages set the cSSSHeader["uCurSort"] of fld (the short name of me) to tColumNo,the label of btn ("Header" & tHeaderNum) of me,"ascending" if "#A00000" is not in the htmlText of fld (the short name of me) then set the CSSSHeader["uCurList"] of fld (the short name of me) to LMExtractList(true,the long ID of fld (the short name of me)) end if try -- in the case this message is not handled higher in the message hierarchy LMSort the long ID of me,tHeaderNum,"ascending" -- sent to the card catch tErr end try end if unlock screen else if the icon of btn ("HArrow" & tHeaderNum) of me = the ID of img "Arrow Up+" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) then set the icon of btn ("HArrow" & tHeaderNum) of me to the ID of img "Arrow Up" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) else set the icon of btn ("HArrow" & tHeaderNum) of me to the ID of img "Arrow Down" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) end if end if end if unlock cursor end mouseUp ----------------------------------------------- on dragStart -- Rev 2.9 drag and drop local tTarget,tWidget,tBottomRight,tRect,tID ----- if not the cSSSHeader["uColumnsDandD"] of fld (the short name of me) or the cursor = 81 then exit dragStart -- no D&D allowed in theses cases ----- LMHideEntryBox -- lib put char 7 to -1 of the short name of the target into sSourceHeaderTab if (the cSSSHeader["uNumLines"] of fld (the short name of me) and the cSSSHeader["uCheckbox"] of fld (the short name of me) and sSourceHeaderTab is among the items of "1,2") \ or ((the cSSSHeader["uNumLines"] of fld (the short name of me) or the cSSSHeader["uCheckbox"] of fld (the short name of me)) and sSourceHeaderTab = 1) then exit dragStart -- we don't want first column and mini check boxes column moved ----- put true into sDrag if "HArrow" is in the short name of the target then put the long ID of btn ("Header" & char 7 to -1 of the short name of the target) of me into tTarget else put the long ID of the target into tTarget ----- put "SSS" & random(100) into sDragData -- this will allow to limit D&D to current widget even if there are more than one widget in the card -- and to refuse any D&D coming from another app set the dragData["text"] to sDragData put the long ID of fld (the short name of me) into tWidget put the hilitedLines of tWidget into sHilitedLines ----- if the vScrollBar of tWidget then put min(the right of tTarget,the right of tWidget - (the scrollbarWidth of tWidget + 1)),the bottom of tWidget into tBottomRight else put min(the right of tTarget,the right of tWidget),the bottom of tWidget into tBottomRight put globalLoc(the topleft of tTarget),globalLoc(tBottomRight) into tRect if the hScrollbar of tWidget then subtract the scrollbarWidth of tWidget from item 4 of tRect ----- create invisible image -- creates drag image do "export snapshot from rect tRect to" && it && "as PNG" set the dragImageOffset to 50,the height of tTarget div 2 set the dragImage to the ID of it ----- set the opaque of the templateGraphic to true set the lineSize of the templateGraphic to 0 set the blendlevel of the templateGraphic to 30 set the backColor of the templateGraphic to "136,136,136" put the topleft of tTarget,tBottomRight into tRect if the hScrollbar of tWidget then subtract the scrollbarWidth of tWidget from item 4 of tRect set the rect of the templateGraphic to tRect set the rect of it to tRect create grc -- creates a graphic overlapping dragged column reset the templateGraphic end dragStart ----------------------------------------------- on dragMove local tCurTab,tNum ----- if the cSSSHeader["uColumnsDandD"] of fld (the short name of me) and the dragData["text"] = sDragData then if the mouseControl <> empty then put char 7 to -1 of the short name of the mouseControl into tCurTab if the cSSSHeader["uNumLines"] of fld (the short name of me) and the cSSSHeader["uCheckbox"] of fld (the short name of me) then put 2 into tNum else if (the cSSSHeader["uNumLines"] of fld (the short name of me) or the cSSSHeader["uCheckbox"] of fld (the short name of me)) then put 1 into tNum else put 0 into tNum if tCurTab <= tNum then set the dragAction to "None" else set the dragAction to "Move" else set the dragAction to "Move" else set the dragAction to "None" end dragMove ----------------------------------------------- on dragEnd -- cleanup local tSourceHeaderTab ----- lock screen choose browse tool -- MC put sSourceHeaderTab into tSourceHeaderTab if the backPattern of btn ("Header" & tSourceHeaderTab) of grp (the short name of me) = the ID of img "Header+" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) then set the backPattern of btn ("Header" & tSourceHeaderTab) of grp (the short name of me) to the ID of img "Header" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) set the icon of btn ("Harrow" & tSourceHeaderTab) to the ID of img "Arrow" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) else if the backPattern of btn ("Header" & tSourceHeaderTab) of grp (the short name of me) = the ID of img "HeaderHilited+" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) then set the backPattern of btn ("Header" & tSourceHeaderTab) of grp (the short name of me) to the ID of img "HeaderHilited" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) if item 3 of the cSSSHeader["uCursort"] of fld (the short name of me) = "ascending" then set the icon of btn ("Harrow" & tSourceHeaderTab) to the ID of img "Arrow Up" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) else set the icon of btn ("Harrow" & tSourceHeaderTab) to the ID of img "Arrow Down" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) end if end if if not the cSSSHeader["uColumnsDandD"] of fld (the short name of me) or the dragData["text"] <> sDragData then exit dragEnd delete last image delete last grc unlock screen DragCleanUp -- end dragEnd ----------------------------------------------- on dragDrop local tDestHeaderTab,tLineNo,tInput,tLine,tItemNo,tOutput,tSourceButtonNo,tDestButtonNo local tLabel,tWidget,tHeader1,tHeader2,tPattern,tRect,tText,tData,tColumn1,tColumn2,tCurSel local tHeaders,tLinesToSkip ----- put sSourceHeaderTab if not the cSSSHeader["uColumnsDandD"] of fld (the short name of me) or the dragData["text"] <> sDragData then exit dragDrop ----- repeat with i = 1 to the number of btns of me div 2 if the mouseH > the left of btn ("Header" & i) and the mouseH < the right of btn ("Header" & i) then exit repeat end repeat put i into tDestHeaderTab put sSourceHeaderTab,tDestHeaderTab if (the cSSSHeader["uNumLines"] of fld (the short name of me) or the cSSSHeader["uCheckbox"] of fld (the short name of me)) and tDestHeaderTab = 1 then exit dragDrop if sSourceHeaderTab = tDestHeaderTab then exit dragDrop ----- set the itemDel to tab put LMExtractList("all",the long ID of fld (the short name of me)) into tInput -- lib delete line 1 of tInput -- headers ----- if the cSSSHeader["uNumLines"] of fld (the short name of me) then subtract 1 from sSourceHeaderTab subtract 1 from tDestHeaderTab end if put 1 into tLineNo repeat for each line tLine in tInput put 1 into tItemNo repeat for each item tItem in tLine if tItemNo = sSourceHeaderTab then put tItem into item tDestHeaderTab of line tLineNo of tOutput else if tItemNo = tDestHeaderTab then put tItem into item sSourceHeaderTab of line tLineNo of tOutput else put tItem into item tItemNo of line tLineNo of tOutput add 1 to tItemNo end repeat put cr after tOutput add 1 to tLineNo end repeat delete last char of tOutput ----- lock screen -- refreshes displayed list LMPopulate cr & tOutput,the long ID of fld (the short name of me),true,true -- lib put sSourceHeaderTab into tSourceButtonNo put tSourceButtonNo into tHeader1 put tDestHeaderTab into tDestButtonNo put tDestHeaderTab into tHeader2 if the cSSSHeader["uNumLines"] of fld (the short name of me) then add 1 to tSourceButtonNo add 1 to tDestButtonNo end if -- refreshes headers labels put the label of btn ("Header" & tSourceButtonNo) of me into tLabel set the label of btn ("Header" & tSourceButtonNo) of me to the label of btn ("Header" & tDestButtonNo) of me set the label of btn ("Header" & tDestButtonNo) of me to tLabel ----- put the backPattern of btn ("Header" & tSourceButtonNo) of me into tPattern[1] put the icon of btn ("HArrow" & tSourceButtonNo) of me into tPattern[2] put the backPattern of btn ("Header" & tDestButtonNo) of me into tPattern[3] put the icon of btn ("HArrow" & tDestButtonNo) of me into tPattern[4] repeat with i = 1 to 4 if tPattern[i] = the ID of img "Header+" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) then put the ID of img "Header" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) into tPattern[i] else if tPattern[i] = the ID of img "HeaderHilited+" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) then put the ID of img "HeaderHilited" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) into tPattern[i] else if tPattern[i] = the ID of img "Arrow+" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) then put the ID of img "Arrow" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) into tPattern[i] else if tPattern[i] = the ID of img "Arrow Down+" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) then put the ID of img "Arrow Down" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) into tPattern[i] else if tPattern[i] = the ID of img "Arrow Up+" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) then put the ID of img "Arrow Up" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) into tPattern[i] end repeat set the backPattern of btn ("Header" & tDestButtonNo) of me to tPattern[1] set the icon of btn ("HArrow" & tDestButtonNo) of me to tPattern[2] set the backPattern of btn ("Header" & tSourceButtonNo) of me to tPattern[3] set the icon of btn ("HArrow" & tSourceButtonNo) of me to tPattern[4] ----- if there is a grp ("LMFilter" & the short name of me) then if the selectedField <> empty then if (tSourceButtonNo is in the short name of the selectedField) then put the long ID of fld ("Filter" & the short name of me & tDestButtonNo) of grp ("LMFilter" & the short name of me) into tCurSel else if (tDestButtonNo is in the short name of the selectedField) then put the long ID of fld ("Filter" & the short name of me & tSourceButtonNo) of grp ("LMFilter" & the short name of me) into tCurSel else put empty into tCursel end if end if put the rect of fld ("Filter" & the short name of me & tSourceButtonNo) of grp ("LMFilter" & the short name of me) into tRect set the rect of fld ("Filter" & the short name of me & tSourceButtonNo) of grp ("LMFilter" & the short name of me) to the rect of fld ("Filter" & the short name of me & tDestButtonNo) of grp ("LMFilter" & the short name of me) set the rect of fld ("Filter" & the short name of me & tDestButtonNo) of grp ("LMFilter" & the short name of me) to tRect ----- put the text of fld ("Filter" & the short name of me & tSourceButtonNo) of grp ("LMFilter" & the short name of me) into tText set the text of fld ("Filter" & the short name of me & tSourceButtonNo) of grp ("LMFilter" & the short name of me) to the text of fld ("Filter" & the short name of me & tDestButtonNo) of grp ("LMFilter" & the short name of me) set the text of fld ("Filter" & the short name of me & tDestButtonNo) of grp ("LMFilter" & the short name of me) to tText if tCurSel <> empty then put word 1 to 5 of the selectedChunk && tCurSel into tCurSel do "select" && tCurSel end if end if lock messages set the cSSSHeader["uCurHeaderLabels"] of fld (the short name of me) to GetCurLabels() -- if there is a grp ("LMFilter" & the short name of me) then put the CSSSHeader["uCurList"] of fld (the short name of me) into tData set the itemdel to tab repeat for each line tLine in tData put item tHeader1 of tLine & cr after tColumn1 put item tHeader2 of tLine & cr after tColumn2 end repeat repeat with i = 1 to the number of lines of tData put line i of tColumn1 into item tHeader2 of line i of tData put line i of tColumn2 into item tHeader1 of line i of tData end repeat set the CSSSHeader["uCurList"] of fld (the short name of me) to tData else set the CSSSHeader["uCurList"] of fld (the short name of me) to LMExtractList(true,the long ID of fld (the short name of me)) -- lib unlock messages put the long ID of fld (the short name of me) into tWidget if the cSSSHeader["uDefaultTabStop"] of fld (the short name of me) = "Auto" then LMAdjustColumn ,,tWidget -- lib ----- SetItalics the long ID of fld (the short name of me) -- lib ----- set the hilitedLInes of tWidget to sHilitedLines send "scrollBarDrag" to fld (the short name of me) -- LMSetHilitedLinesColor tWidget -- lib unlock screen ----- try -- in the case this message is not handled higher in the message hierarchy LMColumnsReorganized the long ID of me,tHeader1,tHeader2 -- sent to current card catch tErr end try end dragDrop --------------------------------------------- on DragCleanUp put false into sDrag end DragCleanUp --------------------------------------------- on deleteGroup -- when deleting the widget local tCurWidgets,tSets ----- lock messages delete fld (the short name of me) -- list field put the CSSSHeader["uLMWidgets"] of this card into tCurWidgets delete line lineOffset(the short name of me,tCurWidgets) of tCurWidgets if tCurWidgets = empty then if there is a grp "LMGenericHeader" then delete grp "LMGenericHeader" if there is a grp "LMGenericFilter" then delete grp "LMGenericFilter" if there is a btn "LMPopUp" then delete btn "LMPopUp" if there is a fld "LMBox" then delete fld "LMBox" put the customPropertySets of this cd into tSets delete line lineOffset("CSSSHeader",tSets) of tSets set the customPropertySets of this cd to tSets else set the CSSSHeader["uLMWidgets"] of this card to tCurWidgets end deleteGroup ----------------------------------------------- on mouseMove pX,pY -- sets cursor to allow columns resizing or not local tHeaderNum,tHeaderLeftRect,tHeaderRightRect ----- put char 7 to -1 of the short name of the target into tHeaderNum if tHeaderNum is not an integer or tHeaderNum < 1 then exit mouseMove ----- if "HArrow" is in the target and px > (the right of the target - 4) then if the right of the target = the right of fld (the short name of me) then exit mouseMove if the CSSSHeader["uNumLines"] of fld (the short name of me) and the short name of the target = "HArrow1" then exit mouseMove ----- if the mouse is down then put true into sMoveColumnFlag set the cursor to 81 lock cursor else unlock cursor end mouseMove ----------------------------------------------- command ResizeHeaders pHeaderNum -- resizes columns local tWidget,tMouseH,tHeaderLeftRect,tHeaderRightRect,tNumOfColumns,tLastVisibleTab constant kMinWidth = 40 ----- if the mouse is up then put false into sMoveColumnFlag try -- in the case this message is not handled higher in the message hierarchy if the cSSSHeader["uNumLines"] of fld (the short name of me) then subtract 1 from pHeaderNum LMColumnWidthChanged the long ID of me,pHeaderNum,the width of btn ("Header" & (pHeaderNum + 1)) -- sent to current card else LMColumnWidthChanged the long ID of me,pHeaderNum,the width of btn ("Header" & pHeaderNum) -- sent to current card end if catch tErr end try exit ResizeHeaders end if put the mouseH into tMouseH put the long ID of fld (the short name of me) into tWidget put the rect of btn ("Header" & pHeaderNum) of me into tHeaderLeftRect put the cSSSHeader["uHeaderColumsNum"] of tWidget into tNumOfColumns if tNumOfColumns = "Auto" then set the itemDel to tab put the number of items of line 1 of fld (the short name of me) into tNumOfColumns set the itemDel to comma else if the cSSSHeader["uNumLines"] of tWidget then add 1 to tNumOfColumns put LMLastVisibleTab(tWidget) into tLastVisibleTab -- lib if tMouseH - item 1 of tHeaderLeftRect < kMinWidth then put item 1 of tHeaderLeftRect + kMinWidth into tMouseH put tMouseH into item 3 of tHeaderLeftRect ----- lock screen set the uAdjust of btn ("Header" & pHeaderNum) of me to false set the rect of btn ("Header" & pHeaderNum) of me to tHeaderLeftRect set the right of btn ("HArrow" & pHeaderNum) of me to tMouseH repeat with i = (pHeaderNum + 1) to tNumOfColumns set the left of btn ("Header" & i) of me to the right of btn ("Header" & (i - 1)) of me if there is a fld ("Filter" & the short name of tWidget & i) then set the width of fld ("Filter" & the short name of tWidget & i) to the width of btn ("Header" & i) of me set the left of fld ("Filter" & the short name of tWidget & i) to the left of btn ("Header" & i) of me set the width of fld ("Filter" & the short name of tWidget & pHeaderNum) to the width of btn ("Header" & pHeaderNum) of me set the left of fld ("Filter" & the short name of tWidget & pHeaderNum) to the left of btn ("Header" & pHeaderNum) of me end if if i = tLastVisibleTab then set the right of btn ("HArrow" & i) of me to the right of tWidget else set the right of btn ("HArrow" & i) of me to the right of btn ("Header" & i) of me end repeat if tMouseH <> sMouseH then put tMouseH into sMouseH SetTabstops pHeaderNum,tWidget -- end if unlock screen send "ResizeHeaders" && pHeaderNum to me in 30 milliseconds end ResizeHeaders ----------------------------------------------- private command SetTabstops pHeaderNum,pFld -- sets list field tabstops when resizing columns local tScroll,tTabStops ----- put the hScroll of pFld into tScroll if pHeaderNum > 1 then put item 1 to (pHeaderNum - 1) of the the tabstops of pFld & comma into tTabStops end if repeat with i = pHeaderNum to ((the number of btns of me) div 2) put the right of btn ("Header" & i) of me - (the left of pFld + 3) + the hScroll of pFld & comma after tTabStops end repeat delete last char of tTabStops set the tabstops of pFld to tTabStops set the hScroll of pFld to tScroll set the hScroll of grp (the short name of pFld) to tScroll end SetTabstops ------------------------------------------------- private function GetCurLabels -- returns current headers labels local tNum,tHeaders ----- repeat with i = 1 to (the number of btns of me / 2) if the label of btn ("Header" & i) of me <> empty then put the label of btn ("Header" & i) of me & cr after tHeaders end repeat delete last char of tHeaders return tHeaders end GetCurLabels ----------------------------------------------- private function AllColumnsAdjusted -- returns all columns width are adjusted ot not according to a custom property -- this way 'divides work' and is much fatser than any calculation on-the-fly local tWidget,tNum ----- put the long ID of fld (the short name of me) into tWidget if the cSSSHeader["uNumLines"] of fld (the short name of me) then put 2 into tNum else put 1 into tNum repeat with i = tNum to (the number of btns of me / 2) - 1 if i = the cSSSHeader["uCurHeader"] of tWidget then next repeat if not the uAdjust of btn ("Header" & i) of me then return false end repeat return true end AllColumnsAdjusted  cREVGeneral scriptChecksum>'kw,'frƝ breakPoints handlerListXmouseDown mouseLeave mouseRelease mouseUp mouseMove ResizeHeaders SetTabstops SortColumnscriptSelection char 72 to 71 revUniqueID 1225887935657 bookmarksscripteditorvscroll0scripteditorselection16 tempScript prevHandlermouseUpscript'j

local lPopUpInUse

-----------------------------------------------

on mouseDown pButton

local tNumOfColumns,tHeaderNum

-----

put pButton = 3 into lPopUpInUse

if lPopUpInUse then

lock messages

set the cSSSHeader["uCurHeader"] of this cd to char -1 of the short name of the target

if tHeaderNum = 0 then set the cSSSHeader["uCurHeader"] of this cd to 10

unlock messages

put the cSSSHeader["uHeaderColumsNum"] of this cd into tNumOfColumns

if the cSSSHeader["uNumLines"] of this cd then add 1 to tNumOfColumns

if the cSSSHeader["uCurHeader"] of this cd < tNumOfColumns then

popup btn "HeaderPopUp"

end if

else

put char -1 of the short name of the target into tHeaderNum

if tHeaderNum = 0 then put 10 into tHeaderNum

if not the showName of btn ("Header" & tHeaderNum) then exit mouseDown

if the cursor = 81 then ResizeHeaders tHeaderNum --

else

-----

lock screen

if the backPattern of btn ("Header" & tHeaderNum) = the ID of img "Header" then

set the backPattern of btn ("Header" & tHeaderNum) to the ID of img "Header+"

set the icon of btn ("Arrow" & tHeaderNum) to the ID of img "Arrow+"

else

set the backPattern of btn ("Header" & tHeaderNum) to the ID of img "HeaderHilited+"

if the icon of btn ("Arrow" & tHeaderNum) = the ID of img "Arrow Down" then

set the icon of btn ("Arrow" & tHeaderNum) to the ID of img "Arrow Down+"

else

set the icon of btn ("Arrow" & tHeaderNum) to the ID of img "Arrow Up+"

end if

end if

unlock screen

end if

end if

end mouseDown

-----------------------------------------------

on mouseLeave

if the mouse is up then unlock cursor

end mouseLeave

-----------------------------------------------

on mouseRelease

local tHeaderNum

-----

if the cursor <> 81 then

put char -1 of the short name of the target into tHeaderNum

if tHeaderNum = 0 then put 10 into tHeaderNum

if not the showName of btn ("Header" & tHeaderNum) then exit mouseRelease

-----

lock screen

if the backPattern of btn ("Header" & tHeaderNum) = the ID of img "Header+" then

set the backPattern of btn ("Header" & tHeaderNum) to the ID of img "Header"

set the icon of btn ("Arrow" & tHeaderNum) to the ID of img "Arrow"

else

set the backPattern of the target to the ID of img "HeaderHilited"

if the icon of btn ("Arrow" & tHeaderNum) = the ID of img "Arrow Down+" then

set the icon of btn ("Arrow" & tHeaderNum) to the ID of img "Arrow Down"

else

set the icon of btn ("Arrow" & tHeaderNum) to the ID of img "Arrow Up"

end if

end if

unlock screen

end if

unlock cursor

end mouseRelease

-----------------------------------------------

on mouseUp

local tHeaderNum

-----

if lPopUpInUse then exit mouseUp

if the cursor <> 81 then

put char -1 of the short name of the target into tHeaderNum

if tHeaderNum = 0 then put 10 into tHeaderNum

if not the showName of btn ("Header" & tHeaderNum) then exit mouseUp

-----

lock screen

repeat with i = 1 to (the number of btns of me / 2)

if i = tHeaderNum then next repeat

set the backPattern of btn ("Header" & i) of me to the ID of img "Header"

set the icon of btn ("Arrow" & i) to the ID of img "Arrow"

end repeat

set the backPattern of btn ("Header" & tHeaderNum) to the ID of img "HeaderHilited"

if the icon of btn ("Arrow" & tHeaderNum) = the ID of img "Arrow Up+" then

set the icon of btn ("Arrow" & tHeaderNum) to the ID of img "Arrow Down"

SortColumn "ListField",tHeaderNum,"Up"

lock messages

set the cSSSHeader["uCurSort"] of this cd to the label of btn ("Header" & tHeaderNum) & cr & "descending"

-- see setprop cSSSHeader[pProp] in card's script

else

set the icon of btn ("Arrow" & tHeaderNum) to the ID of img "Arrow Up"

SortColumn "ListField",tHeaderNum,"Down"

lock messages

set the cSSSHeader["uCurSort"] of this cd to the label of btn ("Header" & tHeaderNum) & cr & "ascending"

-- see setprop cSSSHeader[pProp] in card's script

end if

unlock screen

end if

unlock cursor

end mouseUp

-----------------------------------------------

on mouseMove pX,pY

local tHeaderNum,tHeaderLeftRect,tHeaderRightRect

-----

put char -1 of the short name of the target into tHeaderNum

if tHeaderNum is not an integer or tHeaderNum < 1 then exit mouseMove

if not the showName of btn ("Header" & tHeaderNum) then exit mouseMove

-----

if "Arrow" is in the target and px > (the right of the target - 4) then

if the right of the target = the right of fld (the short name of me) then exit mouseMove

-----

set the cursor to 81

lock cursor

else unlock cursor

end mouseMove

-----------------------------------------------

on ResizeHeaders pHeaderNum

local tMouseH,tHeaderLeftRect,tHeaderRightRect

constant kMinWidth = 40

-----

if the mouse is up then exit ResizeHeaders

put the mouseH into tMouseH

put the rect of btn ("Header" & pHeaderNum) into tHeaderLeftRect

put the rect of btn ("Header" & pHeaderNum + 1) into tHeaderRightRect

if tMouseH - item 1 of tHeaderLeftRect < kMinWidth then put item 1 of tHeaderLeftRect + kMinWidth into tMouseH

if item 3 of tHeaderRightRect - tMouseH < kMinWidth then put item 3 of tHeaderRightRect - kMinWidth into tMouseH

put tMouseH into item 3 of tHeaderLeftRect

put tMouseH into item 1 of tHeaderRightRect

-----

lock screen

set the rect of btn ("Header" & pHeaderNum) to tHeaderLeftRect

set the rect of btn ("Header" & pHeaderNum + 1) to tHeaderRightRect

set the right of btn ("Arrow" & pHeaderNum) to tMouseH

SetTabstops the long name of fld "ListField" --

unlock screen

send "ResizeHeaders" && pHeaderNum to me in 50 milliseconds

end ResizeHeaders

-----------------------------------------------

on SetTabstops pFld

local tStopTabs

-----

repeat with i = 1 to min(the number of btns of me,9)

put the right of btn i of me - (the left of pFld + 3) & comma after tStopTabs

end repeat

set the tabstops of pFld to tStopTabs

end SetTabstops

-----------------------------------------------

on SortColumn pFld,pColNum,pDirection

local tHilitedText,tHilitedLines,tHtmlText

-----

lock screen

set the itemdel to tab

put the hilitedText of fld pFld into tHilitedText

if pDirection = "Down" then

sort fld pFld ascending by item pColNum of each

else

sort fld pFld descending by item pColNum of each

end if

repeat for each line tLine in tHilitedText

put lineOffset(tLine,fld pFld) & comma after tHilitedLines

end repeat

if the cSSSHeader["uNumLines"] of this cd then

repeat with i = 1 to the number of lines of fld pFld

put i into item 1 of line i of fld pFld

end repeat

end if

set the hilitedLines of fld pFld to tHilitedLines

unlock screen

end SortColumn

 cSSSMenusfrAjuster cette colonne Ajuster toutes les colonnes - Cocher toutes les cases Dcocher toutes les cases Basculer toutes les cases - Filtrer...esAjustar esta columna Ajustar todas las columnas - Hacer una cruz en todas las casillas Desnudar todas las casillas Oscilar todas las casillas - Filtrar...dezSpaltengre anpassen Alle Spaltengren anpassen - Alles aktivieren Alles deaktivieren Checkboxen umschalten - Filter... enrAdjust this column size Adjust all columns size - Check all boxes Uncheck all boxes Toggle check boxes - Filter...ptAjustar esta coluna Ajustar todas as colunas - Assinalar todos os compartimentos Atirar todos os compartimentos Balanar todos os compartimentos - Filtrar...itRegolare questa colonna Regolare tutte le colonne - Intaccare tutte le scatole Scoccare tutte le scatole Oscillare tutte le scatole - Filtrare... cSSSTooltipsfr-Un clic droit permet de nombreuses oprationses2Un chasquido derecho permite numerosas operacionesde2Erlaubt ein gerades Klicken zahlreiche Operationenen$A right click allows many operationspt-Um clique direito permite numerosas operaesit,Un clic diritto permette numerose operazioniTabsi cREVGeneral revUniqueID 1225888586341 bookmarks handlerList tempScript prevHandlerscriptTabs}on menuPick pItem local tText,tStartLine,tEndLine,tFlag,tDate,tDisclaimer ----- if pItem = "Presentation" then -- this code adds or suppresses information about purchase according to ListMagic status on current computer put the htmlText of fld "Info" of cd pItem into tText put lineOffset("ListMagic provides a full automatized",tText) into tStartLine if tStartLine <> 0 then put lineOffset("Just click on the Buy ListMagic!",tText) into tEndLine delete line tStartLine - 1 to tEndLine + 1 of tText end if if CheckForRegistration() then -- lib disable btn "Buy" of cd pItem else put true into tFlag put the date into tDate convert tDate from short date to seconds if tDate < 1231628400 then put the uSpecialOfferDisclaimer of cd pItem into tDisclaimer else put the uDisclaimer of cd pItem into tDisclaimer put tDisclaimer into line lineOffset("ListMagic has been deeply",tText) - 1 of tText enable btn "Buy" of cd pItem end if set the htmlText of fld "Info" of cd pItem to tText end if go cd pItem end menuPick  4Action Presentation Installation Syntax FAQ History cREVGeneral scriptChecksum{R8 handlerListmenuPickscriptSelection char 56 to 55scripteditorvscroll0 bookmarks revUniqueID 1225888508944scripteditorselection0 prevHandlermenuPick tempScriptscript SSS.png Hon mouseUp launch url "http://www.sosmartsoftware.com/" end mouseUp P"-PNG  IHDR". 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"IDATxbax& O?"?z$<@,X< dz,,2{H?Hk4^B˧̌<4i_rD@,hgaӊb:޾zo]ǷDr8 4y6{5ݕ]WMż#٩ƧoZQqm8$Iyon0w 3+ `8 K d+ ,?ۏҟ]xۥW/~g33+?@S_B9.3_823J{;kc :e'HfCqΈ#{x#Sxs`]Ϛ[^>Y5c+?8r2,FF zh(~(M Ѱ狻v%?d|\>}aeE,^%oΦU{ǃ_Tdگ?w>ytfo <"JYղC"%.686lq-dG &pK\j{H@FeoFWwnAςDE|Փg{Y8~#%̅~f^U8]#50Ln>n^>~f[v6&߰ d cvF>H?~ߟ郹,",Z9}WX%ëXDHĄŠ 9J02qrrﳃ_+yop6E[?;3R.QYy844>?ǛGW50s[s|DYޜs%fq-9_KLu~W=\j^n+!a&lgǯ^ӏ]m rB#ǻ? hV.n6%Lz<х ;'￿ ?g{3蟿~/,r6 ~rOmsy9<9'x9 s-RXxծ|:,>̲ܿ?R= w3< 0 C_>;%'o3_?*imcރ?"2BqN.z6UI/"N~|zʲ/Ho_8AII[9Ԟ|d/O^0Q-$*ۻ= ?:Ű̢*'c*fy_ο> ^Q0si.c``_̒NL l [{p H),x]^ F o1ٍ-w}R0XxkqF_bh6^ . f6F Y. M;S.!IΞz+ *rO3߿z:;;El9%5<{{ˣa!0F6q!qNq M ߿,Oمye-d~82ċsɫ }?R\]WɫJEYDMI\XBV^]$L\ҺJj\6_d x }#ǩB__=r{ 73昳ps0+hڙ7}T~˻oya!!#v</^#.+YXUGN?FSHERTYQHXVDWߞ\RP&-<*e|o:ԹDZO\C7VUAqc㗶ɔ2SRS^!ѕ򊼡r2\vont@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&HFLOhpIY PW&У O7., ٲ;|e  ,(|w(㷕 ~ մ6岛6mcC  ŋ"Ogw^z`)PK(B ]SLhُn gyf quc|xw铦-Wfh9Ӌn?zzȅ<U6t5J{ʜ&'O;/?_SģNZƯƐ1D#Ey8rD9*{2hl8zi{᧖UqP$(M[QWc 'Ӆn@ȏ>ov7V9:V Ɇ12 QWB`"EkyщYeWާӝwZ\i+7M4+' 6 7J7tAcV3! abF$Lup!5ӭ4ՠn es=>zZ$g?./}<9YS8RGJRpVܩ-M/)=PXT<_1CWMr!lqy[KIE 1A fzY-3W‘W]d7ۑRVͿ h(Tb 69|yfʖ V&%a&'Jt^c N@JXJԎ0yof6>0S'_!à-c0_cFˮ ¶ 2.5 XjS%-X%ԑ0ꀣÝz]m?^8%g*@̶2)x+[V,$p59'>qdI@%˟x/Ⱥ)e9RJ)sRCbN+$ %\w7[:·mwhMNl'bIг܂:m֐kuF]i.w/_ߞo]e3 p ؂_.b,&kWLZSϯ_nlvӓ~K@LTKT]PRV }xuc&G%+v6FQIUVPqyV<<>~z';;0v..Vf&fv6VfV`A痏RQJEME&X@w2(9XW.wLrjɲ&(A[հxUe||RZ*)b< D.N`Q+,'ۤ ԳQxɗ<~}i]`b'lg54`g|}ƉOOE.FB XKl ɻuVGDTT`}yBXvRbgW1P燔vx4v  _vM{Dun` `C73\&vU+_R^;LJן_]>[DLk~5+RigvYJQˏ[̎ZN32;?߿???ٝ;?>|sbҒڞR?>~x!*h/|&xwoJDX̎[cƒ+_ X'*fZ+k”WCּs Ý _=l>$ٹ#WTOGOGp[`0W'=?Ǡw\"zi+'Z{7Μ r7/_ZAˋfeTxoW@Ps&on?MM(WT ֥y E 6!ßon7?ҿ?>zr[ Ƿ7?y򆘦<^\۽bꅅ Wuov>ZBݩ>SV'_]:2@W_?6Zd~|t󯰲S_:w5w~O_7;GL7H^츹kfamo>xtv!޳+O=`F`]7^\9xɉ-o8ee~¯oo iWԿ=4!MU3A~1?@KOa}`~H/7737?>o(2A_?{u'>7 `==Wpi}dϧ'v.Ⱦ2Y^<ӇXyy~~{'6~u+h ë >q^!eV w2{*wξ ?pf/+po?>+a%,-G!xs{ UziN:Lȉj?bFbFZ`X!C_5 lfUHv#H{ y*ϊa-Xc \|(:mJ[}pwwK\ӻ^7#`@jE f{&0HaOeR^b:"8r G#Rτ%P>-Z[XhWCC VAGL[X _DGY36ؘs`AX@z?6e_4B+LI=88hY X"=G1"978H3X˄ ۦ { nfh !l8t~C)yyޞoՙoo-Hu,k-Te5ʈfFK\{Hpehu?" GDÆGZK'h?D⡕B>,,7ug'H= `ı} /Q@60,lk1'!l"F?M!H \2nha?h"?͈+#Ă'?[BX?Z'$V} e@)ii@:TZVJ@, \͌o'zM[{@D}3<bhT``4Ӥ(IENDB` cREVGeneralscriptChecksum-bL]" vB bookmarks revUniqueID 1225973144815 handlerListmouseUpscriptSelection char 58 to 57 prevHandler tempScriptscript

on mouseUp

launch url "http://www.sosmartsoftware.com/"

end mouseUp

 LMPopUpūu on menuPick pItem local tWidget,tColumn,tHilitedLines,tData,tColumnsNum,tOutPut,tFlag ----- put the uCurWidget of me into tWidget switch the uCurCall of me -- custom property allowing to know from where the menu was called case "Header" switch lineOffset(pItem,me) case 1 put the cSSSHeader["uCurHeader"] of tWidget into tColumn if the cSSSHeader["uNumLines"] of tWidget then subtract 1 from tColumn LMAdjustColumn "Auto",tColumn,tWidget -- lib break case 2 LMAdjustColumn ,,tWidget -- lib break case 4 if the number of lines of me > 4 then LMSetCheckedBoxes "all", true,tWidget -- lib else LMShowFilters tWidget -- lib end if break case 5 LMSetCheckedBoxes "all", false,tWidget -- lib break case 6 LMSetCheckedBoxes "all","Toggle",tWidget -- lib break case 8 LMShowFilters tWidget -- lib end switch break case "List" switch lineOffset(pItem,me) case 1 put LMExtractLines(LMGetHilitedLines(tWidget),tWidget) into tData -- lib put the cSSSHeader["uHeaderColumsNum"] of tWidget into tColumnsNum put CheckForRegistration() into tFlag -- lib -- if tFlag then put if tColumnsNum is an integer then set the itemdel to tab repeat for each line tLine in tData if tFlag then else put item 1 to tColumnsNum of tLine & cr after tOutPut end repeat delete last char of tOutPut set the clipboardData["text"] to tOutPut else set the clipboardData["text"] to tData end if break case 2 if the number of items of the hilitedLines of tWidget = the number of lines of fld (the short name of tWidget) then LMSetHilitedLines ,tWidget -- lib else repeat with i = 1 to the number of lines of fld (the short name of tWidget) put i & comma after tHilitedLines end repeat LMSetHilitedLines tHilitedLines,tWidget -- lib end if break default LMChangeLine lineOffset(pItem,me),the long ID of the mouseControl -- lib end switch end switch end menuPick f uCurCallList uCurWidgetafield id 1006 of card id 1002 of stack "/Users/eric/Documents/Revolution/ListMagic/ListMagic.rev"s}Copier la slection Tout slectionner - Insrer une ligne avant Insrer une ligne aprs - Supprimer les lignes slectionnes cREVGeneral scriptChecksumwPi#F2Tg=u breakPoints handlerListmenuPick AdjustColumnscriptSelectionchar 1034 to 1033scripteditorvscroll206 bookmarks revUniqueID 1225990147442scripteditorselection1273 prevHandlermenuPick tempScriptscriptPV

on menuPick pItem

local tFldName,tText,tNumOfColumns

-----

lock screen

put the cSSSHeader["uListField"] of this cd into tFldName

put the text of fld tFldName into tText

create invisible fld "SSSFormat"

-----

switch lineOffset(pItem,me)

case 1

AdjustColumn tFldName,tText,the cSSSHeader["uCurHeader"] of this cd --

break

case 2

put the cSSSHeader["uHeaderColumsNum"] of this cd into tNumOfColumns

if not the cSSSHeader["uNumLines"] of this cd then subtract 1 from tNumOfColumns

repeat with i = 1 to tNumOfColumns

AdjustColumn tFldName,tText,i --

end repeat

if the cSSSHeader["uNumLines"] of this cd then

set the left fld "Boxes" to the left of fld tFldName + item 1 of the tabStops of fld tFldName + 8

set the left btn "SSSSelectAll" to the left of fld tFldName + item 1 of the tabStops of fld tFldName + 4

else

set the left fld "Boxes" to the left of fld tFldName + 8

set the left btn "SSSSelectAll" to the left of fld tFldName + 4

end if

break

default

end switch

unlock screen

if there is a fld "SSSFormat" then delete fld "SSSFormat"

end menuPick

----------------------------------

on AdjustColumn pFldName,pText,pColumn

local tLine,tList,tNextWidth,tTabstops,tCurWidth,tNumOfColumns,tRect

-----

set the itemDel to tab

repeat for each line tLine in pText

put item pColumn of tLine & cr after tList

end repeat

set the text of fld "SSSFormat" to tList

put the formattedWidth of fld "SSSFormat" + 5 into tNextWidth

put the tabstops of fld pFldName into tTabstops

set the itemDel to comma

put item pColumn of tTabstops - item (pColumn - 1) of tTabstops into tCurWidth

put the cSSSHeader["uHeaderColumsNum"] of this cd into tNumOfColumns

if the cSSSHeader["uNumLines"] of this cd then add 1 to tNumOfColumns

if tNextWidth > tCurWidth then

repeat with i = pColumn to tNumOfColumns

add tNextWidth - tCurWidth to item i of tTabstops

end repeat

else

repeat with i = pColumn to tNumOfColumns

subtract tCurWidth - tNextWidth from item i of tTabstops

end repeat

end if

set the tabstops of fld pFldName to tTabstops

-----

put RealTabStops(tTabstops,tNumOfColumns) into tTabstops -- S

repeat with i = pColumn to the number of items of tTabstops

put the rect of btn ("Header" & i) of grp pFldName into tRect

put item 1 of tRect + item i of tTabstops into item 3 of tRect

set the rect of btn ("Header" & i) of grp pFldName to tRect

if i = 1 then

set the left of btn ("Header" & i) of grp pFldName to the left of grp pFldName

else

set the left of btn ("Header" & i) of grp pFldName to the right of btn ("Header" & (i-1)) of grp pFldName

end if

if item 3 of tRect >= the right of fld pFldName then

set the right of btn ("Arrow" & i) of grp pFldName to the right of fld pFldName

else

set the right of btn ("Arrow" & i) of grp pFldName to the right of btn ("Header" & i) of grp pFldName

end if

end repeat

end AdjustColumn

*BTests uon menuPick local tRefList,tHeaders,tResult,tCurSort,tColumnNo,tDirection,tPrompt ----- switch the menuHistory of me case 1 -- User's raw list set the vGrid of fld "List" of stack "SSSLMFeedList" to true put LMExtractList(false) into tRefList -- lib put tRefList into fld "List" of stack "SSSLMFeedList" -- set the label of stack "SSSLMFeedList" to "User's Raw list (what the user may see)" put "

Modify these simple tab/tab/return data and see how they are automatically installed in the widget when clicking on the Display these data button.

" \ & "

First line indicates headers labels.

" into tPrompt set the label of btn "Apply" of stack "SSSLMFeedList" to "Display these data" show btn "Apply" of stack "SSSLMFeedList" break case 2 -- Complete raw list (includes hidden data) set the vGrid of fld "List" of stack "SSSLMFeedList" to true put LMExtractList(true) into tRefList -- lib put tRefList into fld "List" of stack "SSSLMFeedList" -- if the cSSSHeader["uHeaderColumsNum"] of fld "ALaiTunes" = "Auto" then set the label of stack "SSSLMFeedList" to "Raw list (as there is a hscrollbar there are no possible hidden data)" else set the label of stack "SSSLMFeedList" to "User's Raw list (what the user may see)" put "

Modify these simple tab/tab/return data and see how they are automatically installed in the widget when clicking on the Display these data button.

" \ & "

First line indicates headers labels.

" into tPrompt set the label of btn "Apply" of stack "SSSLMFeedList" to "Display these data" show btn "Apply" of stack "SSSLMFeedList" break case 3 -- lines with a checked box put LMGetCheckedBoxes() into tResult -- if "error" is in tResult then put "No check boxes columns in current settings." & cr & "Check 'Check box column' box first." into fld "List" of stack "SSSLMFeedList" else if tResult = empty then put "None" into fld "List" of stack "SSSLMFeedList" else put tResult into fld "List" of stack "SSSLMFeedList" end if set the label of btn "Apply" of stack "SSSLMFeedList" to "Apply" show btn "Apply" of stack "SSSLMFeedList" set the vGrid of fld "List" of stack "SSSLMFeedList" to false set the label of stack "SSSLMFeedList" to "Checked lines (lines with a checked box)" break case 4 -- highlighted lines put LMGetHilitedLines() into tResult -- if tResult = empty then put "None" into fld "List" of stack "SSSLMFeedList" else put tResult into fld "List" of stack "SSSLMFeedList" set the vGrid of fld "List" of stack "SSSLMFeedList" to false if the cSSSHeader["uSelectType"] of fld "ALaiTunes" = 1 then set the label of stack "SSSLMFeedList" to "Highlihted lines (one line only)" else set the label of stack "SSSLMFeedList" to "Highlihted lines (multiples lines)" end if set the label of btn "Apply" of stack "SSSLMFeedList" to "Apply" show btn "Apply" of stack "SSSLMFeedList" break case 5 put LMGetCurSort() into tCurSort if tCurSort = empty then put "None" into fld "List" of stack "SSSLMFeedList" else put "Column number:" && item 1 of tCurSort & cr & "Header tab label:" && item 2 of tCurSort & cr & "Direction:" && item 3 of tCurSort into fld "List" of stack "SSSLMFeedList" set the vGrid of fld "List" of stack "SSSLMFeedList" to false set the label of stack "SSSLMFeedList" to "Current list sort" hide btn "Apply" of stack "SSSLMFeedList" end switch modeless stack "SSSLMFeedList" set the defaultstack to "SSSLMFeedList" if tPrompt <> empty then answer info tPrompt as sheet end menuPick B9 Current sortOUser's raw list Complete raw list Checked boxes Highlighted lines Current sort cREVGeneral scriptChecksum\YyVqpl# breakPoints handlerListmenuPickscriptSelectionchar 816 to 815 bookmarks revUniqueID 1226047070458scripteditorvscroll436scripteditorselection2269 prevHandler ExtractList tempScriptscript *O Label Field ># cREVTable currentviewRetrieve and modify: cREVGeneral revUniqueID 1226048351501 Retrieve and modify:@ Arrow2.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`cREVTempMaster palindromeFramesfalse traversalOnfalseinksrcCopy repeatCount0size639threeDtrue blendLevel50rect -19,-17,-7,-6angle0 fileNamehotSpot1,1name Arrow.pngcolors alwaysBuffertruetoolTip dontDitherfalselayer19 borderWidth2 cantSelectfalsevisibletrueopaquefalseyHot1id1772altId0 currentFrame1 showBorderfalse disabledfalsexHot1 frameCount0 constantMaskfalselockLocfalseshowFocusBordertruecControlPickercontrolPickerPos300,200 cREVGeneral bookmarks revUniqueID 1104075103241 handlerList prevHandler tempScriptscript JLInfo 2Q cREVGeneral revUniqueID 1226493549508 Label:Jj Rev3 Iconsi;D cREVGeneral revUniqueID 1226513980598Jesetprop-private.png K PNG  IHDR Vu\ pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxL;hSq>Ҽ&A-5B1G:vN"NSD\JZ16FEĨE MޟC-?81*3{ BAE yhdmE$L| AWs/MD4==N&ͧ\ |'DP L(Nr8)pn7{kK~`c P7ʱ}<^ʕ'*gw#F aDaj7v$JRbI|EkW&~ ^b.36IRi cFzh>Ee\ But:بt])yī%D۶x׳iP@NhZmyPӟo"Cci~^82*\n*P߇&q0"/=_@#CIVIENDB` cREVGeneral revUniqueID 1226513552495Jf handler.png W kPNG  IHDR Vu\ pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATx\nQsݵȎY6QXKIMH@AxhS(e$ jZ,#PD#}ь;|$yv K TAhd@J(~!7ѥ"(rgPVj5G}W`ɕop{zM]\#!b'&7FdH l l_`YHDppNv 0\}r^@ÊoY=FLM7~|׿)u/fXuCАQ@zRXE#R OO9^p2cSp*LO/ &O~|y3 ֨\Mi3\i_K avC>v+160O-@U9IENDB` cREVGeneral revUniqueID 1226513552496Jg function.png ? rPNG  IHDR Vu\ pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxDnPFkNBKP1  1XĀ2Ub1"!^^lT8?CIG:Ù>YΏ;-Df* $CD2~nJqD]^V]$ƸY#g*t{)=2HWUF.jf)L ќpxH 1X0-3KTH8̌jï{z`ExT H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_FIDATxd?kSa{o" [ ~qsG'E:8upX:ءOHj%lL45}C(D9G^V4MTQ0^ARu:-LvֺCHp'!rVwѦM(Cu)d"ER};ZU.:m[7 ]ʓ1w<=ɃF[5o6pykWoemS#8DFD͜O3?\v݂Xc(#4eYUUGuhȍ5f8!ww>p<%)eY^0/DQ{{ι fi=X $4H]ޝ_VkA}T}*sl,_&S^h?$IENDB` cREVGeneral revUniqueID 1226513797939Jihandler-private.png c PPNG  IHDR Vu\ pHYs   OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3- cHRMz%u0`:o_F{IDATx\=kTQ97{MHȆ5nd+ v* Ar' &(B-v3{wM|w`ΙaDg4F0#-7".r ԡ2x(JZ_k\Zpƍk?R1@b༰xk h!O< ;+!ߎBTK4SAT5ztnwt7~ rLT ffzOI"}ӻws?~O|88"_j:i>c <Z(cANƔy3;i…̩mIENDB` cREVGeneral revUniqueID 1226513797940  ALaiTunes ym/* ListMagic 1.1 by Eric Chatonet http://www.sosmartsoftware.com/ */ local sCurChar,sCurCharChunk,sClickedLineNo,sLastEffectiveClickedLineNo,sHoveredLineNo -- script local variables --------------------------------------------- on mouseDown pButton global gLMLanguage local tMenu,tHilitedLines,tWidget,tScroll,tItemNo,tCurLineNo ----- if the vScrollbar of me and the mouseH >= (the right of me - the scrollBarWidth of me) then exit mouseDown if value(the clickLine) = empty then lock screen LMHideEntryBox -- set the hilitedLines of me to empty LMSetHilitedLinesColor the long ID of me -- lib unlock screen else put the mouseChar into sCurChar put the mouseCharChunk into sCurCharChunk put the hilitedLines of me into tHilitedLines ----- if pButton = 3 then if gLMLanguage = empty then put GetUserLang() into gLMLanguage -- lib if the textColor of the mouseText = the cSSSHeader["uHighlightedTextColor"] of me then if the cSSSHeader["uEdition"] of me then put line 1 to 5 of the cSSSMenus[gLMLanguage] of me into tMenu if the platform <> "MacOS" then put MacToIso(tMenu) into tMenu if the number of items of the hilitedLines of me = 1 then delete item 2 of line -1 of tMenu else delete item 1 of line -1 of tMenu if the number of items of the hilitedLines of me = the number of lines of me then delete item 1 of line 2 of tMenu else delete item 2 of line 2 of tMenu put cr & "-" after line 2 of tMenu put cr & "-" after line 5 of tMenu put tMenu into btn "LMPopUp" set the uCurCall of btn "LMPopUp" to "List" set the uCurWidget of btn "LMPopUp" to the long ID of me popup btn "LMPopUp" else put line 1 to 2 of the cSSSMenus[gLMLanguage] of me into tMenu if the platform <> "MacOS" then put MacToIso(tMenu) into tMenu if the number of items of the hilitedLines of me = the number of lines of me then delete item 1 of line 2 of tMenu else delete item 2 of line 2 of tMenu put tMenu into btn "LMPopUp" set the uCurCall of btn "LMPopUp" to "List" set the uCurWidget of btn "LMPopUp" to the long ID of me popup btn "LMPopUp" end if end if else lock messages if sCurChar <> the cSSSHeader["uCheckBoxesReplaceChar"] of me then -- it is not a mini check box put sClickedLineNo into sLastEffectiveClickedLineNo put EffectiveClickedLineNo(the long ID of me) into tCurLineNo -- lib if tCurLineNo = sClickedLineNo and the CSSSHeader["uEdition"] of me and tHilitedLines <> empty then -- editing if there is a fld "LMBox" and the mouseLoc is not within the rect of fld "LMBox" and the mouseChar = tab then LMHideEntryBox -- lib else hide fld "LMBox" LMEditField sCurChar,ClickedLineNo(the long ID of me),tCurLineNo,,the long ID of me -- lib end if else if the visible of fld "LMBox" and the mouseLoc is not within the rect of fld "LMBox" then LMHideEntryBox -- put tCurLineNo into sClickedLineNo ----- switch the cSSSHeader["uSelectType"] of me -- selects lines according to settings case 1 -- one line only set the hilitedLines of me to sClickedLineNo break case 2 -- multiple lines if the shiftKey is down then if sLastEffectiveClickedLineNo <> empty then set the hilitedLines of me to _AllLines(sClickedLineNo,sLastEffectiveClickedLineNo) -- else set the hilitedLines of me to sClickedLineNo end if else set the hilitedLines of me to sClickedLineNo end if break case 3 -- multiple lines + non contiguous if the shiftKey is down then if sLastEffectiveClickedLineNo <> empty then set the hilitedLines of me to tHilitedLines,_AllLines(sClickedLineNo,sLastEffectiveClickedLineNo) -- else set the hilitedLines of me to tHilitedLines,sClickedLineNo end if else if the commandKey is down then if sClickedLineNo is among the items of tHilitedLines then delete item itemOffset(sClickedLineNo,tHilitedLines) of tHilitedLines set the hilitedLines of me to tHilitedLines else set the hilitedLines of me to tHilitedLines & comma & sClickedLineNo end if else set the hilitedLines of me to sClickedLineNo end if break end switch LMStoreHilitedLine the long owner of this cd -- lib ----- if the hilitedLines of me <> tHilitedLines then try -- in the case this message is not handled higher in the message hierarchy LMSelectionChanged the long ID of me,the hilitedLines of me -- sent to current card catch tErr end try end if end if else -- it is a mini check box put the vScroll of me into tScroll if the imageSource of sCurCharChunk = the ID of img "Case" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) then set the imageSource of sCurCharChunk to the ID of img "Case+" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) else set the imageSource of sCurCharChunk to the ID of img "CaseChecked+" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) end if set the hilitedLines of me to tHilitedLines set the vScroll of me to tScroll end if LMSetHilitedLinesColor the long ID of me -- refreshes highlights end if end if unlock screen end mouseDown --------------------------------------------- on mouseUp local tStatus ----- if the visible of fld "LMBox" and the mouseLoc is not within the rect of fld "LMBox" then LMHideEntryBox -- if sClickedLineNo <> empty and line sClickedLineNo of me = empty then exit mouseUp if sCurChar = the cSSSHeader["uCheckBoxesReplaceChar"] of me then -- it is a mini check box lock screen if the mouseChar = sCurChar then -- same location if the imageSource of sCurCharChunk = the ID of img "Case+" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) then set the imageSource of sCurCharChunk to the ID of img "CaseChecked" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) put true into tStatus else set the imageSource of sCurCharChunk to the ID of img "Case" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) put false into tStatus end if try -- in the case this message is not handled higher in the message hierarchy LMCheckBoxChanged the long ID of me,sHoveredLineNo,tStatus -- sent to current card catch tErr end try else -- location has changed: fakes a mouseRelease if the imageSource of sCurCharChunk = the ID of img "Case+" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) then set the imageSource of sCurCharChunk to the ID of img "Case" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) else set the imageSource of sCurCharChunk to the ID of img "CaseChecked" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) end if end if unlock screen end if end mouseUp --------------------------------------------- on mouseEnter global gLMLanguage local tTooltip ----- if the cSSSHeader["uEdition"] of me then if gLMLanguage = empty then put GetUserLang() into gLMLanguage -- lib put the cSSSTooltips[gLMLanguage] of me into tTooltip if the platform <> "MacOS" then put MacToIso(tTooltip) into tTooltip set the tooltip of the target to tTooltip else set the tooltip of the target to empty put empty into sHoveredLineNo mouseMove -- pass mouseEnter -- so you can handle it elsewhere end mouseEnter --------------------------------------------- on mouseDoubleUp try -- in the case this message is not handled higher in the message hierarchy LMMouseDoubleUp the long ID of me,sClickedLineNo -- sent to current card catch tErr end try end mouseDoubleUp --------------------------------------------- on mouseLeave put empty into sHoveredLineNo try -- in the case this message is not handled higher in the message hierarchy LMLineHovered the long ID of me -- sent to current card catch tErr end try end mouseLeave --------------------------------------------- on mouseMove local tHilitedLines,tHoveredLineNo ----- if the vScrollbar of me and the mouseH >= (the right of me - the scrollBarWidth of me) then exit mouseMove if the hiliteColor of me = the cSSSHeader["uHighlightColor"] of me then LMSetHilitedLinesColor the long ID of me ----- put _HoveredLineNo() into tHoveredLineNo -- see below if tHoveredLineNo <> sHoveredLineNo and line tHoveredLineNo of me <> empty then put tHoveredLineNo into sHoveredLineNo ----- if the mouse is down and not the visible of fld "LMBox" then if item 1 of the clickloc > the right of me - the scrollbarWidth of me and the vScrollbar of me then exit mouseMove if item 2 of the clickloc > the bottom of me - the scrollbarWidth of me and the hScrollbar of me then exit mouseMove if the cSSSHeader["uSelectType"] of me > 1 then if sClickedLineNo <> empty then if the cSSSHeader["uSelectType"] of me = 2 then LMSetHilitedLines _AllLines(sClickedLineNo,sHoveredLineNo),the long ID of me -- lib else put the hilitedLines of me,_AllLines(sClickedLineNo,sHoveredLineNo) into tHilitedLines LMSetHilitedLines tHilitedLines,the long ID of me -- lib end if else LMSetHilitedLines sClickedLineNo,the long ID of me -- lib end if else LMSetHilitedLines sHoveredLineNo,the long ID of me -- lib end if try -- in the case this message is not handled higher in the message hierarchy LMSelectionChanged the long ID of me,the hilitedLines of me -- sent to current card catch tErr end try else try -- in the case this message is not handled higher in the message hierarchy LMLineHovered the long ID of me,sHoveredLineNo -- sent to current card catch tErr end try end if end if end mouseMove --------------------------------------------- on resizeControl -- when field is manually resized LMUpdateHeader the long ID of me-- lib end resizeControl --------------------------------------------- on moveControl -- when field is manually moved LMUpdateHeader the long ID of me-- lib end moveControl --------------------------------------------- on deleteField -- when deleting a widget local tCurWidgets,tSets ----- lock messages delete grp (the short name of me) -- header group put the CSSSHeader["uLMWidgets"] of this card into tCurWidgets delete line lineOffset(the short name of me,tCurWidgets) of tCurWidgets if tCurWidgets = empty then if there is a grp "LMGenericHeader" then delete grp "LMGenericHeader" if there is a grp "LMGenericFilter" then delete grp "LMGenericFilter" if there is a btn "LMPopUp" then delete btn "LMPopUp" if there is a fld "LMBox" then delete fld "LMBox" put the customPropertySets of this cd into tSets delete line lineOffset("CSSSHeader",tSets) of tSets set the customPropertySets of this cd to tSets else set the CSSSHeader["uLMWidgets"] of this card to tCurWidgets end deleteField --------------------------------------------- on scrollbarDrag pPos -- when horizontal scrollbar is moved local tWidget,tRect,tLastVisibleTab,tNum,temp ----- lock messages LMHideEntryBox -- if item 2 of the clickLoc > the bottom of me - the scrollbarWidth of me then lock screen set the hscroll of grp (the short name of me) to pPos put the long ID of grp (the short name of me) into tWidget put LMLastVisibleTab(the long ID of me) into tLastVisibleTab -- lib repeat with i = 1 to the number of btns of tWidget put char 7 to -1 of the short name of btn i of tWidget into tNum if "Header" is in the short name of btn i of tWidget and tNum <> tLastVisibleTab then set the right of btn ("HArrow" & tNum) of tWidget to the right of btn ("Header" & tNum) of tWidget else set the right of btn ("HArrow" & tLastVisibleTab) of tWidget to the right of tWidget end if end repeat if there is a grp ("LMFilter" & the short name of me) then set the hScroll of grp ("LMFilter" & the short name of me) to pPos send "SetWidgetHScroll" to me -- unlock screen end if end scrollbarDrag --------------------------------------------- on arrowKey pDirection -- using arrow keys local tLineNo ----- switch pDirection case "down" put min(the number of lines of the text of me, item 1 of the hilitedlines of me + 1) into tLineNo break case "up" put max(1, item 1 of the hilitedlines of me - 1) into tLineNo break default pass arrowKey end switch ----- lock screen set the hilitedlines of me to tLineNo LMSetHilitedLinesColor the long ID of me -- lib unlock screen end arrowKey --------------------------------------------- command SetLastClickedLineNo pNum put pNum into sClickedLineNo end SetLastClickedLineNo --------------------------------------------- command GetLastClickedLineNo return sClickedLineNo end GetLastClickedLineNo --------------------------------------------- private function _HoveredLineNo -- current hovered line number local tVpos ----- put item 2 of the mouseLoc - the top of me into tVpos return (tVpos - the topMargin of me + the vScroll of me) div the effective textHeight of me + 1 end _HoveredLineNo --------------------------------------------- private function _AllLines pLineNo1,pLineNo2 -- returns all lines numbers between to line numbers local tLines ----- if pLineNo1 < pLineNo2 then repeat with i = pLineNo1 to pLineNo2 put i & comma after tLines end repeat else repeat with i = pLineNo2 to pLineNo1 put i & comma after tLines end repeat end if delete last char of tLines return tLines end _AllLines --------------------------------------------- on SetWidgetHScroll -- this handler allows a correct field and header alignment on slower machines by setting again their scrolls once the mouse is up if the mouse is down and "SetWidgetHScroll" is not in the pendingMessages then send "SetWidgetHScroll" to me in 50 milliseconds set the hscroll of grp (the short name of me) to the hscroll of me send "resizeStack" to stack (the cSSSHeader["uLibName"] of stack (the mainStack of this stack)) end SetWidgetHScroll ----------------------------------------------- on dragMove if item 2 of the mouseLoc > the bottom of me - the scrollBarWidth of me and the hScrollbar of me then set the dragAction to "None" else if item 1 of the mouseLoc > the right of me - the scrollBarWidth of me and the vScrollbar of me then set the dragAction to "None" else if char 1 to 3 of the dragData["text"] = "SSS" then set the dragAction to "Move" else set the dragAction to "None" end if end dragMove --------------------------------------------- on dragEnd -- cleanup choose browse tool -- MC if not the cSSSHeader["uColumnsDandD"] of me or char 1 to 3 of the dragData["text"] <> "SSS" then exit dragEnd delete last image delete last grc send "DragCleanUp" to grp (the short name of me) end dragEnd ----------------------------------------------- on dragDrop send "dragDrop" to grp (the short name of me) end dragDrop ------------------------------------ setProp cSSSHeader[pProp] pValue local tOwner,tCurWidgets,tHilitedLines,tHeader,tCurList,tValue,tTabStops,tNum,tNumOfColumns,tHeight -- this setProp handler triggers all ways to set any property of ListMagic -- note that it always checks a new value before setting it ----- lock screen LMHideEntryBox -- put the hilitedLines of me into tHilitedLines ----- switch pProp case "uWidgetName" put LMCardWidgetOwner(the long name of me) into tOwner -- lib if there is a fld pValue of tOwner and the short name of me <> pValue then LMAnswerError "There is already a widget" && quote & pValue & quote && "in" && tOwner & ".",pProp -- else lock messages put the CSSSHeader["uLMWidgets"] of tOwner into tCurWidgets replace the short name of me with pValue in tCurWidgets set the CSSSHeader["uLMWidgets"] of tOwner to tCurWidgets set the cSSSHeader["uWidgetName"] of me to pValue if there is a grp (the short name of me) of tOwner then set the name of grp (the short name of me) of tOwner to pValue set the name of me to pValue end if break ----- case "uCurHeaderLabels" LMAnswerError pProp && "is used internally and can't be set.",pProp -- break ----- case "uDefaultHeaderLabels" repeat with i = 1 to LMRealColumnsNum() -- if the cSSSHeader["uNumLines"] of me then put line (i - 1) of pValue into tHeader else put line i of pValue into tHeader if tHeader = empty then put space into tHeader set the label of btn ("Header" & i) of grp (the short name of me) to tHeader end repeat pass cSSSHeader break ----- case "uCurHeader" case "uRightDelta" case "uBottomDelta" LMAnswerError pProp && "is used internally and can't be set.",pProp -- break ----- case "uDefaultTabStop" put word 1 of pValue into pValue if not (pValue is an integer or pValue = "Auto") or (pValue is an integer and pValue < 15) then LMAnswerError pProp && "value must be an integer (a number of pixels equal to or greater than 15) or 'Auto'.",pProp -- else lock messages set the cSSSHeader["uDefaultTabStop"] of me to pValue LMCreateHeader the long ID of me -- end if break ----- case "uCurSort" case "uCurList" LMAnswerError pProp && "can be read but can't be set.",pProp -- ----- break case "uSelectType" if pValue is not in "123" then LMAnswerError "uSelectType value must be:" & cr & cr & "1 for selecting one line only." & cr & "2 for selecting multiple lines." & cr & "3 for selecting non contiguous lines.",pProp -- else set the hilitedLines of me to item 1 of the hilitedLines of me LMSetHilitedLinesColor the long ID of me -- pass cSSSHeader end if break ----- case "uResizeType" if pValue is not in "0123" then LMAnswerError "uSelectType value must be:" & cr & cr & "0 for no resizing." & cr & "1 for vertical resizing." & cr & "2 for horizontal resizing." & cr & "3 for vertical and horizontal resizing.",pProp -- else lock messages set the cSSSHeader["uResizeType"] of me to pValue set the cSSSHeader["uBottomDelta"] of me to the bottom of this cd - the bottom of me set the cSSSHeader["uRightDelta"] of me to the right of this cd - the right of me send "resizeStack" to this cd end if break ----- case "uCheckBox" case "uNumLines" case "uEdition" case "uFiltering" if pValue is not a boolean then LMAnswerError pProp && "value must be a Boolean (true or false).",pProp -- else if pProp is not in "uEdition,uFiltering" then put LMExtractList(true,the long ID of me) into tCurList -- lock messages if pProp = "uCheckBox" then set the cSSSHeader["uCheckBox"] of me to pValue else set the cSSSHeader["uNumLines"] of me to pValue LMPopulate tCurList,the long ID of me -- end if pass cSSSHeader break ----- case "uHeaderColumsNum" if not (pValue is an integer or pValue = "Auto") then LMAnswerError pProp && "value must be an integer between one (min) and ten (max) or 'Auto'.",pProp -- else put the tabstops of me into tTabStops put pValue into tValue if pValue is an integer then put item 1 to pValue of tTabStops into tTabStops set the hScrollbar of me to false else set the itemDel to tab put the number of items of line 1 of me into tNum if the the cSSSHeader["uNumLines"] of me then subtract 1 from tNum set the itemdel to comma put item 1 to tNum of tTabStops into tTabStops put tNum into pValue set the hScrollbar of me to true end if repeat with i = 1 to the number of items of tTabStops if item i tTabStops > 200 then put 100 into item i of tTabStops end repeat put (sum(item 1 to (pValue - 1) of tTabStops)) + 2000 into item pValue of tTabStops repeat with i = 1 to the number of items of tTabStops if item i tTabStops = empty then put 100 into item i of tTabStops end repeat set the tabstops of me to tTabStops lock messages set the cSSSHeader["uHeaderColumsNum"] of me to tValue LMCreateHeader the long ID of me -- end if break ----- case "uFont" if pValue is not among the lines of the fontNames then LMAnswerError pValue & ": unknown font name.",pProp -- else if there is a grp "LMGenericHeader" then set the textFont of me to pValue set the textFont of grp "LMGenericHeader" to pValue set the textSize of grp "LMGenericHeader" to min (13,the effective textSIze of me) set the textStyle of grp "LMGenericHeader" to "bold" end if if there is a grp (the short name of me) then set the textFont of grp (the short name of me) to pValue pass cSSSHeader end if break ----- case "uFontSize" if pValue is not an integer then LMAnswerError pProp && "value must be an integer.",pProp -- else if there is a grp "LMGenericHeader" then set the textSize of me to pValue set the textFont of grp "LMGenericHeader" to the effective textFont of me set the textSize of grp "LMGenericHeader" to min (13,pValue) set the textStyle of grp "LMGenericHeader" to "bold" end if if there is a grp (the short name of me) then set the textSize of grp (the short name of me) to min (13,pValue) if the cSSSHeader["uTextHeight"] of me = 1 then set the textHeight of me to trunc(4/3 * the textSize of me) else set the textHeight of me to 16 CreateFieldAlternatingColors the long ID of img "Back Pattern" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack),the cSSSHeader["uStripsColor"] of me,"255,255,255",the effective textHeight of me,10,2 -- C set the backPattern of me to the ID of img "Back Pattern" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) pass cSSSHeader end if break ------ case "uColumnsDandD" if pValue is not a boolean then LMAnswerError pProp && "value must be a Boolean (true or false).",pProp -- else pass cSSSHeader end if break ----- case "uTextHeight" if not (pValue is an integer or pValue = "Auto") then LMAnswerError pProp && "value must be an integer or 'Auto'.",pProp -- else if pValue = 2 then set the textHeight of me to 16 else set the textHeight of me to trunc(4/3 * the textSize of me) CreateFieldAlternatingColors the long ID of img "Back Pattern" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack),the cSSSHeader["uStripsColor"] of me,"255,255,255",the effective textHeight of me,10,2 -- C set the backPattern of me to the ID of img "Back Pattern" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) pass cSSSHeader end if break ----- case "uCheckBoxesReplaceChar" if the number of chars of pValue <> 1 then LMAnswerError pProp && "value must be a single char.",pProp -- else lock messages set the cSSSHeader["uCheckBoxesReplaceChar"] of me to pValue LMCreateHeader the long ID of me -- end if break ----- case "uHighlightColor" if not _RightColorNotation(pValue) then LMAnswerError pProp && "value must be a valid RGB triplet like 255,255,255 (white).",pProp -- else set the hiliteColor of me to pValue pass cSSSHeader end if break ----- case "uHighlightedTextColor" if not _RightColorNotation(pValue) then LMAnswerError pProp && "value must be a valid RGB triplet like 255,255,255 (white).",pProp -- else lock messages set the cSSSHeader["uHighlightedTextColor"] of me to pValue LMSetHilitedLinesColor the long ID of me -- end if break ----- case "uStripsColor" if not _RightColorNotation(pValue) then LMAnswerError pProp && "value must be a valid RGB triplet like 255,255,255 (white).",pProp -- else CreateFieldAlternatingColors the long ID of img "Back Pattern" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack),pValue,"255,255,255",the effective textHeight of me,10,2 -- C set the backPattern of me to the ID of img "Back Pattern" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) pass cSSSHeader end if break end switch set the hilitedLines of me to tHilitedLines LMSetHilitedLinesColor the long ID of me -- unlock screen end cSSSHeader ------------------------------------ private function _RightColorNotation pValue -- used by cSSSHeader if the number of items of pValue <> 3 then return false repeat for each item tValue in pValue if tValue is not an integer then return false if tValue > 255 then return false end repeat return true end _RightColorNotation  Ao H%Quand une ligne est slectionne, un clic gauche sur un item permet son dition et un clic droit permet de nombreuses oprationsoZ cSSSHeader uResizeType3uHeaderColumsNum5 uWIdgetName ALaiTunesuCheckBoxesReplaceChar| uCurHeader7 uNumLinestrue uFilteringtrue uTextHeight2uHighlightColor 62,127,227 uCheckBoxtrueuDefaultHeaderLabelsName First Name N Street City uStripsColor 241,245,250uColumnsDandDtrue uEditiontrueuHighlightedTextColor 255,255,255 uCurList @Name First Name N Street City ZIP Phone Ref Status Allen Jimmy 100 Broadway street Baltimore 38781 968-7544-278 451 Inactive Morgan Oliver 41 West street Las Vegas 99486 169-5976-968 447 Inactive Smith Bryan 21 Lee street Tucson 91613 194-8382-252 634 Inactive Cooper Kevin 26 College street Cleveland 81562 615-3117-191 650 Active Williams Geoffrey 83 Lakeview street Louisville 31677 681-7798-324 685 Inactive Davis Logan 81 Central street Oklahoma 39212 272-5166-877 990 Active James Paul 86 Center street Portland 66536 136-5264-574 552 Active Baker Vanessa 82 Birch street Washington 33499 247-8738-258 433 Inactive Harris James 69 Smith street Indianapolis 28599 658-6799-758 697 Active Moore Dave 42 Adams street San Jose 59668 487-7299-928 179 Inactive Lewis Harold 51 Church street Fort Worth 68579 278-1981-384 729 Inactive Martin Marvin 17 Lake street Memphis 59847 835-5356-155 326 Inactive Anderson Luke 36 Pine street Los Angeles 86738 465-8596-327 114 Inactive Morris David 50 East street Philadelphia 13498 113-8322-247 547 Inactive Clarke Sandy 86 Wilson street Chicago 29685 282-2721-673 404 Inactive Thompson Jennifer 18 Spring street Austin 21297 774-2651-145 227 Inactive Green Karen 60 Hill street Phoenix 19397 416-3259-699 911 Inactive Watson Edward 39 North street Mesa 81828 124-4778-284 989 Active Jones Georgia 96 Cedar street San Diego 33652 139-1989-938 355 Active Roberts William 2 Washington street El Paso 63533 454-4646-748 703 Active Evans John 81 Ridge street New York 74217 397-8334-542 490 Active Parker Elton 21 Elme street San Antonio 82917 212-1113-633 808 Active Edwards Bill 90 South street Fresno 96531 165-5472-839 329 Active Phillips Dorothy 2 Locust street Jacksonville 48418 842-8223-813 546 Active Lee Ronald 95 Sunset street Denver 64632 562-4515-784 265 Active Wilson Shirley 10 Taylor street Boston 11346 493-4438-492 588 Inactive Turner Douglas 14 Hillcrest street Nashville 57864 438-2594-899 429 Inactive Walker Gordon 17 Madison street Dallas 57794 613-4264-532 742 Active Brown Peter 90 Oak street Albuquerque 79219 141-1335-686 232 Inactive Scott Stephen 20 Highland street Houston 37185 248-2653-553 177 Inactive Mitchell Joey 28 Mill street Charlotte 75861 255-2638-754 876 Inactive Hall Ian 85 Green street Seattle 34461 882-7776-233 155 Active Hughes Harry 84 Twelfth street San Francisco 19493 345-2916-715 768 Active Robinson Donald 72 Main street Atlanta 93593 214-9546-394 642 Inactive Taylor Heather 68 Franklin street Detroit 88723 512-5686-681 655 Active Wright Gary 15 Sycamore street Kansas City 77263 788-2546-251 542 Active Bell Irwin 61 Jefferson street Milwaukee 47423 545-9367-869 997 Inactive Johnson Walter 45 Park street Long Beach 55165 523-9985-779 156 Active Jackson Dustin 87 View street Columbus 15936 935-7265-122 628 Active Wood Edwin 25 Maple street Sacramento 17595 257-3159-952 621 Inactive uBottomDelta90uDefaultTabStopAuto uSelectType3uCurHeaderLabelsuFont Lucida Grande uRightDelta52 uCurSort 1,,ascending uFontSize11 cREVTablecurrentvscroll0currenthscroll0currentxmouseloc37 viewablerows45currentymouseloc30scrollbarwidth16 cellyspacing16rightfieldloc748viewablecolumns10numbertabstops4 topfieldloc72 leftfieldloc268 cellxspacing1807 currentviewI

99999 Trial Version Trial Version Trial Version Trial Version Trial

02 Allen Jimmy 100 Broadway street Baltimore 38781 968-7544-278 451 Inactive

03 Morgan Oliver 41 West street Las Vegas 99486 169-5976-968 447 Inactive

04 Smith Bryan 21 Lee street Tucson 91613 194-8382-252 634 Inactive

05 Cooper Kevin 26 College street Cleveland 81562 615-3117-191 650 Active

06 Williams Geoffrey 83 Lakeview street Louisville 31677 681-7798-324 685 Inactive

07 Davis Logan 81 Central street Oklahoma 39212 272-5166-877 990 Active

08 James Paul 86 Center street Portland 66536 136-5264-574 552 Active

09 Baker Vanessa 82 Birch street Washington 33499 247-8738-258 433 Inactive

10 Trial Version Trial Version Trial Version Trial Version Trial

11 Harris James 69 Smith street Indianapolis 28599 658-6799-758 697 Active

12 Moore Dave 42 Adams street San Jose 59668 487-7299-928 179 Inactive

13 Lewis Harold 51 Church street Fort Worth 68579 278-1981-384 729 Inactive

14 Martin Marvin 17 Lake street Memphis 59847 835-5356-155 326 Inactive

15 Anderson Luke 36 Pine street Los Angeles 86738 465-8596-327 114 Inactive

16 Morris David 50 East street Philadelphia 13498 113-8322-247 547 Inactive

17 Clarke Sandy 86 Wilson street Chicago 29685 282-2721-673 404 Inactive

18 Thompson Jennifer 18 Spring street Austin 21297 774-2651-145 227 Inactive

19 Green Karen 60 Hill street Phoenix 19397 416-3259-699 911 Inactive

20 Trial Version Trial Version Trial Version Trial Version Trial

21 Watson Edward 39 North street Mesa 81828 124-4778-284 989 Active

22 Jones Georgia 96 Cedar street San Diego 33652 139-1989-938 355 Active

23 Roberts William 2 Washington street El Paso 63533 454-4646-748 703 Active

24 Evans John 81 Ridge street New York 74217 397-8334-542 490 Active

25 Parker Elton 21 Elme street San Antonio 82917 212-1113-633 808 Active

26 Edwards Bill 90 South street Fresno 96531 165-5472-839 329 Active

27 Phillips Dorothy 2 Locust street Jacksonville 48418 842-8223-813 546 Active

28 Lee Ronald 95 Sunset street Denver 64632 562-4515-784 265 Active

29 Wilson Shirley 10 Taylor street Boston 11346 493-4438-492 588 Inactive

30 Trial Version Trial Version Trial Version Trial Version Trial

31 Turner Douglas 14 Hillcrest street Nashville 57864 438-2594-899 429 Inactive

32 Walker Gordon 17 Madison street Dallas 57794 613-4264-532 742 Active

33 Brown Peter 90 Oak street Albuquerque 79219 141-1335-686 232 Inactive

34 Scott Stephen 20 Highland street Houston 37185 248-2653-553 177 Inactive

35 Mitchell Joey 28 Mill street Charlotte 75861 255-2638-754 876 Inactive

36 Hall Ian 85 Green street Seattle 34461 882-7776-233 155 Active

37 Hughes Harry 84 Twelfth street San Francisco 19493 345-2916-715 768 Active

38 Robinson Donald 72 Main street Atlanta 93593 214-9546-394 642 Inactive

39 Taylor Heather 68 Franklin street Detroit 88723 512-5686-681 655 Active

40 Trial Version Trial Version Trial Version Trial Version Trial

41 Wright Gary 15 Sycamore street Kansas City 77263 788-2546-251 542 Active

42 Bell Irwin 61 Jefferson street Milwaukee 47423 545-9367-869 997 Inactive

43 Johnson Walter 45 Park street Long Beach 55165 523-9985-779 156 Active

44 Jackson Dustin 87 View street Columbus 15936 935-7265-122 628 Active

45 Wood Edwin 25 Maple street Sacramento 17595 257-3159-952 621 Inactive

46

47

48

49

50 Trial Version Trial Version Trial Version Trial Version Trial

bottomfieldloc621 cREVGeneral scriptChecksumΌuT|'i0Q,+ handlerListmouseDown mouseUp mouseDoubleUp mouseMove resizeControl moveControl UpdateHeader AllLines scrollbarDrag arrowKey ClickedLineNo HoveredLineNo cSSSHeader[pProp] _RightColorNotationscriptSelectionchar 1226 to 1225scripteditorvscroll17 revUniqueID 1225120838316 bookmarksscripteditorselection39 tempScriptS

local sCurChar,sCurCharChunk,sClickedLineNo,sHoveredLine

---------------------------------------------

on mouseDown pButton

local tLastLineNo,tHilitedLines,tScroll,tItemNo

-----

put sClickedLineNo into tLastLineNo

put ClickedLineNo() into sClickedLineNo --

if line sClickedLineNo of me = empty then exit mouseDown

if the vScrollbar of me and the mouseH >= (the right of me - the scrollBarWidth of me) then exit mouseDown

-----

put the mouseChar into sCurChar

put the mouseCharChunk into sCurCharChunk

if pButton = 3 then

SSSRightClick the long ID of me,sClickedLineNo-- S

else

put the hilitedLines of me into tHilitedLines

lock screen

if sCurChar <> the cSSSHeader["uCheckBoxesReplaceChar"] of me then

switch the cSSSHeader["uSelectType"] of me

case 1

set the hilitedLines of me to sClickedLineNo

break

case 2

if the shiftKey is down then

set the hilitedLines of me to AllLines(sClickedLineNo,tLastLineNo) --

else

set the hilitedLines of me to sClickedLineNo

end if

break

case 3

if the shiftKey is down then

set the hilitedLines of me to the hilitedLines of me & comma & AllLines(sClickedLineNo,tLastLineNo) --

else if the commandKey is down then

set the hilitedLines of me to the hilitedLines of me & comma & sClickedLineNo

else

set the hilitedLines of me to sClickedLineNo

end if

break

end switch

if the hilitedLines of me <> tHilitedLines then

SSSSelectionChanged the long ID of me,the hilitedLines of me -- C

end if

else

put the vScroll of me into tScroll

if the imageSource of sCurCharChunk = the ID of img "Case" then

set the imageSource of sCurCharChunk to the ID of img "Case+"

else

set the imageSource of sCurCharChunk to the ID of img "CaseChecked+"

end if

set the hilitedLines of me to tHilitedLines

set the vScroll of me to tScroll

end if

SSSSetHilitedLinesColor -- S

unlock screen

end if

end mouseDown

---------------------------------------------

on mouseUp

local tStatus

-----

if line sClickedLineNo of me = empty then exit mouseUp

if sCurChar = the cSSSHeader["uCheckBoxesReplaceChar"] of me then

lock screen

if the mouseChar = sCurChar then -- mouseUp taken into account

if the imageSource of sCurCharChunk = the ID of img "Case+" then

set the imageSource of sCurCharChunk to the ID of img "CaseChecked"

put true into tStatus

else

set the imageSource of sCurCharChunk to the ID of img "Case"

put false into tStatus

end if

SSSCheckBoxChanged the long ID of me,sClickedLineNo,tStatus -- S

else -- fakes a mouseRelease

if the imageSource of sCurCharChunk = the ID of img "Case+" then

set the imageSource of sCurCharChunk to the ID of img "Case"

else

set the imageSource of sCurCharChunk to the ID of img "CaseChecked"

end if

end if

unlock screen

end if

end mouseUp

---------------------------------------------

on mouseDoubleUp

SSSMouseDoubleUp the long ID of me,sClickedLineNo -- S

end mouseDoubleUp

---------------------------------------------

on mouseMove

local tHilitedLines,tHoveredLine

-----

if the vScrollbar of me and the mouseH >= (the right of me - the scrollBarWidth of me) then exit mouseMove

if the mouse is down and the cSSSHeader["uSelectType"] of me is in "2,3" and the mouseChar <> the cSSSHeader["uCheckBoxesReplaceChar"] of me then

put the hilitedLines of me into tHilitedLines

if word 2 of the mouseline is not among the items of tHilitedLines then

put comma & word 2 of the mouseline after tHilitedLines

set the hilitedLines of me to tHilitedLines

SSSSelectionChanged the long ID of me,the hilitedLines of me -- S

end if

end if

if the hiliteColor of me = the cSSSHeader["uHighlightColor"] of me then

SSSSetHilitedLinesColor -- S

end if

-----

put HoveredLineNo() into tHoveredLine --

if tHoveredLine <> sHoveredLine then

put tHoveredLine into sHoveredLine

SSSLineHovered the long ID of me,sHoveredLine --

end if

end mouseMove

---------------------------------------------

on resizeControl

UpdateHeader --

end resizeControl

---------------------------------------------

on moveControl

UpdateHeader --

end moveControl

---------------------------------------------

private command UpdateHeader

lock messages

set the cSSSHeader["uRightDelta"] of me to the right of this cd - the right of me

set the cSSSHeader["uBottomDelta"] of me to the bottom of this cd - the bottom of me

SSSCreateHeader -- S

end UpdateHeader

---------------------------------------------

function AllLines pLineNo1,pLineNo2

local tLines

-----

if pLineNo1 < pLineNo2 then

repeat with i = pLineNo1 to pLineNo2

put i & comma after tLines

end repeat

else

repeat with i = pLineNo2 to pLineNo1

put i & comma after tLines

end repeat

end if

delete last char of tLines

return tLines

end AllLines

---------------------------------------------

on scrollbarDrag pPos

local tWidget,tRect,tLastVisibleTab,tNum

-----

if the mouseV > the bottom of me - the scrollbarWIdth of me then

lock screen

set the hscroll of grp (the short name of me) to pPos

put the long ID of grp (the short name of me) into tWidget

put SSSLastVisibleTab() into tLastVisibleTab --

repeat with i = 1 to the number of btns of tWidget

put char 7 to -1 of the short name of btn i of tWidget into tNum

if "Header" is in the short name of btn i of tWidget and tNum <> tLastVisibleTab then

set the right of btn ("HArrow" & tNum) of tWidget to the right of btn ("Header" & tNum) of tWidget

else

set the right of btn ("HArrow" & tLastVisibleTab) of tWidget to the right of tWidget

end if

end repeat

unlock screen

end if

end scrollbarDrag

---------------------------------------------

on arrowKey pDirection

local tLineNo

-----

if pDirection is among the items of "left,right" then pass arrowkey

put item 1 of the hilitedlines of me into tLineNo

-----

switch pDirection

case "down"

put min(the number of lines of the text of me, tLineNo + 1) into tLineNo

break

case "up"

put max(1, tLineNo - 1) into tLineNo

break

end switch

-----

lock screen

set the hilitedlines of me to tLineNo

SSSSetHilitedLinesColor -- S

unlock screen

end arrowKey

---------------------------------------------

function ClickedLineNo

local tVpos

-----

put item 2 of the clickLoc - the top of me into tVpos

return (tVpos - the topMargin of me + the vScroll of me) div the effective textHeight of me + 1

end ClickedLineNo

---------------------------------------------

function HoveredLineNo

local tVpos

-----

put item 2 of the mouseLoc - the top of me into tVpos

return (tVpos - the topMargin of me + the vScroll of me) div the effective textHeight of me + 1

end HoveredLineNo

------------------------------------

setProp cSSSHeader[pProp] pValue

local tHilitedLines,tHeader,tCurList,tTabStops,tNum,tNumOfColumns

-- this setProp handler triggers all ways to set any property in SSSCreateHeader: by script, the msg of in Rev properties inspector

-- note that it checks a new value before setting it

-----

-- if there is no tWidget then

-- _SSSAnswerError "You have to display a card with a widget first to change any of its properties."

-- end if

lock screen

put the hilitedLines of me into tHilitedLines

-----

switch pProp

case "uWidgetName"

if there is a fld pValue of this cd and the short name of me <> pValue then _SSSAnswerError "There is already a field" && quote & pValue & quote && "in the current card.",pProp --

else

set the name of me to pValue

set the name of grp (the short name of me) to pValue

put the long ID of me into pValue

pass cSSSHeader

end if

break

-----

case "uCurHeaderLabels"

_SSSAnswerError pProp && "is used internally and can't be set.",pProp --

break

-----

case "uDefaultHeaderLabels"

repeat with i = 1 to _RealColumnsNum() --

if the cSSSHeader["uNumLines"] of me then put line (i - 1) of pValue into tHeader

else put line i of pValue into tHeader

if tHeader = empty then put space into tHeader

set the label of btn ("Header" & i) of grp (the short name of me) to tHeader

end repeat

pass cSSSHeader

break

-----

case "uCurHeader"

case "uRightDelta"

case "uBottomDelta"

_SSSAnswerError pProp && "is used internally and can't be set.",pProp --

break

-----

case "uDefaultTabStop"

put word 1 of pValue into pValue

if not (pValue is an integer or pValue = "Auto") then

_SSSAnswerError pProp && "value must be an integer (a number of pixels) or 'Auto'.",pProp --

else

lock messages

set the cSSSHeader["uDefaultTabStop"] of me to pValue

SSSCreateHeader --

end if

break

-----

case "uCurSort"

_SSSAnswerError pProp && "can be read but can't be set.",pProp --

-----

break

case "uSelectType"

if pValue is not in "123" then

_SSSAnswerError "uSelectType value must be:" & cr & cr & "1 for selecting one line only." & cr & "2 for selecting multiple lines." & cr & "3 for selecting non contiguous lines.",pProp --

else

set the hilitedLines of me to item 1 of the hilitedLines of me

SSSSetHilitedLinesColor --

pass cSSSHeader

end if

break

-----

case "uResizeType"

if pValue is not in "0123" then

_SSSAnswerError "uSelectType value must be:" & cr & cr & "0 for no resizing." & cr & "1 for vertical resizing." & cr & "2 for horizontal resizing." & cr & "3 for vertical and horizontal resizing.",pProp --

else

lock messages

set the cSSSHeader["uResizeType"] of me to pValue

send "resizeStack" to this cd

end if

break

-----

case "uCheckBox"

case "uNumLines"

if pValue is not a boolean then

_SSSAnswerError pProp && "value must be a Boolean (true or false).",pProp --

else

put SSSExtractList() into tCurList --

lock messages

if pProp = "uCheckBox" then set the cSSSHeader["uCheckBox"] of me to pValue

else set the cSSSHeader["uNumLines"] of me to pValue

SSSPopulate tCurList --

end if

break

-----

case "uHeaderColumsNum"

if not (pValue is an integer or pValue = "Auto") then

_SSSAnswerError pProp && "value must be an integer between one (min) and ten (max) or 'Auto'.",pProp --

else

put the tabstops of me into tTabStops

if pValue is an integer then put item 1 to pValue of tTabStops into tTabStops

else

set the itemDel to tab

put the number of items of line 1 of me into tNum

if the the cSSSHeader["uNumLines"] of me then subtract 1 from tNum

set the itemdel to comma

put item 1 to tNum of tTabStops into tTabStops

put tNum into pValue

end if

repeat with i = 1 to the number of items of tTabStops

if item i tTabStops > 200 then put 100 into item i of tTabStops

end repeat

put (sum(item 1 to (pValue - 1) of tTabStops)) + 2000 into item pValue of tTabStops

repeat with i = 1 to the number of items of tTabStops

if item i tTabStops = empty then put 100 into item i of tTabStops

end repeat

set the tabstops of me to tTabStops

lock messages

set the cSSSHeader["uHeaderColumsNum"] of me to pValue

SSSCreateHeader --

end if

break

-----

case "uFont"

if pValue is not among the lines of the fontNames then

_SSSAnswerError pValue & ": unknown font name.",pProp --

else

set the textFont of me to pValue

set the textFont of grp (the short name of me) to pValue

repeat with i = 1 to (the number of btns of grp (the short name of me) / 2)

set the uAdjust of btn ("Header" & i) of grp (the short name of me) to false

end repeat

pass cSSSHeader

end if

break

-----

case "uColumnsDandD"

if pValue is not a boolean then

_SSSAnswerError pProp && "value must be a Boolean (true or false).",pProp --

else

pass cSSSHeader

end if

break

-----

case "uFontSize"

if pValue is not an integer then

_SSSAnswerError pProp && "value must be an integer.",pProp --

else

set the textSize of me to pValue

set the textSize of grp (the short name of me) to min (13,pValue)

CreateFieldAlternatingColors the long ID of img "Back Pattern",the cSSSHeader["uStripsColor"] of me,"255,255,255",the textHeight of me,10,2 -- C

set the backPattern of me to the ID of img "Back Pattern"

repeat with i = 1 to (the number of btns of grp (the short name of me) / 2)

set the uAdjust of btn ("Header" & i) of grp (the short name of me) to false

end repeat

-- set the cSSSHeader["uTextHeight"] of me to the cSSSHeader["uTextHeight"] of me

switch the cSSSHeader["uTextHeight"] of me

case 1

set the fixedLineHeight of me to false

case 2

set the fixedLineHeight of me to true

set the textHeight of me to 16

end switch

pass cSSSHeader

end if

break

------

case "uTextHeight"

if pValue is not an integer then

_SSSAnswerError pProp && "value must be an integer.",pProp --

else

if pValue = 2 then

set the fixedLineHeight of me to true

set the textHeight of me to 16

else

set the fixedLineHeight of me to false

end if

CreateFieldAlternatingColors the long ID of img "Back Pattern",the cSSSHeader["uStripsColor"] of me,"255,255,255",the effective textHeight of me,10,2 -- C

set the backPattern of me to the ID of img "Back Pattern"

pass cSSSHeader

end if

break

-----

case "uCheckBoxesReplaceChar"

if the number of chars of pValue <> 1 then _SSSAnswerError pProp && "value must be a single char.",pProp --

else

lock messages

set the cSSSHeader["uCheckBoxesReplaceChar"] of me to pValue

SSSCreateHeader --

end if

break

-----

case "uHighlightColor"

if not _RightColorNotation(pValue) then _SSSAnswerError pProp && "value must be a valid RGB triplet like 255,255,255 (white).",pProp --

else

set the hiliteColor of me to pValue

pass cSSSHeader

end if

break

-----

case "uHighlightedTextColor"

if not _RightColorNotation(pValue) then _SSSAnswerError pProp && "value must be a valid RGB triplet like 255,255,255 (white).",pProp --

else

lock messages

set the cSSSHeader["uHighlightedTextColor"] of me to pValue

SSSSetHilitedLinesColor --

end if

break

-----

case "uStripsColor"

if not _RightColorNotation(pValue) then _SSSAnswerError pProp && "value must be a valid RGB triplet like 255,255,255 (white).",pProp --

else

CreateFieldAlternatingColors the long ID of img "Back Pattern",pValue,"255,255,255",the textHeight of me,10,2 -- C

set the backPattern of me to the ID of img "Back Pattern"

pass cSSSHeader

end if

break

end switch

set the hilitedLines of me to tHilitedLines

SSSSetHilitedLinesColor --

unlock screen

end cSSSHeader

------------------------------------

private function _RightColorNotation pValue

if the number of items of pValue <> 3 then return false

repeat for each item tValue in pValue

if tValue is not an integer then return false

if tValue > 255 then return false

end repeat

return true

end _RightColorNotation

prevHandler mouseDownscript cSSSMenusfrCopier la slection Tout slectionner,Tout dslectionner Insrer une ligne avant Insrer une ligne aprs Supprimer la ligne slectionne,Supprimer les lignes slectionnes tes-vous sr de vouloir supprimer cette ligne ? tes-vous sr de vouloir supprimer ces lignes ? Supprimer Annuleres5Copiar la seleccin Seleccionarlo todo,Deseleccionarlo todo Insertar una lnea delantera Insertar una lnea despus de Suprimir la lnea seleccionada,Suprimir las lneas seleccionadas Est seguro que quiere borrar la lnea seleccionada? Est seguro que quiere borrar las lneas seleccionadas? Borrar CancelardeAuswahl kopieren Alles auszuwhlen,Alles aufzuwhlen Zeile davor einfgen Zeile danach einfgen Ausgewhlte Linie abschaffen,Ausgewhlte Zeilen lschen Sind Sie sicher, diese Linie abschaffen zu wollen? Sind Sie sicher, diese Linien abschaffen zu wollen? Abschaffen AnnullierenenCopy the selection Select all,Deselect all Insert line before Insert line after Delete selected line,Delete selected lines Are you sure you want to delete this line? Are you sure you want to delete these lines? Delete CancelptCopiar a seleco Seleccion-lo todo,Deseleccion-lo todo Inserir uma linha ante Inserir uma linha aps Suprimir a linha seleccionada,Suprimir as linhas seleccionadas So certos querer suprimir esta linha? So certos querer suprimir estas linhas? Suprimir AnularitCopiare la selezione Tutto scegliere,Tutto descegliere Inserire una linea anteriore Inserire una linea dopo Eliminare la linea scelta,Eliminare le linee scelte Siete sicuri di volere eliminare questa linea? Siete sicuri di volere eliminare queste linee? Eliminare Annullare cSSSTooltipsesCuando se selecciona una lnea, un chasquido izquierdo sobre el edicin item permite su y un chasquido derecho permite numerosas operacionesfrQuand une ligne est slectionne, un clic gauche sur un item permet son dition et un clic droit permet de nombreuses oprationsdeWenn eine Linie ausgewhlt wird, erlaubt ein linkes Klicken auf einem Item seine Ausgabe, und ein gerades Klicken erlaubt zahlreiche OperationenenfWhen a line is selected, a left click allows editing any item and a right click allows many operationsptQuando uma linha seleccionada, um clique esquerdo sobre edio item permite a sua e um clique direito permite numerosas operaesit|Quando una linea scelta, un clic sinistro su item permette la sua edizione ed un clic diritto permette numerose operazioni E01 | Trial Version Trial Version Trial Version Trial Version Trial  @60001 @ Q02 | Allen Jimmy 100 Broadway street Baltimore 38781 968-7544-278 451 Inactive  @60001 L N03 | Morgan Oliver 41 West street Las Vegas 99486 169-5976-968 447 Inactive  @60001 I H04 | Smith Bryan 21 Lee street Tucson 91613 194-8382-252 634 Inactive  @60001 C N05 | Cooper Kevin 26 College street Cleveland 81562 615-3117-191 650 Active  @60001 I W06 | Williams Geoffrey 83 Lakeview street Louisville 31677 681-7798-324 685 Inactive  @60001 R L07 | Davis Logan 81 Central street Oklahoma 39212 272-5166-877 990 Active  @60001 G J08 | James Paul 86 Center street Portland 66536 136-5264-574 552 Active  @60001 E P09 | Baker Vanessa 82 Birch street Washington 33499 247-8738-258 433 Inactive  @60001 K E10 | Trial Version Trial Version Trial Version Trial Version Trial  @60001 @ O11 | Harris James 69 Smith street Indianapolis 28599 658-6799-758 697 Active  @60001 J K12 | Moore Dave 42 Adams street San Jose 59668 487-7299-928 179 Inactive  @60001 F P13 | Lewis Harold 51 Church street Fort Worth 68579 278-1981-384 729 Inactive  @60001 K L14 | Martin Marvin 17 Lake street Memphis 59847 835-5356-155 326 Inactive  @60001 G P15 | Anderson Luke 36 Pine street Los Angeles 86738 465-8596-327 114 Inactive  @60001 K P16 | Morris David 50 East street Philadelphia 13498 113-8322-247 547 Inactive  @60001 K M17 | Clarke Sandy 86 Wilson street Chicago 29685 282-2721-673 404 Inactive  @60001 H Q18 | Thompson Jennifer 18 Spring street Austin 21297 774-2651-145 227 Inactive  @60001 L J19 | Green Karen 60 Hill street Phoenix 19397 416-3259-699 911 Inactive  @60001 E E20 | Trial Version Trial Version Trial Version Trial Version Trial  @60001 @ H21 | Watson Edward 39 North street Mesa 81828 124-4778-284 989 Active  @60001 C M22 | Jones Georgia 96 Cedar street San Diego 33652 139-1989-938 355 Active  @60001 H Q23 | Roberts William 2 Washington street El Paso 63533 454-4646-748 703 Active  @60001 L I24 | Evans John 81 Ridge street New York 74217 397-8334-542 490 Active  @60001 D M25 | Parker Elton 21 Elme street San Antonio 82917 212-1113-633 808 Active  @60001 H I26 | Edwards Bill 90 South street Fresno 96531 165-5472-839 329 Active  @60001 D S27 | Phillips Dorothy 2 Locust street Jacksonville 48418 842-8223-813 546 Active  @60001 N H28 | Lee Ronald 95 Sunset street Denver 64632 562-4515-784 265 Active  @60001 C N29 | Wilson Shirley 10 Taylor street Boston 11346 493-4438-492 588 Inactive  @60001 I E30 | Trial Version Trial Version Trial Version Trial Version Trial  @60001 @ T31 | Turner Douglas 14 Hillcrest street Nashville 57864 438-2594-899 429 Inactive  @60001 O L32 | Walker Gordon 17 Madison street Dallas 57794 613-4264-532 742 Active  @60001 G M33 | Brown Peter 90 Oak street Albuquerque 79219 141-1335-686 232 Inactive  @60001 H P34 | Scott Stephen 20 Highland street Houston 37185 248-2653-553 177 Inactive  @60001 K N35 | Mitchell Joey 28 Mill street Charlotte 75861 255-2638-754 876 Inactive  @60001 I F36 | Hall Ian 85 Green street Seattle 34461 882-7776-233 155 Active  @60001 A R37 | Hughes Harry 84 Twelfth street San Francisco 19493 345-2916-715 768 Active  @60001 M N38 | Robinson Donald 72 Main street Atlanta 93593 214-9546-394 642 Inactive  @60001 I O39 | Taylor Heather 68 Franklin street Detroit 88723 512-5686-681 655 Active  @60001 J E40 | Trial Version Trial Version Trial Version Trial Version Trial  @60001 @ P41 | Wright Gary 15 Sycamore street Kansas City 77263 788-2546-251 542 Active  @60001 K P42 | Bell Irwin 61 Jefferson street Milwaukee 47423 545-9367-869 997 Inactive  @60001 K N43 | Johnson Walter 45 Park street Long Beach 55165 523-9985-779 156 Active  @60001 I L44 | Jackson Dustin 87 View street Columbus 15936 935-7265-122 628 Active  @60001 G M45 | Wood Edwin 25 Maple street Sacramento 17595 257-3159-952 621 Inactive  @60001 Hp! `I#  Label Field >D cREVTable currentviewNFor more information display tooltips and see Installation pane documentation. cREVGeneral revUniqueID 1227353245010 OFor more information display tooltips and see Installation pane documentation. Prompt Won mouseEnter put the tooltip of me && "are displayed here" into me end mouseEnter  uMessages sent by the widgety cREVGeneral revUniqueID 1227524787457scripteditorvscroll0scripteditorselection63 Printi-a cREVGeneral revUniqueID 1227779257042`Printexon mouseUp set the printPaperOrientation to "landscape" revPrintText the htmlText of fld "Info",,,the long id of fld "Info" end mouseUp --------------------------- on mouseEnter switch the menuHistory of btn "Tabs" case 2 set the tooltip of me to "Presentation section: 4 pages" break case 3 set the tooltip of me to "Intallation section: 19 pages" break case 4 set the tooltip of me to "Syntax section: 34 pages" break case 5 set the tooltip of me to "FAQ section: 9 pages" break case 6 set the tooltip of me to "History section: 3 pages" break default set the tooltip of me to empty end switch end mouseEnter RHistory section: 3 pages Print... cREVGeneral scriptChecksum] 5Xt+( handlerListmouseUpscriptSelection char 91 to 90scripteditorvscroll0 revUniqueID 1226736735445 bookmarksscripteditorselection472 tempScript prevHandlermouseUpscript

on mouseUp

revPrintField the name of field (the hilitedText of btn tabs)

end mouseUp

wSearchexlocal sSearchString,sFoundChunk ---------------------------------- on mouseUp local tResult ----- if IsMC() then ask info "Search ListMagic docs for:" & cr & cr & "If you want to search a specific section, display this section before calling this dialog." with sSearchString as sheet else ask info "

Search ListMagic docs for:

If you want to search a specific section, display this section before calling this dialog.

" with sSearchString as sheet put it into tResult ----- if tResult = empty or the result = "Cancel" then put empty into sSearchString exit mouseUp else find tResult in fld "Info" if the result <> empty then beep else put tResult into sSearchString put the foundChunk into sFoundChunk set the backColor of the foundChunk to "yellow" find empty unlock screen send "Deselect" to me in 100 milliseconds end if end if end mouseUp --------------------------- on Deselect lock screen do "set the backColor of" && sFoundChunk && "to empty" unlock screen with visual "dissolve very slow" end Deselect 1R.Click here to find anything in ListMagic docs Search... cREVGeneral scriptChecksum] 5Xt+( handlerListmouseUpscriptSelection char 91 to 90 bookmarks revUniqueID 1228933621556scripteditorvscroll0scripteditorselection264 prevHandlermouseUp tempScriptscript

on mouseUp

revPrintField the name of field (the hilitedText of btn tabs)

end mouseUp

Actions u5on menuPick local tWidget,tWidgets,tButtons,tPrompt,tAnswer,tResult ----- put the CSSSHeader["uLMWidgets"] of this cd into tWidgets if the number of lines of tWidgets > 1 then repeat with i = 1 to the number of lines of tWidgets put quote & line i of tWidgets & quote && "or" & space after tButtons end repeat put "Cancel" after tButtons get empty put "

On which widget do you want to act:

" into tPrompt do "answer info tPrompt with" && tButtons && "as sheet" if it = "Cancel" then exit menuPick else put the long ID of fld it into tWidget else put the long ID of fld tWidgets into tWidget end if ----- switch the menuHistory of me case 1 LMFindNext -- lib break case 2 LMPrint ,tWidget -- lib break case 3 put LMExport(,,,tWidget) into tResult -- lib if tResult <> "cancel" then answer info "Data have been saved in" && tResult & "." as sheet send "resumeStack" to me -- end if break case 5 if the short name of this stack = "ListMagic" then if the platform = "MacOS" then LMPopulate isoToMac(the uRefList of cd "Action"),tWidget -- else LMPopulate the uRefList of cd "Action",tWidget -- send "SetLastClickedLineNo" to tWidget else answer error "

you have to modify the script of this menu button when you copy paste it in another stack than ListMagic.

" end if end switch end menuPick LWThe widget provides ways to find data, print or export to a file current data: try it!Actions2Find... Print... Export to file... - Refresh list  cREVGeneralscripteditorvscroll78 revUniqueID 1227883658454scripteditorselection1333 QInstallepon mouseUp local tCardLongName,tCurWidgets,tPrompt,tMenu ----- if the mode of this stack < 3 then modeless this stack if the short name of the topStack is the short name of this stack or char 1 to 3 of the short name of the topStack = "rev" or the short name of the topStack = "Home" then if IsMC() then put "Could not find an editable stack where to install ListMagic." & cr & cr & "Bring up an editable stack where you want to install ListMagic into and display the right card first." into tPrompt else put "

Could not find an editable stack where to install ListMagic.

Bring up an editable stack where you want to install ListMagic into and display the right card first.

" into tPrompt answer error tPrompt as sheet -- exit mouseUp else if the password of the topStack <> empty then if IsMC() then put "Current top stack (" & the short name of the topStack & ") is password protected." & cr & cr & "Bring up an editable stack where you want to install ListMagic into and display the right card first." into tPrompt put "

Current top stack (" & the short name of the topStack & ") is password protected.

Bring up an editable stack where you want to install ListMagic into and display the right card first.

" into tPrompt answer error tPrompt as sheet -- exit mouseUp end if ----- put the long name of this cd of the topStack into tCardLongName put the CSSSHeader["uLMWidgets"] of tCardLongName into tCurWidgets put "Install new widget" into tMenu repeat for each line tWidget in tCurWidgets put cr & "Modify" && quote & tWidget & quote && "widget" after tMenu end repeat put tMenu into btn "Process" of stack "SSSLMInstall" set the menuHistory of btn "Process" of stack "SSSLMInstall" to 1 put "In" && the short name of tCardLongName && "of stack" && quote & the short name of the topstack & quote into fld "Dest" of stack "SSSLMInstall" InstallList tCardLongName -- end mouseUp ------------------------------ on InstallList pLongCardName set the uDest of stack "SSSLMInstall" to pLongCardName set the style of stack "SSSLMInstall" to "modeless" go stack "SSSLMInstall" end InstallList "sInstall or modify a widget cREVGeneral revUniqueID 1227958341834scripteditorvscroll0scripteditorselection294 vBuyep5on mouseUp modeless stack "SSSLMBuy" end mouseUp "senabedtrueBuy ListMagic! cREVGeneral revUniqueID 1227962444708scripteditorvscroll0scripteditorselection10 LMBox xElocal sLeft,sWidth --------------------------------- on enterInField UpdateList true -- end enterInField --------------------------------- on openField local tWIdget,tLastVisibleTab,tNum ----- put the left of me into sLeft put the long ID of fld (the uCurWidget of me) into tWidget put the width of tWidget into sWidth if the vScrollBar of tWidget then subtract the scrollBarWidth of tWidget from sWidth ----- put the long ID of grp (the uCurWidget of me) into tWidget put LMLastVisibleTab(the long ID of fld (the uCurWidget of me)) into tLastVisibleTab -- lib put LMLastVisibleTab(tWidget) into tLastVisibleTab -- lib repeat with i = 1 to the number of btns of tWidget put char 7 to -1 of the short name of btn i of tWidget into tNum if "Header" is in the short name of btn i of tWidget and tNum <> tLastVisibleTab then set the right of btn ("HArrow" & tNum) of tWidget to the right of btn ("Header" & tNum) of tWidget else set the right of btn ("HArrow" & tLastVisibleTab) of tWidget to the right of tWidget end if end repeat end openField --------------------------------- on tabKey local tWidget,tNextItem,tColumnsNum ----- lock screen UpdateList false -- put the long ID of fld (the uCurWidget of me) into tWidget if the shiftKey is down then put the uCurItem of me - 1 into tNextItem if (the CSSSHeader["uNumLines"] of tWidget and tNextItem = 1) or tNextItem = 0 then if not the hScrollbar of tWidget then set the hScroll of tWidget to 0 set the hScroll of grp (the short name of tWidget) to 0 unlock screen end if exit tabKey end if else put the uCurItem of me + 1 into tNextItem if tNextItem > (the number of btns of grp (the short name of tWidget) / 2) then if not the hScrollbar of tWidget then set the hScroll of tWidget to 0 set the hScroll of grp (the short name of tWidget) to 0 unlock screen end if exit tabKey end if end if LMEditField ,ClickedLineNo(tWidget),EffectiveClickedLineNo(tWidget),tNextItem,tWidget -- lib unlock screen end tabKey --------------------------------- on returnInField local tLoc,tWidget,tReverseOrderFlag,tScroll ----- lock screen UpdateList true -- put the long ID of fld (the uCurWidget of me) into tWidget put the shiftKey is down into tReverseOrderFlag ----- if not (((word 2 of the clickLine = the number of lines of the text of tWidget) and not tReverseOrderFlag) or (word 2 of the clickLine = 1 and tReverseOrderFlag)) then put the scroll of tWidget into tScroll put the loc of me into tLoc if tReverseOrderFlag then set the uCurLine of me to the uCurLine of me - 1 LMSetHilitedLines the uCurLine of me,tWidget -- lib else set the uCurLine of me to the uCurLine of me + 1 LMSetHilitedLines the uCurLine of me,tWidget -- lib end if ----- if the scroll of tWidget = tScroll then if tReverseOrderFlag then subtract the textHeight of fld (the uCurWidget of me) from item 2 of tLoc else add the textHeight of fld (the uCurWidget of me) to item 2 of tLoc end if ----- lock messages click at tLoc send "SetLastClickedLineNo" && the uCurLine of me to tWidget-- LMEditField "a",ClickedLineNo(tWidget),EffectiveClickedLineNo(tWidget),,tWidget -- lib end if unlock screen end returnInField --------------------------------- on rawKeyUp local tWidget,tMaxWidth,tWidth,tRight ----- lock screen put the uCurWidget of me into tWidget set the width of me to min(the formattedWidth of me,sWidth) set the left of me to sLeft put the right of fld tWidget into tRight if the vScrollBar of fld tWidget then subtract the scrollBarWidth of fld tWidget from tRight if the right of me > tRight then set the right of me to tRight if the left of me < the left of fld tWidget then set the width of me to the width of fld tWidget set the left of me to the left of fld tWidget end if unlock screen pass rawKeyUp end rawKeyUp --------------------------------- on commandKeyDown pKey if pKey = "V" then put line 1 of the clipboardData["text"] into me else pass commandKeyDown end commandKeyDown --------------------------------- private command UpdateList pSortFlag local tText,tWidget,tHiliteLines,tItem,tLineNo,tID,tCurList,tNum ----- lock messages put the uCurText of me into tText lock screen put the uCurWidget of me into tWidget if the text of me <> tText and the text of me <> empty then put the hilitedLines of fld tWidget into tHiliteLines put the uCurItem of me into tItem put the uCurLine of me into tLineNo set the itemDel to tab if the uCheckBox of me then put the imageSource of char 1 of item tItem of line tLineNo of fld tWidget into tID put the cSSSHeader["uCheckBoxesReplaceChar"] of fld tWidget & " " & the text of me into item tItem of line tLineNo of fld tWidget set the imageSource of char 1 of item tItem of line tLineNo of fld tWidget to tID else put the text of me into item tItem of line tLineNo of fld tWidget end if set the hilitedLines of fld tWidget to tHiliteLines if the cSSSHeader["uNumLines"] of fld tWidget then subtract 1 from tItem put the cSSSHeader["uCurList"] of fld tWidget into tCurList put the text of me into item tItem of line (tLineNo + 1) of tCurList set the textStyle of char 1 to -1 of line tLineNo of fld tWidget to "plain" set the cSSSHeader["uCurList"] of fld tWidget to tCurList set the itemDel to comma if item 1 of the cSSSHeader["uCurSort"] of fld tWidget = tItem then if pSortFlag then LMSetSort tItem,item 3 of the cSSSHeader["uCurSort"] of fld tWidget,the long ID of fld tWidget -- lib else if the cSSSHeader["uNumLines"] of fld tWidget then put tItem + 1 into tNum else put tItem into tNum set the backPattern of btn ("Header" & tNum) of grp (the short name of fld tWidget) to the ID of img "Header" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) set the icon of btn ("HArrow" & tNum) of grp (the short name of fld tWidget) to the ID of img "Arrow" of stack (the CSSSHeader["uLibName"] of stack the mainstack of this stack) end if end if ----- if the cSSSHeader["uDefaultTabstop"] of fld tWidget = "Auto" then LMAdjustColumn "Auto",tItem,the long ID of fld tWidget -- lib end if ----- try -- in the case this message is not handled higher in the message hierarchy LMListEdited the long ID of me,tItem,tLineNo,tText,the text of me -- sent to current card catch tErr end try end if set the hiliteColor of fld tWidget to the CSSSHeader["uHighlightColor"] of fld tWidget set the hScroll of grp tWidget to (the uHScroll of me) set the hScroll of fld tWidget to (the uHScroll of me) hide me unlock screen end UpdateList @~/ uCurWidget ALaiTunes uCurTextLogan uCheckBoxfalse uHScroll0 uCurItem3 uCurLine7 cREVGeneral revUniqueID 1228988303198scripteditorvscroll273scripteditorselection3714  Logan6LMGenericFilterion rawKeyUp pKey local tColumnNo ----- if pKey is in "65421,65293" then exit rawKeyUp put char (the number of chars of the uSource of me + 7) to -1 of the short name of the target into tColumnNo LMFilterList tColumnNo ,the text of the target,the long ID of fld (the uSource of me) -- lib end rawKeyUp ------------------------------- on enterInField end enterInField ------------------------------- on returnInField end returnInField  cREVGeneral revUniqueID 1229072969553scripteditorvscroll0scripteditorselection429e Install1.jpg @,=JFIFddDucky2Adobed         #"""#''''''''''     !! !!''''''''''," !1A"Q2aRr#qTBSUb3$4DtCcs%E&!1QAaq"2BRb# ?ͼ8l^Ȭz̘,WJFB(MuþۊM#TP$IMv} ¦ SՌ8n925ccrG-YrZGR*dVkt̂,ȍ̚5#d*ymW#|||,WXq|#mL^wnZVʾ쿱#bS):h^#p}5՟~X'%, 4OKXk՟~OV~b4?/ch V~=Y5_DĿ6Y5C}26ݛ3pk͎#`3.*#o_(u.S94Mýr1_|A.+'ŋ*;,*!w-̊ŹIF ;|Ys͊)6LY^$6}D&/njf'>k2Oʟ  y%A1w:Z^!ѵvn5?2q66Ym)u}:u4 os_LNrFia:c$'UV]r\pJ|4pזּX$>,\|^ZY2"QrnbWCe.$m,zXJVi`ycǕh3E(> &i$˂|46eަȊ<_$+Owzmco V9Ŗŋa8F7]ZRϐN\'_He$_5eGǘҟ l/>: k$OޙPI22N6FF$H|h"L H%Bxf^ 2a2L9a"CC!FVs^`$˂|57|4ǫ?|f?/ci_^zkDĿᦉ@mzi?Y]?'%, ?Y?|ftOKXh4׫?|f?/ci_^SanZ_~v?:PI"DI[J/2}v?_ԓU/"nm(HaEt[u5jkx@OO/dk,w>bSèȨL#~pF۔E975x`~O7ej9"q<=2'xz 3zI$PT] e)h&; T4l.,n?7'"RU 7ei!~Ok1xСt*f_RJii5{5 PM:Ɵowo_j~߹᧬~LӾ4N>rmۓ_jriY)(s`oԱȒ&ԍȏ~ߏnCt偝4`5nu{xG4CZRâ9q~&D 4(ydv{n')ҵ>_ W;{6$]a UIdYTm\͛|Yl@fpYxV W<O_F߷_a ks1zy N9sZe-;V=08 32f /n\o#V~p8u=[^՚+\R<(Jt"O>\VөCieu )Ԭ/]al~T,141Ēȱh}`q:j 7nňV /B^2ANh)$ ?Acw'A4lNPOmFai^%h,W( xP ߨe6H30]XfZYtUo}v$Ƥ0V8U}LgI0f\|I2h:Rm{B;.!m eqqGi TYlQmS?p[j?ToAH6\5e0]6熅{BeڧX?[\Oz_q,g icmnbHڸ={"O/_~c`20ٷ?nONnfT1#KDgIe-$*"sNHw.|Y G+zREʷGr%k ֵN갯n;^ۋ&RdFQi:$HYF mb|k}qluH2ɐ<"ϩŸ vLy!f!hٸ3!9~R}p>r^k#g·#u)4փ //L \Uͧ#& Iı*I@&#um@&^.b̻W7Owasn{ł.7i +3#ػB@MM#XbEv6{p{m@lϏf,3+90]А$pe}5PJedJN$ g7՛2Tw8eрXKՅXE#4qJ.G:ROx}4IY,GIdFr9^>}fWƏb,Jb7M!y@ns͏#:Zڍqj&S ҌyA?D͚=:oƒBVfƍ ]Tز8j5 e?]|3HJ5)P]4@$l{,} M P:D@P{[8?€#9_=pLcv0G $*&8Md¯gX+,8L&8q f5A'V>]TYr ^- ԓR=g7j̃~@KNx # Ҝ8b>@x|ܼ-nSdBwTliUKDN%P-^} mT$ƾ&̂T2en<+|܇Ɍ$'Th&:UO/?WLq28PIWtTlMή^?ؖ%/:#9{d|8Vǒ̦̯O`M>wM)%vơY"VU"ҋ7ja(\h"\m8-l8X}ogWS*P^ddI2C>[ʠ_V0cT;ۆҦCHCHؠ2[H_|υO۶c!(ѕHAI/ 7vQp1ª*]:L9xp3͕$v̹ "ppx{MoL&<2$N$Xd,daM:>bMjoŐ)‡QEQVS BTtPwɃ>.^QLk/MHA)P G2:-kc$B|gj-t ¬ɇ1vL2X#Iqǀq6OX@RnR3+et*LhTot8I40O,8ܺZ@x .ñ"m/N'"T -յ^\hIFt#F e32-r@J<DžUxgqu升T*-n5~=kƍ܂ $ /4MjQ"EXia~"4= p%q$fa Y6x3ҜTـ[ƊC,0G4(WT)@)JxPΔ<@E?}X`C.D `d u? c$x,aə$LbtGƮ]xrRJ⟋3{:'h[˞ll+#&@ "b$.6+m<1=X'"FIkw*w2up3vh"\hu 9-TTIH}+ț"Ey ,δ$INLPz}.X9<@RWp{7|1 qiFN-PYw/f.RClt0q?fPUYÈ]n},:i2u@AԪ?G+vsn>SmѾ\O.+Gtj&6`WHV+2<g\3zQ#4Qթ+{+7'uر#y8A&'ikҧ^@ڜʻ7m.>Nt<Bj*Em۴FФ#'BBJcbI#s]6Gi y6L{\CEFԣH< s~G̞Y.#TE,=*B.MT!;rlQ U_Ighc#VKo>xflH$2̊;1P7&*nC$MU&Dh <}w3v<.^@h%$1ԱGv{UF{MvfiLSxcUs,<È)s;^uplhOņiWz%lSok\{Dnz xR:POa??nĎmg"Ti6~*}kOaPE C6KV55로ocalwKVӃ$i %EϧW.H2wD28}Yۤ1ZW2[L'yڦٷ< uÇ&6:i9<#-1ȁ!H|ły+9ċ/0m C*d4qdu<` 1(2_|AňGy"֌ꡱ):šM!QK35k7q@T 'VUc"sr @Ʃb?q6z y$Dk$IyȸƽxˁY8n Q 8x\uOu wvwKvrU)=n1Y YZ<%R4'ImgC}+l :usz av@$ #0QY,7Ԡ+Ii%%B=Hhߥ8ע8]3&LP4qz1XeՖ~xsBYpIgc_6onҜ+ ^L{`\D,hYʴ>Hcvś9ScW8ע#F#iW%.4e]&#_CsʅpPF@@Po{jwz `I"Cs+G,c t9%՗]bCNA40jHuX05cJ @uSk\vU?}߁IHyI^Ẇv33'ȖN0Qit_r1C}6 U+>y#m;M$Y1q17Wq9+ pDY[yD[iޥpȝ\.6b 22'MU BP;t xЅ1MՓͬ@851frk~ĘC&8#HQB Gq`_W53 Zklmm”6co6>cw 8["~ٺWpp11}s"@+yIEKp$aT:XxWu`! |VgrX:c@I.32rCx<"ueVhGʊCc')XLzsqeH2!سDsKFE@"\s #tDj[08ǓFܙicS2 fJUPxE^s+&|J˾z$,W")(\xսL}W0'P0uiLGPk6WVu&CFU AdFIKې1lrޏ*AY݆*Y"3#D"d ?J$ PEBbxT9urH8 rI:0 4>d8X<03**iva D8Z{1ff_OB }^fVfte ċoxڃxWw\>DF"ըXcnRT-Sq(Wi&\z,sΨZf*6k{B1Q- Mb)@:P~1߷lmrr7Zp*#HryV~1re+mt >6鼩֥/! Z,\Pf `5~7_lQ5M1Hb5] i˗73DOKs:.Ҕ}ǐ4urAū=g je.͠X".k(O圩ll "?.GQXͅ2ǐ#x!dk@FlC#Ca>#kt[QX4@&ݽM+î`"n368k˹A ?,ɽ Pn},X[l|>0>>ߗ xٯ3z7X2MWG5;ch"T푓 R2㦡,>EFz`YL|1$ʸ^DA$fm.IT<" L8w?mIJ"\9H׍UajnF8}2|u7n`$I̻o>>:͑瑏 0#;'* P5m. a>gܾ?fOc;ϏJ]<HMW]Vך\W-/XЋkwa !x`0go0U{p=gKȟ'+ F *)3~ru~vug=l*hTu+k-z%:"6ƾRPاqVG3粗HM"+xĀl[mɒ12 Yh MnR2"- '&+OrHRFMKT0)$eQ q5>GiT+mc̓&[FË XИLk3YraZԠ<ޑƚIbi.mC*Λ]ϥ.c ?N8ש;FcVVqT_Ƶ@yzK yHtdc[[9tX"Ʀ/RG#Xmxqf\dFԱyysbFerGY\D`ܼ׷ JP R)@)JxPΔ<@E?}ەt!NxEE?}2Ƞ>y&pb`u#( fNj||+>S *|l3Tpar^B Um׈jb9Ds7\letf_"sO/WqmȲŌ"FH>ѨbO+ED\i7]#n?y*/EjA?`cQF5|nus6W#ҬUaD䖔L)@)JP R)@)JP R)@)JP xR:POakc5+ p&É~cg?qG;fFzAɤ$i< lRepAT Qނ'EH27L[KrmVۛb"C!%DD`ydAaӓ}:L )Z$V+CAn4M,ICeI㩡e_"L%N.z<[ı<9V~ۛϝ&(U(} FڗIZݳr(kbĽBJeaU%UWlXqcm{\0.48,bKHoŷW_ܥCit% 2R Κky=}k )iv0Q,Xy8֔3 Ă9q&VF$n 7=,}wHѤ"ǀs&HA$[~KU.=eH69u?̟69^?zW.dD+\g.].@UxJRR<(Jt"O>Q & sROaf܌8[j#V8\ٔ\Oz{߭k[{ԙ;xÑ6Tm4덚SF!- OS~nx^o}vD%#Y@GzfIf9pn ߮c?sx۶%HL92 v;0rl ;wO*m+|q=FJXLj+zW>ϗNȑd$3u m2`kFGaoo>UV+ݸ4(I?I\f  gs!ѽ+leyf`fJ{DWm"8[Wbس< rVwGwmf7sX?'ٿqqOḿ5; o:L]P3Pa_cE"n*jJRR<(Jt"O>Qt%HLKCj{bmÍK?}eabf37) \9 m;ٽMtFr=Vm1)6ݓr0T)4i+LDIKJ9r=0zx$Ua9FHc: P_5>SOk׭8_};F,Vh-pl/Íg>.,xvie\ҿUXf^H+ W;^#<2" ʙOxR^Sr@[O oW nx}u啝Vn凴Yw61S9Rd dPRIbr͕|\'+GtP&C[<4~QVooβ2yL>g}Q!5"a`eGIBѣ L5?cy{vN[۟̀>"Y5<tGz;q}4!/S+ͣU1leecLk#"Q;ܺDζ7rЃ~Y[tP.>4"njd)Ԅڵ`_Vs֕jܪaTg|UF*EE)JJRRfƑIh $os^UxKqM'&2dXiFf+ '{y@|j{U"9$WO&&fJSYI'BoM&5*`IKX6o _ݷqܰǍV%FKo <&YJk3dޞU m'FnIjWw:kD^ڏ :]Qicm~ 鮿m9\5/ZJ!ËzinҰsn++p.M ZV&,rcj9mLyix9㾍~'T*f)JJRS”(yҀD.b0#o $Դ8{G]Ҁ{GKM]wJM]-7}u(-7}tt#))c54(rı!Wt()JJRU ݱ3&*B5T\һ[Zj~G-UeI3%v8V2FիR7G #sζ)Z{cl1F^R6H܋Ǵ@kVyr=g>abƴTԺ"doE8ZygX1/u;#bDKի`}NֵoԥkZP)JWR)@}65)@8S)@8S)@8S)@8S)@8S)@8S)@8S)@8S)@8S)@8S)@8S)@8S)@8S)@8S)@8S)@8S)@8S)@8WƔ? cREVGeneral revUniqueID 1229105581923e Install2.jpg @,:JFIFddDucky2Adobed         #"""#''''''''''     !! !!'''''''''',"!1"AQ2aRr#qBTU3S$b4ԕsD%E!1AQaq"S2bBRc ?ﻟypgٶ͍Y=9Y@Tq*r(M ˷}7 1ʛFQBN%5EM$ 4})H:$'[Ḟzʈ9HYQ#TPPrZGI/%QbrztcyE9Fu %Ory27ܢ(1u1tuq -qµr;/HDZ)ӔFvGEQxr>͟~T'V?'V?gퟬ͟~T'V?'V?gퟬ͟~T'V?'V?gퟬֆdm6fכF8f]-*#o?/5ꌔ:)XSp\71b7Kqbʎ 2H]ƾ@s")!o.w9E3F +đ/܅-VL$'MyI :@ (v IX+q/Q#mH퐃Ӭ1%ES{$fo2LqB}5[e7%t@WuO#-b͕")٥0^--n,d;Y?MI Ǫ,eUhKjfF+t\|RYL( +?^_yR"l,7nL0OC8] NGV́/ŝ޷駒~@VdTLL19t4ȓ!c:cvw P"62]La.lܰOI`y&[~y~߱᭽jطt'#"qp'!.DVum6x/yi٩Ik1̀sYc'R"JHR7"?(qN3FFmΰoL*Z'SpKJRtR*w8}\U|p}UH92U:;u͛'%u˝ Pc%*[7@6(Ukٍ'twY.f'nr_-Ujdz-w [6kč%gqqeucfԌG7/HTb G TeY].~ItUS ]ƥzhsolVwEnx2i&f3(+΋#һ"˒O Mr6;"zuYOoNglvzs}7't쟫2aoN; ^錹ʼnD_u9v㑽AՏ79̾3jhBVԯZ66ҮzM27>MqriřzUslX_8]|)wl"7ȕYKX+{O >}%kV%:hk:̬]xԲ)^SqJRR"O=*RfSX_YZl~T,141Ēȱh}`q2j 7nňV /B^2ANh)$ ?ASw'A4l.POmFai^%h,W( xP ߨJ~_a30 )WmYe0Ĭ+H7c[z}Llnjrx$*΀T^/cPK[md\c?C'֋-z%ՖGFDŽQULj?*EL(9 $e87W~vHLTtXG4ˠdjMH\> 4qNȠ(ڞusʯ"s}pH1$K+X%o[Y~վ\}>j;^ŗG\ty:[EibIS\[6ؿwZORh9 ɝ#V&/{kbbeF11D_H8=+Ԡp)@S4v#_$-@kWfJsS''qbH6=W̌զ*]ݵpʧw(%I%CsNJ퓹& xhM,Y &;u : c]J^W͊Y/"xW2iU{Ig¢Dq(Hr(J#HzCm.Edk)NVW*+^y@w>mځj~f]zyfkcdž)Yl ~W I!yr <\Hr#MR]WtoInW꿭~Ol.frZ⬆\ZέŹ~^K{@ˎ\DY :մ=EU4>6q[=A"4Gs!t0:x˘>?sMSs_3_[b|Tf [QK@Nma@,kyZ;#uC*lYkn _O~O`T+vIi4 F{ ^{:݉_QbKڙ\mqȱ.PdWe λ @k pH &lZyokcT )JVeR}5%M{?|{ hqˇ JGdh╸#\tROx}4IY,GIdFr9^>=fWGrbeb%1XF<^ޡ/KLJƝI-mFޫN85i) iFM] ǚM^& jRCuuiCeD [xu @p8z=9d!UCRrެa{ X1D9k,UgWYisJEɏ#26|DLY5kE`ؽIwV+ d=S㏆[Wzۗ tsois$+HbYT󭉰{1nh6X)z,6'.xijjWp}`0fEE b$_߹|.VVzOQR{Ɍ 1bHdh#BT9҃k)hӅNV&L2 qYU@\Ǥ M!łys_lVа;Ucp4Lچ~<5<8βG$9\EWK8$ZўT6%5P\)3Zʖ~Ka@s$2(>4j\5},H6RyPLN."җdYH Un2lxx4:3B$S|nyqXP{ϰPz}v6J-ۅccw 8<wDuz Kd*S߇cÎE =%1u$VPU-Tp6b&v\R jx.,A7DJgX۩(, Ņ$-dzxb(C_SwvϏpk\x5 Kְ@ҾAҼ8œޘ_p>, 01|h$3:i<!4P"6)0}ZMkq7v:mУmxS4q1XtJ3@51a<OW& bƎ a.p)H5K((Xqxqn߷lmrr7Zp*#HrB<u>9H2J%[2ed UN<55R~\_;q.BÍϷGƟ.Mx=y0D.(д|ޚl1e!8"X#֩%>R; ʪaOZ/r|U~)ϊ#m.2gѝ75Ժ\ۛ8>>せ+EL5{}ok6DqLn %Dhf&°p0rČ$,5E΅7<*J7iJP Rǐ4s_`%At⡭^Aڬtߕr.^*<`G1ȕ˕v z*3ݯDң1FɅbB>@k}dwlNet;@cA+zM YEcݘI&Ȟ5^;^B5H5'zc[J.L %: =“霫[ TDYrLkv,5u jRG }9eGܫO&$ؑd i @@U5HUMARR2ɭ',Tr8z)w$yuͶ>:{#o]#a G.vNTkU:9x]nÝr2O$>>s)w>ϙ"jR\ke6` o޵v[^k c0\WqhEp0鄐<0HdfHҳ*UO#IBuj:?En>Sն[ZtN4{ʪO^u+k-ztҕ:N:Hͽ8Fh -{Uas>{)yJXD.2.H8n1,* C) 6̜moqVEd`NYZI H9Tj$,J1aYgRNˢTUeP#6] nUP;mk"̈>u>X(1;HX1s6Dmg;,+EcBcY2!fv˅mJ^4O#`Dp-fKH݁uj8[[{:nw>i$8^YZRRǁQMoJL]. #bVS]mlMUc,EL_GBX]t&ȍc(6\4AJ%FH#Vb.:7tћ"ȪSawpha"e @$t4]&~<( V͉QUgrnQ0Er^+nR()JJRR"O=ەt!Nx~ju>h NDk"p}`&pb`u#( fNj||+NTNTpar輅ۑ"-u#0Aoq\s%"u Ӊ| UvN*_!eEĐ}cQ65ƲO=xH@ɰl8Ν3ciYV=p ֌K4xhy)H2 -n7IR ܛO;P8"F:d$%CFChnD47@k?uˎ"E4Ku9@Z=,Wsp_X%Vdb e6e?H<(Y|Q$^,,E (G\FƊV\2ZR'E)JJRR()JJRR()JJRR(Sak)jt1&6!EW:q ~6,[? = \9Le I)k7Vv9]$f 2DE2w Iw$[ 0)F]-vůc@I7i)x9:KveIyyݏ"x],N&1K~)RM:u}t~2 tB@HBrŷ-y5̌ q5 bYE/€0s1s,W3<*/X(|JG58wr\ǩ=+շgdgÊscӬRHd#C$H #:/X97ӡMΠb:QբEb14@lblbLr*LM *a,usޒUnn{>v,V0Y8)j]'ҵefQʼnza«K+ aƻkIp1gw XܒEou9:{)P~Y-U/0馻~''϶mqae4m2<%}\\\\G3,H q!@X=+<-%Z&˥U+ZWjҔ(R`YGi/ӆ%gHt7'܏•ܿx_r~ iXG"ɪIK)^hHgc9@eJ$yҠ-%n*D2ʌ?87'ƕ~?ܿ}xұs$2$YXƞoG{Z^&N0fcm͕M:fQKB1z66@] Hta$*f5^ٵmY |ߧ駛,vgRLEB]o@.MTt3Mecώ1aiK]*M^$;"GRlP]3tj^|߻gDF;k ,`3int5<9:~>2tX/S^{ps] caLK4*GQTrvN+daBY ?+l8|mcy}6j*y[/;G͉add㸿u !w\鴘nWZ_`͋9_+~'qdYqZwpKJR4(yżȯ20F7s$JO ^%kzGk bxSƒyOk2ce+.,8? Nj6s1.dm*˛h!F£>74>74l]31{׍W^xKF41PEb{.uG7_G?_G"OfM:,p%4d,GYAxz*-W[cXe(餪sڶR4XPʊz*&%7U\whwF剼#Ň@.Tkn 'PT/mRy01ۋ3B5oḿ339AM e[S6ͣlq`ȏ?+DCZ]ʋqaOqa@Zw0ulgm"a*7?PfĿƋWEK] T)@)JP RSǰ] r2,S*df/DwPڞXpR^eabf37) \9 ^m;ٽMÁyێc骤vL}+p xnzPѦ1kU%-( X0hVIJLbq#U[1A~fN}>o7Uo>~u7`rAkpa~jvMycœM.b䆕4?鴁rֹy)qVT{2z |D@\|z_7s>#~OYY«w,=?rqB1: ] *oU>M{6.,Zɒr>QqEh_?~T7f6.l'ɚw5_*@R&خAH[4qd :0Q+\U>dEm R,KSʁ'H$q|یVWèO^mX++d#X"%FuѼ#=*nܳƟC$X:2a_U9JinUJު}E`*׃sF+#QJRRRoRt C5W^Δ>ZoX:PhQH&cnBVt()JJRVnؙ m!ޕ#[֫UYEkĩ]jԍ }c+\Uy?޲|_QQl.+coO欟dȼm!\zmZҏ.G,X֊_qByBB8v^+M*O>W[lbV K*NHء2j@-^ҳoVIOrJRtR()JJRR()JJRR()JJRR()JJRR()JJRR( cREVGeneral revUniqueID 1229105582021e Install3.jpg @,2JFIFddDucky2Adobed         #"""#''''''''''     !! !!''''''''''," !1QRA"#a2ScTqb3CB$ѱႃDdt%a!1QrA"2Rq#BC ?qnfթj6@c$<+=B+rVō6s{iMH篐b5}?ROuxGԓ۴b(gp4pv$ѱkQ9#PR;ݥ|ZW[K~(*QV!}+0bDv%Whmnnx)vxᩔD\6SI'?)?Fql8'0_nRgdoFvxF̸fw[NkLkc6XD_<͓n-r'n55'C@L| 6Sݲ}BlMj+j~OK* BDjTrNJ(.~<3tS[~oZmb'FP>1BF0H;\W/ DvmSyD5hO*tGz_ItkD~6DN?ڌ3`Z;Z!&_z n'Ϧ_ ;CޖiMJb׀BjF5jgѵmݼvrzXԪpʍ{9QYPC5կZ Zαa*? *,wȆk^_cn?T~T;9QYP Vk5kֿ:݄,vr"zXj׭~u9QYP#GeCD3]ZΰկZvrGʏʇLf_a^6#GeCukֿ:VkmGʏʇa*?*2!׭~uݥ=6nޗ\^(#GCRT~T;dC=hB,#EV8w$cЏݛ}fo+CVur#15b9x"E[{$ixu--k[Ym {U Ռuľ69gI[ٯGqWO;TZ*u==;R7=Խ~֡ٲoZTV!Qpumcѭ-գi؏ViZv8Jꔯ m96"gmtG<) zzd+U.ܦ'& y捚/ @_BfXDӌj+e*W1F1.stThҌT1xU dV5ґZ[1R{!hjkWJם`Zw#rS:i,ڑ5Wș0_yնaZd*jj+5GmD6:Ĝ]Ԩ9Z}|5mj#Xǭ]B) ~mҒ񭧢U=G]W[kiUFd?ƶTfCU<ܕf]RՇPTxI|U!Ƥi[V4eAnRNH!2Hs^W6lETJImH]ʥ- EJoVw,G7mOKtiZNV-0S '+/#$oY k2x&]wj#I6!E7s6|xGQџF&VE Cq4ÐR⧙VI)* {PJT!k3WV5lDV{n,jGCl􌫧J#(Ƿ[ZB_!#]_wEƶTfCkiUFd;k_",po4յBrԅW6=o'VY:?]Xխܶw_%j0tJT/9ϨV2jIhOj֭:QPuW;B@[Ce:8c!Q+kL qe5*ROmV:ϗk׏}㣏&V W (*V\'W" Q^DrIn[O}R k[cM%y-umUMx2-_I"na+Ul;~z*UQ񭧢U|t+B53Gp Of7-H}3ZT)Vב}ֶZz.N֋6 FXYjlԖN< mڦj9#4#3ԑW9$WJIB_"d|Jmbms]}b6z%ֻw+ɰn;&TR9⥢Uig1Z UUD:7lS9+7 JQHfVF:*MsIT}#oRT#4 KZBM鷳TRSTTb=XIVV;~_mJVŤm=?̇m~EwnƼ4B&EK1Wܨ*+QTbSML'#cP=DO/i8yeOG%ҫj-pk)j2kJe(GPBfMNN+5 /|b_Q_OPT \*RTT#^&Uu#iw>^"4F=G.ü:g.#ĬKTTQY*,F{ù r^bL,ЍT_7}>*Zɞ闄kƹiMm^8Y>x !NdZ#S`کA:E=}?yS#S":ykDW!ȌQU\Ěꭞ8Aњט(ZsZsP4mƏ?o}6z7#FDe򫚶9~TI󹺟k5kk\<)4A"M{t!9*ꍚzDyDs^#@Qn#N1&Ƶhv Pwnm8jSȉcN_:U5N)0#וȓyC$e%Nԃ 85"*ė[G!M[USvوhtl\sZ];fds2Dǰ'3H;UO'-SxDZqH dlOM/7fDⲎJp{9iJ%pFI)77;-1аmҫnBtPWc^j tEXAU]PEc6+%u(dtoҔ>zy;~O@AS)@$a{ X{5^I[\+L::yuW9Y]rఆ:۸(hLJ5Z?ʯQK5Wx=XU"ɽkbdj͵V~_,z))hUIa*)YLs=bb_X>U(= M]B1ԣnA9F#)Yw 5sRי:uAc#؊^S|XOgёsэk񕨳7?hr_jEb ^ޛh.:&53#D U#kM,XCݷu&To%*2ȷ9wh 瑌s*ArmY$em{Ƿ7Mt4mZ1]JBBSҼr!Z *Zci*]`UD飀UDD},TCCCJ: D#UVs-aB]*sѣcGvGL]}F3B9+SԚFqE i1=rёUJt,W^!/qKϺMu PRa 1shѷ$C]֓tUSo|oAC_F^3!U,ꉷy}G9-+2 F-U1VŶɾb=5jS!*Us^R*@{fB;VK9!]&=ee=)V+/9ߚl;7 o#X+;ꨪ4XDUL{OGMY_NOB4 V#|rx;+]{s[zgw=mHok%xIB<!BDj-c|H?HFStqz~ 6}/peRV3=gj5nDr]/|8)wW/i ԳXM(A}t|y 9Eݳ9ij/KOmmkD`Dc]kğvFtA.1!Iq F[홈ֲk_국sGc 6zBhK~F9D2 hlTYON@ 8όlnlsJ6sHW=\{7UsU[S3Iq zK|UJ2Mmcꀧ eyprRq{wezϣcDz\j\j:klb|PmmQΈ=%>d*%ʭF:Ƴk\A$l0_m '+[ȗoJŌ\cCD2xbڑ#ihG5kU4EFI<$/l QapQZ h賈V*+Q|e6̆=%>d*%h">qtU'vD*6%ƠEm5si;$/XӚ#: ݕcHְjF^^j,XݗZtjV(\)u+e zK|h\cBPgaC#XI@ֹȃVN^^ ݙJTG4v\qQoN4A.1!Iq E;]\D%"1U|-ě`B6W6$ѭc,H$Tl'MWvpߚq\cBPof"kUUkUȊF*#x;d~4+FF+9~Uh\cCD2xG흈@JaQ1EEr6sG޻9NQgGB4.yuufޕKxDtA.1!Iq E5$"LUW&rg⭶ߥ0l-ՙqogD2x'6DB5(؍*#JD{S^dOXm;uHi3**6:wUg m0`[bk]9"MДԝ#\B F1ătDjlU<?H篹zl9GY")XYXHm>x6\/F N3HDzxHVǵ"iB [U/yِd4A.1!W(g\sfC.9"Z ̅^q͙Cȸ̉h\cCD2x&FVI&,*^oj{="2"UVM>1>̅^q͙Cȸ̉h\cCD2xzE6d;="2%Iq zK|UJ)ڨ(I9ӍF{="2#HDcNkg\cBQ^Cȸ̇g\sfDA.1!Iq E{="2q͙̆=%>d*%Th4\9c=q͙ "IUƝ$c: W.9!yّ-zK|h\cBQ^Cȸ̇g\sfDA.1!Iq Ejb5]3l[)V;rF m0`[bk]9"MДԣsˈBZ"ΑhMj/Pg"$[+>Mr]/)wW/i ԳXM(A}t|y 9E="2q͙̆=%>d*%1g5q?g\sfDtHil~~zK|UJ+yِd4A.1!W(g\sfC.9"Z ̅^FU~1g6ӌg.9":A"dI:jӳӌgD2xzE6d;="2%Iq zK|UJ+yِd4A.1!W(TlTF+b}#=q͙ZA6RBy[873Iq E{="25Z jSGW|#Jx=HD2 }SB=-k$Wt鷵wyqBBX_-O7a[-FQ8̥pjUoKV}Q:[>9o Ŀǭi{l.gyv3JD}-ҕeED&C9.my-}?v}(z^^/(J_z/x/GC_-R.qroɭw鶾[jeɗ1>̅^q͙Cȸ̉h\cCD2xzE6d;="2%Iq zK|UJ)ڨ(I9ӍF{="2#HDcNkg\cBQ^Cȸ̇g\sfDA.1!Iq E{="2q͙̆=%>d*%Th4\9c=q͙ "IUƝ$c: W.9!yّ-zK|h\cBQ^Cȸ̇g\sfDA.1!Iq Ejb5]3l[)V;rFّ{dTU @gMW:Zr""F|kӪkۃݮ7˿TǤ[n#TB s f iF ǵK⎚GDFSti1| hFFԱ"lOO4Mr]/)wW/i ԳXM(A}t|y ~,g\sfC.9"Z ̅^q͙Cȸ̉h\cCD2xzE6d;="2%Iq zK|UJ(UZ$o*Xzտmd4A.1!W(jK'',N7d*%d*%]֓tUSog.9"+H&HO2Yg&8xFtA.1!W(g\sfG{oܫivW }SBwd/,6>lel}=%>dL1/b=zZx=Hҵ{t%5q`5A U>77F_kF6]Nm8lۈ"@ F1ătDjlU<?H篹zl9GY")XYXHm>x6\/F N3HDzxHVǵ"iB [U/yِd4A.1!W(g\sfC.9"Z ̅^q͙Cȸ̉h\cCD2x&FVI&,*^oj{="2"UVM>1>̅^q͙Cȸ̉h\cCD2xzE6d;="2%Iq zK|UJ)ڨ(I9ӍF{="2#HDcNkg\cBQ^Cȸ̇g\sfDA.1!Iq E{="2q͙̆=%>d*%Th4\9c=q͙ "IUƝ$c: W.9!yّ-zK|h\cBQ^Cȸ̇g\sfDA.1!Iq Ejb5]3l[)V;rF m0`[bk]9"MДԣsˈBZ"ΑhMj/Pg"$[+>Mr]/)wW/i ԳXM(A}t|y 9E="2q͙̆=%>d*%1g5q?g\sfDtHil~~zK|UJ+yِd4A.1!W(g\sfC.9"Z ̅^FU~1g6ӌg.9":A"dI:jӳӌgD2xzE6d;="2%Iq zK|UJ+yِd4A.1!W(TlTF+b}#=q͙ZA6RBy[873Iq E{="25Z jSGW|#Jx=HD2 }SB=-k$Wt鷵wyqBBX_-mT "0]RydtbYgc"IPK}s|y%8!!Z ԉ/no#Vg(g\sfC.9"Z ̅^q͙Cȸ̉h\cCD2xzE6d;="2%Iq zK|UJ(UZ$o*Xzտmd4A.1!W(jK'',N7d*%d*%]֓tUSog.9"+H&HO2Yg&8xFtA.1!W(g\sfFAMJ`(ozIXh\cA#oyGw6BSRB.!@B#QkA:E5cnG~g$[ܽCf QR#,nK,,z$I6Qtoo ZfB! ԳXI(A}t|yfrzE6d;="2%Iq zK|UJ+yِd4A.1!W(g\sfC.9"Z ̅^QUI&b[ھ1Cȸ̈UlOdmtA.1!W(g\sfC.9"Z ̅^q͙Cȸ̉h\cCD2xv;;r|bk4~~Cȸ̉%nȗe{Ŝ7ِW.9!yّ-zK|h\cBQ^Cȸ̇g\sfDA.1!Iq E;U9%"bmmg\sfDtbEFȒt~1g -Έ=%>d*%e+q?`mh| ?}׿m$]mk7Zh[08;]/ٿ'tfԟG|! S"+Q-4v_OryQ~?ևk7Z;'Uhv_OryQ›e2NL}%A?jF;]/ٿ'w:JPzoŐ[ RsxQySH֒J {J6.݄6<0pY3 %G_{UkXG~JrSliewR|x싉c٣%|HH"  D 7ۉج||p yW5H;YPDoݪn͍F̳s$ cES$B#:jLJv?6]ͯk~Y%:I'fXHVˁ'2](,uHC~NӇ&n$b j*_y& /S2lX[F^я,c7>mJYPJ!`MŬR^T4m;Sɒ4;<i uxqUwRE+nڑv|;:  xg0YGŶVcwx1q=58ژ+j;v'5Em?ñ>oo&r?v`|#j-Emñ>o'hxf_x&r?vcy&r?uIiz'hxw?Ok30>sw;0>s KK?OGkٿ~b?sY~Gix9օ%荛n'#5Cq?1Mo?#G<~B>76ḟg|#Zzkyr?uG?OjDSӶb~b?sY^~Gh7tb`|#Z B1?1vOᘟOw`)x?9J  ~d 1?1N#Po0~s?We\y7/k 82[յ[շr)XvWjtm<:|5FΙdσeG'&CssӇ->l}~o:ok~o*ojXqLxy/EjYKn&'T|x>7.}b|OV+WB HMrIURFQˎʬ@⃸ :oj&LCyX%FvM2wժU߅eωHnHV\`H]d)8zCx 4?V1V|# IT'l#Uaf^֫1+q_]v7wmڲo<w.ݺ,VZzok8 t7{G%MYGD#+f6tJxkzf/ښok^-YI>p(pƽk1L%.kxV~'K&T>j͏ v,u.ēntҔRRҬ:A6QˍgL$4¬Ae @2mǿAR|cLzٵj~lDȘC1Ȓd֫_2WrDY'P͢heʚŔ|3cj6f/ݮqfsw<ƳlE8%NҮY]C᝗ۉ&8٘6ͱvh՜,R䴌Ec^o5)3}8ƉpMT^HVֺQ yoա=d~~߫CzA)J_"8F@A`Mt &C<ܜ(jTK5+ oV? '*h#X سȩ{s-I0r|OerdO\Ī{ YQw];.~1LNtzdtW*Ghl06CN:Rd.46+;$xGVR5+d^ gwc5NiH},8s#{\.F+9yvNl9`iYTpw.`f0*&E{)fM]RxjR*z`mQCmn@v}NMtHts^o6OV*7.}b.G O\iƩk<P#_ ʤNZqcjD]9RG[?粼r$lp"[qYSTlR|my$TT zo/nnY$g̴Z  drEAX}0LmM49/ѬVe+x#c)rn9u43fc^(> :bK)}m~[IE>L߫CzQT?'RRRRRRRRRRRYmo֐x_פc|OV*)/~5YRrLhT`ZF`^x/{@3;p*YрSTjm6NXj1<ٱpύ~LiϢ6o U;j2b2c2Y^Dyu *@zmnv L| dd٣6Rcn#ۀfxÐ~T.&6c{ܖqc<fȓ<\["E@NZHg%%l<I3,]JIǍɃFq^!E "bz:~:)K "jė"$*Hc͂C:$c'jϙbqDpDUݝZx؊֏kisB&^') 4!A46{׵+Lۂ̣Hm1E[ .??͛7Y /1_LTWȌO2Uշc gKʋRA =^Efbċ/irB̓u3Gv^0E3̍2ly&F\`ůcn)+$Eqx2g2:LEcNE"7EtY!`tBDQHְ*d}y3F a}8`rGiCLt;"uprĒ 95;O3,jD _%nlCb,'|JIa/uEm~c1.Tm>8!TKEd@'xd2"<0=I!+;; 3V$[|]ucd$w бۚR;_RI[wjq2kcPwm]%~k6QX5-1&ːĈRKxqyxIQY <ӣ^O S&Րq 2ls9TITbWM/72o-٫{[{SB$#H#<*!̑,Eж#Bgn/ F>c 6B3E^pMzR+/~+jY_פcp.}bmՊ.G OEC%1Eh!|cwN..ZcHG6c$Iq+ts/ùµXS8u4|yzӫMvHQ3EFҼg[_Vi>EڭH`y]( gbνezq;σ#K0DY9u#V jED3M#$Talr஭!k0@=bz<9Ǜ E 29$2vI3Z>~{pEA-yGc8`&cA65Ҭ:A-l1і, 263ťȒ-aZVoPN븸ʆTm'9QP-G5ܹI<)cCJRƖ4 P.O:IKB R R R R+/>+jY_פޯ;m|o]IF`px `*U6/H0n:x ᕴ.>6"2!1?{Y1ôˈ:ֽ2)N0reV YGb7#J}֮}^5bo@&̷{>NefclqXEiC kq{a`7/ʕV*zRg\#%naVPo.#TKsh@<;fL8|<"iVy"z#>k$r2U0wZˑޗ$dQ@ڊ p4ФPǪC{i,ePǙ`J֯>ϖ$΂i2WF 1*"w*X;Y󬆎8ۜ tQyrmZtgh17z &BVU:\KǤ1lM|iw aWftȺ C*.w **k]uHoff̋aK i䚟[v7.l{zQeΓJ&9۪聓Xa`OM{j-FVbd:Vk"[pu:rV( Kfl@:1p̽^fjzRJRJRJR:EewA+/>+X3anWOV*7WOV*4W7!|y@|Qk.G scaͼ.8';#"6<98Y2m=(٧۪_؊ _Ir3$13a ec4ynepdK_xo؊hO!}*cnx2ǸFP:ȪJj ۓ./>I#/#.=NA!u;t3RSP7PzEj< _חDVE'ZkzF#Ԫ|؊$@ Fb~hL- p}/f291J.!ꢭ߫Cz^eşO:V=C{qP߫CzA)J)J)J)J)J)J)J)J)J)J)J޵HcvW1 v'_࿗mzQQ{AQT:~J/h(")@;/QڽϘr*.-gU΀.55W vMV͛34a'Y6 ,2儚GB<[׬-zo݄QN*>̈B˨ZW;kečeapɮʞ2ؐ{,K:d[!V*d)+m7$Ymƃ4ly%H#p!7p56umD“D@f{Ѭ޾kɰ[9QaDe}$IsxڀթtP{A G/ E ޺l߽nV1Tb]6b8}Eěfms!GK$]9 0A!maVAυ%تt,I h +ӫElz^Y9- n\qd$\ [oS16ԷVrTuC8XóQ -ٱ!%cF'#*Q~A,cV7Mם!Ti⽬&clF Is/ Hn akX[uL" _%cw\ m"o`_wK%uCtgzFBcX2vHK9XC"V5g,j t2I  :X]Uyf6TypX-'J'ķMw,j*Ap2l\|4a GnES'pڱqcXGī9YWiϻm1I2 Rdb͇",.֭2[!:)J)J?޵HcvVM_˶i=YmՊ2A0$$1yn_ch#<8"Bi`B;c5uzxԾݭ26cUq340 "ȗ/u-h9Ɉ0}:VDtZڭedNfFg*s3E9V&fRBQTt*Xj1>ݍ$S7hV\Lo4Q,dhgY %’z8ߍocg>d.=1=g9'+̩̳._ A돸v۸ɓ#[cϓ-0`/)vk~v~Ey;~8 b?U/T_OC瑦F=KqmKP\PW SVRQ20ߡMJ߫CzU!mɷI*NPS.2(Vh~OY(")@)@1HAb! WPH79?=e˶lem/,lc9爔Mdj`tEhR6Ӆ7 \ %:vf^S`j#׊PxVgyYyjP`͋tGURܩ5[jGN#ʯt\{ݙ3ea$F[:ʫՔ[՚PeOvw$g۲$ͫ7v?kif,rnzT4地8VFdPqRʙ˶;J ߚtQm 3)r(N$h$u<ÕŤ-t0&[Z"7ttW=ay;0ndha09ǁaI$(EߖŖ;hHzh' 2 2Gx2؎_ž ]d1'[:6ŋ60{0 l G!c& k!cy]X 6=E&B6*Ī#QPXGݵz\|5%]I X*F}#B(/sI$2HU؝AndK~S˃AA 4J"" L8ɬ4b|XBA"j*4c3%He=l7g#< 9#7s*nV" X1I1CP4:8UEmV*R R R 6*bc٦Qx><&bWP:Ǣc^ts1:}_RHrhtN.u""'r&iw DLyiYeg]O4m+o9ZG*>&\vkJ?ݩ,{ 2%ubb'OO@nyRLĆ-s V4܌ɛ}TSv44) J'V&[ܲ,.µoFxʹRs)Xl)@)@"⿻֨_qљzJ/.}f0X6ؑ{r:QjNyn@ À"ԾPj_(xETO/<"A/8~&/b}91{-KPK؟uNpL^RC)|b'S?>ԾPj_(xEU.UU '^5/<"AW5/<"AW5/<"AW5/MK/PvF GA5K/SRKЄXZHخ_)|"_D~ h/{Wu/MK/PC$0*.xߍKˎжKRqq#a數6깩|ԾPҹ|ԾPҹ|j_)|"j_)|"__-Y|"'#^\[xՎ:$n%Wq+l:|ޔ7?ݽRKԥuI}C>?JvܟI}C>I}C>m}?I}C:m=??өJvr}%}'Rܹ_ө_өJvr_PN_PN)=_ӫ+?*Rܽ}!C)Jvr}!G)Jvr}#G)Jvr}#G)JvrJvr}%_PO)_r}%w?Jvܽ}#G)Jvp}#G)Jvp}#GW? Cip0IE>)DxϻB6KagQ2uPXŦnc|f!!\|!1@!'PDUň[bɕOn}#J'a^>ȥ$dn 9{ tL3y{)(ˉ/4PbIfsXQ K},b?Zfۉz|k݊?|.[~0eU\݋<_ڿwb~yݷ'#jzx&9T/U?>b/OUm>b?\[D'#jϮ7`~RQ/Um>b?YN#5Lr?Uy&9-N#4N#5<r?Uw~F#4F#5<r?U~F#5lq>b?\]o_C'#Zzy9btS~ nFy1Ww~X~@v=M =K r}{Tw?oR쿻q~b?Y.Oۋz{3AoD&(Sedz7Ok 82[ٵt:hSM:P3"lq H{Nny5ꧨ2}M/o_M_qߋهw>[TxSXcX9;m=AT+!X$x&S$ȩ#(eV qAC}M Wq2ƃ>bIFvM1tAb~ st&!XY C:x4hoj*ϕޑ$z=H_r:VejEՋ9EvIJt:zhok{̈́n,4#ڭ{6७_+ |쿮VeqWu4?74h^-YI>p(p /ǍoYxMyZ gh#~'K&T>VFfDŽ:bIcjR/`O;mky[~&\.D14ACu)6bi̦J6VF><ۆJd 37ˍ.1%uUR2ZW C.3['!c)/$SHi<88֧]sSpٞ(=:ѰnBxkglu,7S4;8e@h"kx88֧t)U'|<$rߥH1rIt+:R,2GU[{*^ x&,"6]b~z_pZWyԥiEczf,GeX SY4߾fU޵=H}]4n9ś=, 5ϛ8=a&wtr\.ifۘ,H>J R~2J{83D) /X@5_3F@;k![NǞA7mY ,gKxi[V`sw-4017ub#o33>ܿ7Ft#ΏVGx |?կ#F=_뿚_7ql^K?t.q2mPh6x=Q&Fu3,=$<"1RJ"#&ޭUWd\ݪ,R6dnTI;$x^^n5n1j . R\/BK^)JJRb~J9*pyYT_ö{=OPA/oȩ.G OX26<,$,\.rNVz0䗴I&-θy}s|\TC SfrtF{EBc,kVsiV& m o~\#,h(f,5.xk 2+ [g GIv21X摥hWrll08^VYP ]QٗGjkv 6[=*b ULXP@le q#RlseaÑl0G Jɸ~~Y' x`<} {4~Cڇc>m{Pٱ"B"+NF/+(! \IT{T m4Ҋ=#WG(PrsU#[ZFBN^nkVw'Jh?,?C~m%)Jn.=׎-~Ooo_5*d:DSt ķ!%/-\mz;xkLZsɣ$YQRA$u Y'LuxUL_,d"61s^UuQ$ܷ#u:l-Çk繤WZq<ۭ1Smh(t>(v!Y *GUY[UN0%;G4WfÒe*L[p7}5,>\=6ۙL&pQɈc8\X30G nQx+) A 8[{_f2i{,I$-WpaM#yZzxq#HZ#`TSMAbҨksT<3;]K}?幚B-՞I&$q:GۍΊ=\+$V>olنt9m,:Ѳ`2*F+?+[Qfq'X%_RM5Hz Ce'uk-'`lņSdn\gvٸ̈́nӋmpuy64եnBuz3~crN-rmJR,_R'aJRb~J9*pyY9;m?8zRyi(ਪY^Pqvi.dIgyB$H/L+3xU2"ʒ<oM 7#dkY2ۍJtKb;Q"TtOge~ͫ/}0)EBs3A@KHPWX2&.iҗgh+2n [,i1Ɋl,q≌qzI^ӷPgU ʪʫ#9_HkFnWX6yf, ;y_}ݿ6[h}ܟq(JP R)@)JP R)@)JP RVoUU[YKgj1<|*?o1zRyi8ਪ\-?%#D#ˠJČ]/&DLpz--O?CH0/@y5I 傖 jYxɇ"n ^Ϋ]08 h&HÅgh0 f`{a]3psUh t,(hS%iЯm%5ֆUɊ,da+nO 5|vgH%hdv~}͟Mo\k3Ɍe@aVCٿWurC"|Y(i[<ɗ)Q`Xhd0 F.U`"gHu,k,}eVjդ+t"躞6U"lQ'O$L^)&6(k ɽ1R>TU+~m%)JJXҀR()JJRR()JJRR5cү5bydsv'OUkdRܮ/@y_D23f$q<`$0_*xԲwEY T2P^܅s?^Y0a;c3# GF?RMZ iCl!$yrcq;I*Z,PY2 pol>mR \qFU/m6*ja빎#fHxi}A٨<}ކ96HS2 DLŚvmD*ヱ9js7h3FV!D1ψD,##&UʛsN]㴖9{;K3㜌u0M IՉfad]$kn{}@I OnI<.d%-\/ƹكɳ^=1Ry|g鴮,v%=KBvE4L;"Nצ`|ut{pPi6lXIDΘ^njRe,C,yIRBq\\ْT[*Xr;1I=,EF892Up׼l38IBHΝ)B6-9ni}6,b͛.C.EEje B |O$2xg["&tv൴>ۺ`y@Ցɒ }jߚƃ_N t8?dmh %u2ga2d8Pt C=OVرB|7d,&` 9HI&-n6ə k9%1 lxju~PYzQ5I,J.8,jC2kػxŗqWL8x7Q n-G.uܥ)@1U?dj*oUvߋz*/olTZ~N/x**-?'#:E(wAr[DEU,-yfN6.ZcHG6c$Iq+r_uKTXdB1#^dŘZ|XC=XuJiՎs?[ JRK2,3_&aI.ʥE>]hᕇ[.݀p`I/j okL kIĹYH@K݉ 8 JΖio1JΖio1R>TDT>OT(.deO !nAQ+ȞKxmWȮ顊}ZIWPlx^mKÎ sxLIVE Vۖ<ȓhB:I4=-gKXu2g.5BJLA|nbP.#P7C.2,!]#*wT ǐ5U LmѶazP|\hc!\v:bظR8qSNKeG>T =vbv7 &ӫiO q.d%d23y`,Ǥ19>F(OUxk8GD#IE>: QhŬI#۪<%f|V|l?FYT+̱oY<9qzb$#XBm|\)_BX 4&RXnTpFk4bALrkլixcY*Ø"<[`ʸ~Dlv+V8!u9Ic@^p6oo1cX J+<g$'cIn-q^sd;A~@sC9]KtnǓ᪫t>&X/,Z>1UO+0 ׯ;Aq{ 26ĘEBF>eh;L>}2}$G\h=KtȊY;Qx)mlj$rx̞PS>?zC[2"2 h:#7i^#JhlI*}7a)KLKb J*ܲj*M t's)@)JP RsWGҭbUYKgj1<|qڏ_mo;mICbǘRyi("\sFA^f)>+*t:o\Oi\OicfTz} +rm+ ݴ#AIiΩ.'z.'sݶFqC I,{-c]-dYeD#+*JuiS_A pjcGXłR´LOEicfX/!80H؋+~iagX +(x5+~m%1zRmwgMy9&Yb H=Q-͡`l8j"ֱپ66~i;#ȚUHD^QȃVn RyhyMIT-eKȏ p4ФPǪC|bi,ePǩ`J֯MJ>ϻ츸s3L摃:+df`\\rK.lȑHy>8(i\WNmE촂l YT s/Wn707i]Bb<4[%zIu p(7o>/UI׋ (hZ]D*3nsv6H\#C!@d~NYTxȮ(9&9͛o@#LiTd?n[v]2k, RAw#p+1gh2K)Pk"[pu:W~kG#PJie,̋pJJRR(*oZU4byfsvg9T6*\-?%KGVba rW Rȓu$UVYPQi|]~&܁2Cc 8]^_/~lH|B2cz;F#kլ9u[[Ew[h}ܟq)z\*\V+h8܂S4e)JlR()JJRR()JJRR(*oZU4byf/WmqV*<NjoGOS6*\-?%K0kR.Vjrm]۱psl;01, Ƃvy"!I"fk LqBN jWRx\m̰FP##ՎL/c1u{Kzd&F>>ޯ^Y]"= l4x{K.bQcX:6KhQnlO$E&c_5D3!e~אAe*m{{EI:2qVKeWy!з! #.9$\-[Lѫ0AHA8UdIs,OPyb%!%EY!urܬE5*2hێ~"!"<5vH٭~_dUn$Y1JX4xJ+34pUDhʬ:P RU5C}VRڌO;~/+7Ow zokXc&iX9<2OM/n<k}8}_p\m|LM<|"8KLݤfr+Vnkfʌ2V)TbգKn4_7/?Ƨ_@jj铓4}|heYF4QtF%1mkPceaf/xMq2\h/;|kK 6X}˩ Yh-hXX:u5)EORUv$ox>ON)2 n7_[+ٌLRq(p?Wh}ܟq(JP RCbH}2GDwFzaft#r2=~J(d,k\#49{^ɷ+CYu =FǗ;5S| Yr&!MK$KٸSΌ)qMM Kxaʷ/ώoW.}e˛p͝0}AB--H E~d2tM3?MI1[9bX1'K-z4%c%k* ;)@b\ȍcE,.u)@)JP RsWO֭b~YKgj1<q}=AOS6+9x!I"/jg=H%c 'B^v#++r rFS afy# #b8Ǵgʷ; +{Jä)vŔ78h0'.YĆebc usi7UWϩ2.+ R@`9#e71nۊ|'ӴG#d' J -o$q=5_w3·sX*$H"ؤzbmdv@Z*)̙Z|#"kd l;Kk`tRMFttʇQ4Ou2\T?l +{r Js;ۊ n{s:oUk٢aeƁ*2X߳8jxn;Z̙ |r2HBuA(Gd\m&ў> U ,@8>g0bG\#5/$ʪ.Y`f*,:CHbUB/1x*s +0*VR,UGcem,`tv_W)b*Fw'J>,~ ab:}<>kЛ4Mon_GO:ON_GO:OZ&7M:|۫ΓSΓV MN&i6tTtUBo4ӡ7ɿh }<>jkUU@!VZIS7ɿiЛ4| M@iJߡ7ɿiЛ4| M@iZ4Q9 D7ɿiЛ4t魏-NXƶMot&7M5B1kڧMot&7M( PArT> ѱk Л4Mo<]^-a`KB!D!+9VBo4ӡ7ɿh )[&7M:|ҕBo4ӡ7ɿh )[&7M:|sOWֺ >-T,}Wok{>byemF _޴\=US{zJ>/=)Po??J ~/yJPoC|_)Jn.T?|_)Jx?S⾨yJSp>/?R._TOJ#=ߍNƥ*x}Njv>~5)Av>~=;S;SߏJPo??J yO)BC?޿J ;ԥ}NjRx}NzpO̽T[}=)ZYKgj9[?# cREVGeneral revUniqueID 1229178173357eInstall3Vista.jpg @e,9fJFIFddDucky2Adobed         #"""#''''''''''     !! !!'''''''''',"  !1RSAQ"2Taђ#c%eqBbDur3sEC$f4dF5Ua!1Qq2R3A"rB4b#S ?[Ջnt qT*F_5Ɉq)MZ7e;pvS,!"B )(y90E6η6W͎ͺ"E"5j5`2s.B>d$YJu1dSnRF~MlZ|$ Q& fHb("( \@3u؈7 ID 4KQEYFF)J U JiD[AdAE@lb J r! 0s_NS*rMj E%L|K\ gLZYf (YA5LA' ")d@ I0-+5h QȠP\ICs 850Y Eͣf$2-cO;KC M)6mmO& g=_-uuUB;Kgg٠2M)wٽ<(X壴z+壴vHAYၣmJy0fÑmJy0Ȅ%|vi~ _--/D3dϲ7'"-[ayDMZ[H2Bپ,, Sn3)ܔDw3Jyim!}!iۏ`5OI<5Yn*;H d?]gGit ^gv6ڔbn8RL@Z;H:]/D3jSɅ,ő04nSɇ$]rar|,UFv!Z0'oO&:I%tئ]"j˱ԧF=<6奴奴vRLH2}Jy12yGAv%U"rfba)RFra5u "& U!ƒSHhq]../JCPi_TL'hbnZl.kjuDp3%2z d[^5n*np9ʂf9 aS݋-'-7 *@("" avC%g性DNpLRǤQ[6jђUk"*Ǽ+߾5Yd]w}Ħv)1*m`)L$&0H$3'p£ׅd&|H UET2Uz(RQFɳ,Qj&P1BBb BNlM\VattҧDrG &LDDl5@(L)pF*w >zvjv!* ucg!S>c#j(!71簚6U5b TD-X:8!1_lnmrHX#$ފi CyC67c6}lnmrHX!%-oZl"D:D8H>3w-JuҊG QD1IQ5+M$c*[ZΰlV+ڋ0lduSDdUճ`599V)gWICR*:֐R4i6Jp}Kׇfcsɜ 8s%#JXF_V eKDkIɢ P R# (rJC"MrŘL( L"协a *U2J*LL5ELZ Q"pBNR70^i zL݌~!bݰWl&UtZ(tFB-RƱALgyQ'DU1S!6\ECe H !I1gގzenTμj}ST'hx~U 2+ V&s*P2JjYvCM8dYihW_ QoPP_36*))ʲFjQF&P1Y>mN7[3{Ag ,W'̊ٳVF)`'xX!|33*눙2D8B`w#z}2Hr̥rbC @DkSHo(cff/͍ͮ_i $iQ!8Հ!i4iw}c۱\ i2rvKjYn)D%*5:ᢜюj7NtڟAr~A?_Y ajʞu+l\E=C~."sy|- __' /O&<ѯqXkxѲ$تY:8LK#V |YL|DS@O2)j1Dj9QFj̒:g8 C!H8tdEFSEH$2%1ć=RJ=R5@C9Ȇ8_[J2":^lJ+& %1^NXE{-#16$ Ff&@D$8|Z/bخ̫PHuJc2Θ'y$W3›6,ITLCG$ 8rSdg(-P;3*u Q1N&)D)Ji2FԪYiw*XU"f*$Au8sA&eTb,&X̐pH b%X ([1N{;7*tȣ…T@.W9-`q)h *bOy둫w2djk%UAUTxUL s !J&l4F?Da,K@#*x28UZi8̊TL}V5T)*JPў(Ɯl8TFJ42"II@TNΔEfia#MbO[{o x,)nrrS)Ri% 5>cҰUgY:nsEuF)iHiErˆO] fL=zإECn ')6L^ц,Z eK:L7`UbNc!*i&쫓5= ajoc ?njʞu;l\E=C~."sy|- __' /O&<ѯq¶Mpb Ju%# ȳ(- &c"⪩W8&D@!afqyOZ9=, ܦdJPd%!@"p0gϕ׳ʅA(`XHHAA#W R0X<>l()F(AO!Ws^* gϕz GI~Eڤ $RNR rDcL&d0f"%$qw59򠻚P%f*IVQ2 Ő 01ضID0UK1|Q  "QB`J 5/8{?|Z\F )U*UR±LQUGHҚf( FC0cgϕ׳ʅA(hXL-SYM*@$2IG,R DQ ugOQ׳ʂksBנ2DL()Fb&F`#rY4D @N޶o1Vf4O&ksBנ0,K :,ZK| d !fl%2uz"QB .ksAw59kJR2He ,@0J|aX 0j pa1׳ʂksBנ2`![f a)HVIK:ZA>XVPiM\gϕ ^P, ,A(sĖƲhi SD*ksAw59kJ:%b J`H&PNt3$4l0gϕ׳ʅA(`6yL[5OHd4&D)>8oPnY!*TԚ,>gϕ ^PqJF * ŪɬݹT2 z򠹬>T*o7T{} 2kJMaDsMf> (2% Q>7&o7T-z Cnk7Af>W{} 2M婕 ^Pۚ}AsY|UBo-L.yjeBנ2 yHh>T'qBu3CThƟ$MBo-LZn* }ByjeAwЛS*5GʂthPZP]&ʅA(eg0G`n*FWS^ZP% >T5Gʅ]&ʂo7T-z Cnk7Af>W{} 2M婕 ^PlQtS}BE5G!ZP% >T@Yڪ'Pa*FwЛS*:M(ȘՄ&&8%7!1ۙG uM ajzܛoc j_ZoC~."!k?[9ʾ_b//—G^h׸k1 "q\`)!!cy`-9\Zv2๬e·3U˃po>\Zv2๬e·3U˃po>\Z ĂT#M%= $Jz3J*ŒY)u:*Tl1+Mrp U5m ܐS\6D3 E5s0S\\+rCMrH7$1T-Js0S\\3 E5·$1T-rCMrHZġd0DEbnfk˄DDDU$ZΪiGHb[i ^Pۙ"r๘b)W.!mkB% b)W. "r[kA!m-bP˥aNꄌuYhkϒ&a\NUR@4a>H U5m!kJs0S\\3 E5·$1T-rCMrHZġ3 E5s0S\\+rCMrH7$1T-Jt`C0LuY̸)>X"r; P*4|곣5bw$1T-A(mMrp\1+ ܐS\ U5m!k1+Mrp U5m ܐS\(`, !~Dz0D1+ R*!3UQ =9"w$1T-A(mMrqgjJ"S%8Ja^*嶑DxZݤ80ފ:%3q4@9fQCߊ O *Zn:a:F uM ajܛoc oWGl~V^TGd?-gb)~q̫)nCYɕTt9@p—G^hٍ,l>@L(*hDZP,9Zs}$ E*T8jC4(\"!Bס.^}Ǚ]zH.v*ek,@rDk/9<>=g9C\+ sįn/8A'i X6eο :JHV2Cx6Cn\+ sįn/8A'i X0,(AD,! Ԉ)NX:JHH6 -%D؝4?YYظ{l\D*}[PO _,Mzy^[,qP¨e0"}R!e4+8_ĸHQ*e@E!h`:鯀qZrEii _qtO~!KLgKKLgK'tO~! = ^9GkqkqnA'__i ^P;) ;)'__i螑~!}-z C8X.8XF螑~!}zE% 5/" A#0H<7S\wS#u -%DOtOHS\wSS\wS#tOH ="BHZMqqN6]MqqN6="BH7D !kJv)^@i+c0g'*0N&kqnJUZs0ל螑~!}-z C8X.8XF螑~!}zE%m`mazEnBנ8l`%e`WX90u5q87Rk#R#Zts y7D !kJu5q8u5q87D //A(}kk//tOHƳ[JeƸ\h蚃!DMqqN6jBG_5Fk4aghnBנ>kqܑnGLʈ$ʨC}`Gi"j&p25<)!0DVԣGYxz;@7T oKc?+/*{W>4>?-gb)l(x,^."sy|- __' -1 K tX:F̅l8cQPꐴ}R[|8@αL2BR \u!o׏BסQ躛\+ \+!48 q- ^P H[. КGBp%\+ \+!48 q- ^P[LQQTFaZpMxآ"\-%D Ot&\-z CWosįosįn8˃t&\-z C<-:f^rMJ_i#P<цF7Biq eנ>osįosįn8˃t&\-z CWB =#)l.8چ8/{+/.^A.88ʂjچ8xx} Ӡ3P 4.8چ8/{+/.^A.88ʂjچ8xx} 8ʂOH[* k {r{;LvfsШDyHZSY AG9X?D^OnCX_œېȪTO 3Փ*U8/Rꮫi.88ʂjچ8/]qKeAw'q-ev5{] a|prAwHgyVts ]qKeA{] a|p^WmCX_<\>]qKeAw'q-ev5{] a|prAw'q-ܞTPev5!ޘO/MTc@`8ʂjچ8xx} 8ʌ}} \ YrK|FZ47Pev5du֒v9ٳq|`y WRkllچ8/{+/&OY0=dkMkUM:P8=R-Vs` empty then set the backColor of the foundChunk to "yellow" find empty end if unlock screen send "Deselect" to me in 100 milliseconds end SelectLink --------------------------- on Deselect if sFoundChunk <> empty then lock screen do "set the backColor of" && sFoundChunk && "to empty" unlock screen with visual "dissolve very slow" end if end Deselect --------------------------- on mouseMove if not the locktext of me then exit mouseMove if the mouseText <> empty then if "link" is in the textStyle of the mouseChunk then set the cursor to hand lock cursor else unlock cursor else unlock cursor end mouseMove @1-4 cREVGeneral scriptChecksumMqgi" handlerListlinkClicked mouseMovescriptSelectionchar 353 to 352scripteditorvscroll605 revUniqueID 1226228315196 bookmarksscripteditorselection1979 tempScript prevHandler linkClickedscript e

on linkClicked pLink

switch pLink

case "Trevor DeVore"

revGoUrl "http://revolution.bluemangolearning.com"

end Switch

end linkClicked

---------------------------

on mouseMove

if the mouseText <> empty then

if the textStyle of the mouseText = "link" then set the cursor to "hand"

else unlock cursor

else unlock cursor

end mouseMove

V History @$ FListMagic is permanently enhanced to take into account your feedback.   < So prefer to use Tutorials Picker* to access it: you will always get the last version even if ListMagic version numbering has not been changed yet.   "< ^ g, b* Tutorials Picker is available on http://www.sosmartsoftware.com/?r=revolution_didacticiels&l=en    "#> Nor http://www.sosmartsoftware.com/?r=revolution_didacticiels&l=fr (in French)  "> A 1. 12/18/2008 First release $ $ $  2. 12/25/2008 Version 1.1. $ $  NMany thanks to all users who have reported bugs or required for enhancements. M Here they are.   #2.1. Enhancements and new features " 2.1.1. Editing mode  . When editing text in a column that may not be displayed entirely, the widget is now automatically scrolled to have editing fitting current display. V V l) . Pressing the tab key (combined with the shift key to go backward) validates and jumps to the next or previous cell in the same line.   < R3  . Pressing the return key (combined with the shift key to go backward) validates and jumps to the same cell in next/previous line.   < U,  . When adding a new line, and as a reminder, this new line appears in italic as long as one item of it has not been edited and changed. F2.1.2. Upgrading your project according to a new version of ListMagic E u. See 3. Once installed, how to upgrade my project according to a new version of ListMagic? in Installation section.   U [ _ k Note that even if you used a beta version, ListMagic will will propose to upgrade your widgets when it will be the final bersion will be released.  2.1.3. Contextual menus  . List field contextual menu has been enhanced and allows, in addition: Select all, deselectall and copy the selection even if editing mode is not allowed.   . Contextual menus and tooltips (see below) in headers and list are now automatically localized (in English, French, Spanish, Italian, Portuguese and German - en, fr, es, it, pt and de) according to machine's language.   ) H _{ ZSee 6. Contextual menus and tooltips localization in Syntax section for more information. kIn addition, menus are now contextual according to the number of lines selected in ListMagic for instance. /2.1.4. Columns reorganization by drag and drop . k. When reorganizing columns, a column may be now dropped on another column and not just on another header. gNote that you can never move the numbering column and the first one when mini check boxes are showing. 2.1.5. Filtering  N. Multiple filtering (using several columns filter fields) is now functional.   9 2.1.6 Tooltips  L. Localized tooltips have been added to the list field and column headings.   7 )2.1.7 Modifying selection with the mouse ( . As expected in any list field, when the mouse is still down and moving the cursor on another line selects it. Extending selection with the shilft key presssed (when multiple selection is allowed) by just moving the cursor when the mouse is still down extends current selection also. B B, n   2.1.8 Misc  . It is now possible to copy Actions menu button in ListMagic Action section to take advantage of its code in your own project.   0 > L3 (2.2. Main bugs or dysfunction corrected ' . Pasting a text of more than one line in editing mode in the entry box confused ListMagic: fixed (first line only is now pasted). d. Sorting a column could require more than one click on the header to be taken into account: fixed. <. Sorting an empty column was not correctly handled: fixed. . On mouseRelease when dragging a column out of ListMagic, source column header appearance was not refreshed correctly: fixed. . Deleting all lines in a list was possible then prevented the user to call the contextual menu again: now, it always remains at least a generic line mirroring headers then contextual menu may be called again. . When unchecking filtering check box in Action pane of the demo stack, filtering fields did not disappear if they were present: corrected. . Activating/deactivating lines numbering or check box column check boxes in Action pane of the demo stack, did not restore a possible sort made previously: corrected. _. Background stripes color modification in ListMagic Wizard was not taken into account: fixed. . Hidden columns feature (see 5.1. Columns feature in Installation section) did not work as explained in ListMagic docs: fixed (according to docs). . Manual columns resizing when all columns are shown and there is a horizontal scroll bar was not working as expected when resizing last columns: fixed. i. Edition mode was not completely switched off when resizing the card window or sorting a column: fixed. 6. Manually resizing column one threw an error: fixed. Frequently Asked Questions @$  1. May I... @1600  H 1 May I install ListMagic in any project I build?  "/ R May I start a project using the trial version then switch to the registered one?  "P $ May I use ListMagic with MetaCard?  ""  Is ListMagic supported?  " . Shall I be notified if ListMagic is updated?  ", 2 May I modify ListMagic code for my own purposes?  "0 & May I modify ListMagic pop up menus?  "$ * May I modify controls used by ListMagic?  "( G May I use the Rev Geometry Manager in my project that uses ListMagic?  "E 4 May I enhance ListMagic resizing to suit my needs?  "2 ) May I get no stripes in ListMagic list?  "'  May I change header colors?  " / May I get highlighted lines showing as usual?  "- A May I have columns right justified in my financial application?  "? K May I update my own project to take advantage of a new ListMagic version?  "I  2. Troubleshooting @1600  H : Why is not ListMagic sorted by lines number as expected?  "8 ; Why do I get permanent errors saying 'handler not found'?  "9 P Why does not ListMagic appear initialized when I open my project again in Rev?  "N 9 Why do not images show as expected in ListMagic header?  "7 > Why is not ListMagic resized as expected when resizing card?  "< Q Why is not ListMagic disabled as expected when my project is in the background?  "O P Why are not ListMagic highlighted lines refreshed as expected at card opening?  "N < Why are shortcuts to call ListMagic Find tool not working?  ": ; Why are three clicks sometimes necessary to edit an item?  "9 Q Why does the standalone builder complain it is unable to search for inclusions?  "O  3. Miscellaneous @1600  H P I have bought a new computer and ListMagic says it is a Trial Version again...  "N 3 Why are some ListMagic stacks password protected?  "1 +Note there is a Print... button (9 pages).    1. May I... $ RMost answers are YES because ListMagic was thought to be as flexible as possible: Q 2 May I install ListMagic in any project I build? @1600  / Yes: there is not any restriction to the number of ListMagic widgets you may install in any card of any of your projects, in a main stack or a sub stack.  0 3 <] ListMagic has no deadline.    `ListMagic is cross platform and you can install it in any of your Mac OS X and Win 32 projects.   ' B J O U ZIt has not been tested on Linux yet but it should work as expected on this platform also.    9 Back to List " S May I start a project using the trial version then switch to the registered one? @1600  P Yes: once registered, you will have just to use ListMagic wizard and modify (even without any effective modification) any widget you have set in your project to get rid of Trial Version addition: that is the magic!  - 0 @l   It means that you can use ListMagic as long as you want in your own projects using the trial version and decide later if it suits your needs to purchase it.   #y Back to List " % May I use ListMagic with MetaCard? @1600  " rYes: ListMagic had been thought also for MetaCard afficionados and all its features are fully compatible with MC.     ) 1@ But take care of the fact that many stacks in MC are always top leveled then verify the topstack is the right one in ListMagic wizard before clicking on the Install button...  Back to List "  Is ListMagic supported? @1600   Yes: as a registered user, you may ask any question to So Smart Software support to get help if you do not find the answer in ListMagic documentation.    3 "7 PF Back to List " / Shall I be notified if ListMagic is updated? @1600  , pYes: as a registered user, you will be notified by email and will be able to download any new version for free.  W Z n Back to List " 3 May I modify ListMagic code for my own purposes? @1600  0 Yes: if all built-in messages, commands and functions provided by ListMagic appear not enough, you may add all code you need to every list field or header group* to suit your needs.  ? B Kj fOf course, all this has to comply with ListMagic library** or has to be completely coded by yourself. * In such a case modify the code in LMGenericHeader group that is the template used to build any header and not in current header group: you will find it easily using application browser. $ $ 3 k** As for ListMagic library, this stack is protected and may just be used according to the Syntax section. j Back to List " ' May I modify ListMagic pop up menus? @1600  $ rYes: To display pop up menus, ListMagic uses a generic button named LMPopUp and its contents is built-on-the-fly.    ' D K& All code is in three places:   x1. In LMGenericHeader group script, modify the mouseDown handler where the pop up menu is built on-the-fly for headers.    / 8? o2. In the list field script, modify the mouseDown handler where the pop up menu is built on-the-fly for lists.   ( 1= T3. Accordingly, modify the menuPick handler in the script of LMPopUp hidden button.   # = D  Note that menus contents are automatically localized in English, French, German, Italian, Portuguese or Spanish (otherwise they will appear in English): see 6. Contextual menus localization in Syntax section for more information. 8 @8" Z @g ov Back to List " + May I modify controls used by ListMagic? @1600  ( sYes: you may modify some secondary properties of the list field only like its grid color, background pattern, etc.  2 5 ?3 No: don't modify any control in ListMagic header group. First because this header is built on-the-fly every time the widget is populated and, second, because all this relies on handlers in ListMagic library that might no longer work.  ( * 6 IAnd never rename any control (to rename a widget, use ListMagic wizard). Back to List " H May I use the Rev Geometry Manager in my project that uses ListMagic? @1600  E Yes: ListMagic handles its resizing by its own. So it is fully compatible with a geometry set using Rev Geometry Manager in your project. See Why is not ListMagic resized as expected when resizing card? in troubleshooting section below for more information.   < 7 Back to List " 5 May I enhance ListMagic resizing to suit my needs? @1600  2 *Yes: ListMagic handles automatically widgets resizing but assumes the topleft of any widget never changes. If you desire a more sophisticated resizing, just code widget's list field resizing* in a resizeStack handler in card's script without repeating what ListMagic does yet and pass the message.  ? B' i\  Y v* And add LMUpdateHeader mesage at the end of your handler to get widget header resized and repositioned accordingly.  @  @] Back to List " * May I get no stripes in ListMagic list? @1600  ' Yes: just edit the list field properties and suppress its background pattern. Now you may choose a background color if you wish it.   Back to List "  May I change header colors? @1600   No: unless you feel able to replace all images in ListMagic library by yours respecting their size in pixels and their name (but not their IDs: it does not matter).  0 2 ;i Back to List " 0 May I get highlighted lines showing as usual? @1600  - Yes: just edit the list field properties and suppress its highlight color then set highlighted text color to black in ListMagic settings.  s v  Back to List " B May I have columns right justified in my financial application? @1600  ? 9Not really: unfortunately, at the moment it is a Revolution limitation, but when Runrev will provide this feature for list fields, ListMagic will be updated accordingly. In the meantime, there are possible solutions using a mono-spaced font like Courier and by adding spaces even if it's not really satisfying...   y   Back to List " L May I update my own project to take advantage of a new ListMagic version? @1600  I Yes: it is easy. See 4. Once installed, how to upgrade my project according to a new version of ListMagic? in Installation section.   U j n z Back to List " 2. Troubleshooting $ DMost problems come from some inattention to ListMagic requirements: C  ; Why is not ListMagic sorted by lines number as expected? @1600  8 When running the trial version, sort by lines number can't work because the list is permanently rebuilt to add Trial Version lines but once registered, this feature works exactly as expected. o o |C Back to List " < Why do I get permanent errors saying 'handler not found'? @1600  9 WVerify that ListMagic library is in use: probably it is not because you may have suppressed its compulsory 'start using' in the stack's script preOpenStack handler of your project. First put ListMagic library in use in the last pane of the message box then revise your code. Note that ListMagic library is something like "SSSLMLib#".   '/ Back to List " Q Why does not ListMagic appear initialized when I open my project again in Rev? @1600  N kListMagic design assumes that you feed any widget using LMPopulate command (at preOpenStack for instance).   a (And populating a widget initializes it. wIf you don't, ListMagic widget is saved with your project in its current state and appears again as it was when saved.   ^ Back to List " : Why do not images show as expected in ListMagic header? @1600  7 It may happen that you have already images in your project with the same IDs as those used by ListMagic images and an ID conflict is resulting. In such a case, just change images IDs in ListMagic library stack (or in your project). D D L* v f TAs ListMagic code does not rely on hard coded IDs, all will work later as expected. S Back to List " ? Why is not ListMagic resized as expected when resizing card? @1600  < f1. Your settings said 'don't resize' or just 'resize in a way': use ListMagic wizard to correct this. D D T 2. After ListMagic installation, you have added a resizeStack handler and did not pass the message allowing ListMagic library to trigger it: add pass resizeStack to your code. 2 2 =r Back to List " R Why is not ListMagic disabled as expected when my project is in the background? @1600  O After ListMagic installation, you have added suspendstack and resumeStack handlers and did not pass these messages allowing ListMagic library to trigger them: add pass to your code. - - 9 > Iv Back to List " Q Why are not ListMagic highlighted lines refreshed as expected at card opening? @1600  N After ListMagic installation, you have added preOpenCard and/or closeCard handlers and did not pass these messages allowing ListMagic library to trigger them: add pass to your code. - - 8 @ Iv Back to List " = Why are shortcuts to call ListMagic Find tool not working? @1600  : After ListMagic installation, you have added a commandKeyDown handler and did not pass the message allowing ListMagic library to trigger it: add pass commandKeyDown to your code. / / =u Back to List " < Why are three clicks sometimes necessary to edit an item? @1600  9 To edit an item, ListMagic waits for a second mouseDown: if you are too fast, a second mouseDown is understood as a doubleMouseUp (double click).   w Back to List " R Why does the standalone builder complain it is unable to search for inclusions? @1600  O 'List Magic library included in your project is password protected: this does not allow the standalone builder to search for required inclusions automatically. Just use the Select inclusions for the standalone application manual option in standalone builder's General pane and all will run fine. 0 J Back to List " 3. Miscellaneous $ Q I have bought a new computer and ListMagic says it is a Trial Version again... @1600  N aIf you are a registered user, just contact So Smart Software support to get this problem solved. + "+ D Back to List " 4 Why are some ListMagic stacks password protected? @1600  1 Three substacks are password protected in ListMagic to protect those who have paid for using the software and, of course, their code is strictly related to ListMagic itself and to it only. * * 4 Back to List " : #How to master ListMagic by script? @$" Documentation in this section is very detailed: it is a complete tutorial to help less advanced users, step by step and with numerous examples. More advanced users will know where to pick up what they need. 8 8 I You will notice that ListMagic syntax is very simple to use and, above all, when there is one widget per card. Most parameters have a default value automatically handled by Listmagic so they may be often omitted.      Syntax documentation contents @$  1. Getting started @1600  H 5 2. Messages sent by the widget to the current card @1600  H2 5 2.1. Selection is changed in ListMagic (left click)  "3  2.2. List has been edited  "  2.3. List has been filtered  " 2.4. Double click in ListMagic  " / 2.5. A line is currently hovered in ListMagic  "- 7 2.6. A check box status has been changed in ListMagic  "5 = 2.7. Columns order has been reorganized using drag and drop  "; - 2.8. Column width has been changed manually  "+  2.9. A column has been sorted  " # 3. Custom commands and functions @1600  H + 3.1. How to display my data in ListMagic?  ") & 3.2. How to retrieve displayed data?  "$ / 3.3. How to know which lines are highlighted?  "- 6 3.4. How to know which mini check boxes are checked?  "4 % 3.5. How to know current list sort?  "#  3.6. How to highlight lines?  " 0 3.7. How to check or uncheck mini check boxes?  ".  3.8. How to sort ListMagic?  " ( 3.9. How to resize one or all columns?  "&  3.10. How to manage find?  "  3.11. How to print ListMagic?  "  3.12. How to export data?  "  4. Errors handling @1600  H  5. Cross platform handling @1600  H 0 6. Contextual menus and tooltips localization @1600  H- ,Note there is a Print... button (34 pages).    1. Getting started $ 2After having installed ListMagic in your project:     ^1. Build a simple tab/tab/return plain text list and feed ListMagic using LMPopulate command. J HJ T j2. Add code needed in pre-installed handlers in the card's script to handle events you are interested in.  You are done! @ @  Could it get any easier? @ 32. Messages sent by the widget to the current card $2 Eight messages are sent by ListMagic to the current card to account for user's actions and let you interact with ListMagic dynamically: @ @ @$ <5 q z Al these messages might not apppear useful for you: they hav been planned to take into account all possible user's actions without any restriction. Just use the ones you are interested in. W LMSelectionChanged message when selection is changed in the list field (left click) @19046  "    # ,* J LMListEdited message when an item is changed by editing the list field @19046  "      / @ LMListFiltered message when the list field has been filtered @19046  "   & H LMMouseDoubleUp message when a double click occurs in the list field @19046  "    " . D LMLineHovered message when any line is hovered in the list field @19046  "    " 1 H LMCheckBoxChanged message when a mini check box highlight is changed @19046  "    $ < > LMColumnsReorganized message when columns order is changed @19046  "    % 2 = LMColumnWidthChanged message when column width is changed @19046  "    % 1 * LMSort message when a column is sorted @19046  "       MList above is made of hypertext links that go directly to their description. @L If you have checked Pre-install ListMagic messages handlers check box in ListMagic Wizard, you will find corresponding handlers pre-installed in the script of any card where you have installed the widget.  ' ; I Y @\p For instance, you will find: @  on LMMouseDoubleUp pLineNo @ @ @ 1 -- sent when a double click occurs in the list @0 * -- pWidget is the long ID of the widget @) -- pLineNo is the line number @  -- write your code here: @  @  end LMMouseDoubleUp @ @ @ 0And you will replace comments by what you need. Writing a specific code to trigger any of these messages remains optional and just depends on your needs and of course, you may suppress any pre-installed handler you are not interested in. @9 @9 @It 42.1. Selection is changed in ListMagic (left click) @3 |LMSelectionChanged , is sent to the current card when selection is changed in ListMagic list field. @N @N @b 4 is the long ID of the widget list field* @ @ @ O is current highligted lines numbers as a comma separated list @ @ @4 Example: @ - on LMSelectionChanged pWidget,pHilitedLines @ @ @) ' local tCurSelLines,tCustomersNames @ @~~  @  ----- @ @ ~~ # if pHilitedLines <> empty then @ @ @ @~~~~ @ @ V put LMExtractLines(pHilitedLines) into tCurSelLines -- see this function below @ @~~  @  @~~~~) @- @ ~~; < -- returns a tab tab return list of specified lines @ @ ~~4  set the itemDel to tab @ @~~  @  @~~~~  @ @~~ @ @~~~~ @ @~~~~ 2 repeat for each line tLine in tCurSelLines @ @ @  @~~~~ @ @~~~~ @ @~~~~ @ @~~~~" @$ 9 put item 1 of tLine & cr after tCustomersNames @ @~~  @  @~~~~ @ @~~ @ @~~~~ @ @~~~~  @" @~~~~# @(  end repeat @ @ 7 put tCustomersNames into fld "CurrentCustomers" @ @~~  @  @~~~~ @ @~~~~  @# @~~$ else @ @ - put empty into fld "CurrentCustomers" @ @~~  @  @~~~~  @ @~~~~ @ @~~~~ @ @~~ end if @ @  end LMSelectionChanged @ @ @ Z If there is more than a widget in the card, you will test value to know which: @Y 1 if the short name of pWidget = "Customers" then @ @ @ @~~~~ @ @~~ @  @~~ @ @~~~~ @ @~~ @+ @,  etc. @ Back to messages list " 2.2. List has been edited  @LMListEdited ,,,, is sent to the current card when an item has been edited by the user and effectively changed in ListMagic list field. The message is sent when editing is allowed and completed. If edited item is in a sorted column, this column is sorted again if needed. @ 4 A2 s*  4 is the long ID of the widget list field* @ @ @  is the item number @ @  is the line number @ @ $ is previous item value @ @ @  is new item value @ @ @ Example: ; on LMListEdited pWidget,pItem,pLineNo,pOldValue,pNewValue @ @ @7  local tHiliteLines,tID @ @ @  ----- @ @ D if the number of items of LMFind(pNewValue,true,pItem) > 1 then @ @ @ @ @  @  @ @ @ @ @ @ @ @/ @3 @= @> @? " -- see this function below @ @ W answer warning pNewValue && "can't be referenced twice." with "Cancel" as sheet @ @ @  @ @ @# @? @@ @D @E @M @N @P @Q  lock screen @ @ @  @  9 put the hilitedLines of pWidget into tHiliteLines @ @ @  @  @ @ @ @ @ @' @+  set the itemdel to tab @ @2 @2  @2  @2 @2 @2 @2 @2 @2 , if the uCheckBox of fld "LMBox" then @ @ @  @  @ @ @ @ @ @ @& @' Z -- this propery indicates that value has been changed in the check boxes column @ @ O Z put the imageSource of char 1 of item pItem of line pLineNo of pWidget into tID @ @  @  @ @ @ @ @ @  @! @% @& @' @( @* @+ @/ @6 @8 @9 @= @F @H @Q @U X put the cSSSHeader["uCheckBoxesReplaceChar"] of pWidget & " " & pOldValue \ @ @  @  @ @ @ @5 @7 @9 @D @I 5 into item pItem of line pLineNo of pWidget @ @  @ @ @ @ @ @ @! @* @, X set the imageSource of char 1 of item pItem of line pLineNo of pWidget to tID @ @  @  @ @ @ @ @ @  @! @% @& @' @( @* @+ @/ @6 @8 @9 @= @F @H @Q @S else @ @ C put pOldValue into item pItem of line pLineNo of pWidget @ @  @ @ @ @ @! @( @* @+ @/ @8 @:  end if @ @ 7 set the hilitedLines of pWidget to tHiliteLines @ @ @  @  @ @ @ @ @ @' @)  unlock screen @ @ @  @ end if @ @  end LMListEdited @ @ @ Z If there is more than a widget in the card, you will test value to know which: ; @; 1 if the short name of pWidget = "Customers" then @ @ @ @ @ @ @  @ @ @ @ @ @+ @,  etc. Back to messages list " 2.3. List has been filtered  {LMListFiltered ,, is sent to the current card when current list has been filtered by the user.  @ .7 e y 4 is the long ID of the widget list field* @ @ @ is the column number @ @ * is the pattern used to filter @ @ @ Example: , on LMListFiltered pWidget,pColumn,pPattern @ @ @  @  global gFilterUseds @ @ @ ----- @ @ 1 put pColumn,pPattern & cr after gFilterUseds @ @ @ @ @ @ @# - -- for later processing or to feed a log @ @(  end LMListFiltered @ @ @  Z If there is more than a widget in the card, you will test value to know which: ; @; 1 if the short name of pWidget = "Customers" then @ @ @ @ @ @ @  @ @ @ @ @ @+ @,  etc. Back to messages list " 2.4. Double click in ListMagic  tLMMouseDoubleUp , is sent to the current card when a double click occurs in ListMagic list field. @  @ $# G S 4 is the long ID of the widget list field* @ @ @  is the line number @ @ Example: $ on LMMouseDoubleUp pWidget,pLineNo @ @ @  local tCurName @ @ @ ----- @ @ P put line pLineNo of LMExtractColumns("First Name,Name",space) into tCurName @ @ @ @ @ @ @ @) @@ @B @F + -- see LMExtractColumns function below @ @& < -- tCurName will contain something like 'Oliver Morgan' @ @7 N answer info "Edit medical card of" && tCurName &"?" with "OK" or "Cancel" @ @ @  @  @ @ @& @4 @7 @8 @< @= @A @B @D @E etc. @  end LMMouseDoubleUp @ @ @ Z If there is more than a widget in the card, you will test value to know which: ; @; 1 if the short name of pWidget = "Customers" then @ @ @ @ @ @ @  @ @ @ @ @ @+ @,  etc. Back to messages list " .2.5. A line is currently hovered in ListMagic - nLMLineHovered , is sent to the current card when a line is hovered in ListMagic list field. @  @ "# E T VNote that this message is not sent repeatedly but only when the hovered line changes. 4 is the long ID of the widget list field* @ @ @ M is the line number or is empty if the mouse leaves the list field @ @ @ @ , Example: " on LMLineHovered pWidget,pLineNo @ @ @  local tCurName @ @ @ ----- @ @  if pLineNo <> empty then @ @ @ @ @ @ T put line pLineNo of LMExtractColumns("First Name,Name","_") into tCurName -- @ @ @  @  @ @ @ @, @A @C @G @Q . -- see LMExtractColumns function below @ @& C -- tCurName will contain something like 'Jennifer_Thompson' @ @;  DisplayPhoto tCurName @ 6 -- a custom command you have written elsewhere @ @. else @ @  HidePhoto @ 6 -- a custom command you have written elsewhere @ @. end if @ @  end LMLineHovered @ @ @ Z If there is more than a widget in the card, you will test value to know which: ; @; 1 if the short name of pWidget = "Customers" then @ @ @ @ @ @ @  @ @ @ @ @ @+ @,  etc. Back to messages list " 62.6. A check box status has been changed in ListMagic 5 LMCheckBoxChanged ,, is sent to the current card when a check box status has been changed in ListMagic list field.  @  @ 0# S c* 4 is the long ID of the widget list field* @ @ @  is the line number @ @ H is a Boolean (true = highlighted or false = non highlighted) @ @ @0 Example: . on LMCheckBoxChanged pWidget,pLineNo,pStatus @ @ @  @' 1 local tCurCheckedLines,tText,tCustomersNames @ @ @ ' ----- @ @ T put LMGetCheckedBoxes(pWidget) into tCurCheckedLines -- see this function below @ @ @ @# @' @9 P -- returns a comma delimited list of all lines where a check box is checked @ @K O put LMExtractLines(tCurCheckedLines) into tText -- see this function below @ @ @" @) @- @4 9 -- returns a tab tab return list of specified lines @ @4  set the itemDel to tab @ @ @ @ @  @  @ @ @ @ ( repeat for each line tLine in tText @ @ @  @  @ @ @ @ @ @ @! 6 put item 1 of tLine & cr after tCustomersNames @ @ @  @  @ @ @ @ @ @ @ @  @%  end repeat @ @ 4 put tCustomersNames into fld "CurrentCustomers" @ @ @ @ @ @ @  @!  end LMCheckBoxChanged @ @ @  @ Z If there is more than a widget in the card, you will test value to know which: ; @; 1 if the short name of pWidget = "Customers" then @ @ @ @ @ @ @  @ @ @ @ @ @+ @,  etc. Back to messages list " <2.7. Columns order has been reorganized using drag and drop ; LMColumnsReorganized ,, is sent to the current card when columns order has been reorganized using drag and drop in ListMagic header.  @; =! ^6  4 is the long ID of the widget list field* @ @ @ ^ and are columns numbers (as they appear in your raw data list) @' @' @6' Example: ; on LMColumnsReorganized pWidget,pSourceColumn,pDestColumn @ @ @  @4 S put the cSSSHeader["uCurHeaderLabels"] of pWidget into fld "CurrentHeadersList" @ @ @ @ @ @ @( @* @, @5 @9 @: @= @> 5 -- a cr delimited list of current headers labels @ @0 S -- see 'How are widget settings handled' at the bottom of Installation section @ @N Q -- to learn about widget properties you may use also in your scripts as here @ @L  end LMColumnsReorganized @ @ @  @ Z If there is more than a widget in the card, you will test value to know which: ; @; 1 if the short name of pWidget = "Customers" then @ @ @ @ @ @ @  @ @ @ @ @ @+ @,  etc. Back to messages list " ,2.8. Column width has been changed manually + LMColumnWidthChanged ,, is sent to the current card when a column width has been changed manually using ListMagic header ability.  @! 5# X& ~ YNote that this message is sent when a manual column resizing is completed (mouse is up). 4 is the long ID of the widget list field* @ @ @ is the column number @ @ + is the column width in pixels @ @ Example: 3 on LMColumnWidthChanged pWidget,pColumn,pNewWidth @ @ @  @ \ if pNewWidth > 300 then answer info "You would be at ease if you enlarged this window." @ @ @ @ @ @ @ @ @" @# @' @(3  end LMColumnWidthChanged @ @ @  Z If there is more than a widget in the card, you will test value to know which: ; @; 1 if the short name of pWidget = "Customers" then @ @ @ @ @ @ @  @ @ @ @ @ @+ @,  etc. Back to messages list " 2.9. A column has been sorted  LMSort ,, is sent to the current card when a column width has been sorted using ListMagic header ability.  @" (# K g 4 is the long ID of the widget list field* @ @ @ is the column number @ @ ) is ascending or descending @ @ @ @ Example: & on LMSort pWidget,pColumn,pDirection @ @ @  @  9 put "Sorted" && pDirection && "by" && line pColumn \ @ @ @ @ @ @" @& @* @. L of the cSSSHeader["uCurHeaderLabels"] of pWidget into fld "CurrentSort" @ @ @ @ @ @ @( @* @, @5 @9 @: @= @> 1 -- something like 'Sorted ascending by Name' @ @, S -- see 'How are widget settings handled' at the bottom of Installation section @ @N Q -- to learn about widget properties you may use also in your scripts as here @ @L end LMSort @ @ @  Z If there is more than a widget in the card, you will test value to know which: ; @; 1 if the short name of pWidget = "Customers" then @ @ @ @ @ @ @  @ @ @ @ @ @+ @,  etc. Back to messages list " !3. Custom commands and functions $ ListMagic provides a full set of fifteen commands and functions that allow to master it completely including searching, printing and export. @ @ iProbably you will not use all of them: in simple projects LMPopulatemight appear the only one you need! @: @: D @E# 3 LMPopulate command to display data in ListMagic @19046  "      % @) W LMExtractList function to get current displayed data as a tab tab return usual list @19047  "     7 ? LMGetHilitedLines function to get current highlighted lines @19047  "    ! 6 LMSetHilitedLines command to set highlighted lines @19046  "      F LMGetCheckedBoxes function to get current mini check boxes checked @19047  "    !$ B LMSetCheckedBoxes command to check of uncheck mini check boxes @19046  "     ! [ LMAdjustColumn command to auto size a column (or all) according to its (their) contents @19046  "     8" L LMExtractColumns function to get any column displayed as a list of lines @19047  "      . ] LMExtractLines function to get one or several lines in the list as a tab/tab/return value @19047  "     6& 7 LMGetCurSort function to get ListMagic current sort @19047  "     @ ) + LMSetSort command to set ListMagic sort @19046  "       @ % 8 LMPrint command to print ListMagic in a friendly way @19046  "       @ % & 3 LMExport function to export ListMagic to a file @19047  "       @ ( \ LMFind function to get all positions of a pattern in ListMagic (for you, the programmer) @19047  "      " @8 A \ LMFindNext command to find a pattern (complete Find tool for end users of your software) @19046  "      '4 ]Some of these routines use parameters that make them really powerful while remaining simple. @\ $They are explained in detail below. @# MList above is made of hypertext links that go directly to their description. @L VForewarning: How to know if there are are ListMagic widgets in a card and which ones? U In every card where there is one or more widget, ListMagic installs a custom property set named cSSHeader with two custom properties: among them, uLMWidgets lists as lines the short names of the widgets in this card. 1 1 :& ` i)  < 1Then a simple function as follows makes the job:  function WhichWidgets pCard @ 1 return the cSSSHeader["uLMWidgets"] of pCard @ @ @  @  @ @ @& @( @*  end WhichWidgets @ 5 Where is the long ID (or name) of any card. @4 ZThis function will return empty or a list of all ListMagic widgets in the specidied card: 1 1 : > put WhichWidgets(the long ID of cd "Sales") into tAllWidgets @ @) @- @1 GThen you can get easily the complete identifier of a listMagic widget: 5 5 >  if tAllWidgets <> empty then @ @ @ @ @ @ P put the long ID of fld (line 1 of tAllWidgets) of cd "Sales" into tFistWidget @ @ @ @  @  @ @ @ @ @ @ @ @ @ @ @  @! @$ @1 @3 @4 @7 @? @C  etc. *3.1. How to display my data in ListMagic? ) The format of any displayed list in ListMagic is a plain text tab/tab/return list as you are used to with any Revolution list field. @1600 % @& 0 5 S3 YThe widget makes its own of the whole display of such a list according to your settings. @X M To display a list in ListMagic, use LMPopulate [,] command: @1600  @ @ @  " & @( @0 ] is a plain text tab/tab/return list the first line of which contains headers labels: @   +1 P & tab & & tab &
& tab & -- headers labels      % , 7 < @> T & tab & & tab & & tab & -- line 1 of data B @B T & tab & & tab & & tab & -- line 2 of data B @B  etc.  3 is the long ID of the widget list field*  @ @! k You may omit if the target card is the current card and there is only one widget in this card**.   @[ I So in most cases the first example below is enough to achieve the goal. @H & LMPopulate tList -- using a variable @ @ F LMPopulate the uRefList of this cd -- using a preset custom property @ @  @ @ @ @ @  @! @# @$! = LMPopulate url ("file:" & ) -- using a text file @ @  @ @ @ @ @  @(  etc. 3 -- in current card where there is one widget only @2 1 LMPopulate tList,the long ID of fld "Customers" @0 c -- a widget named 'Customers' in the current card when there is more than one widget in this card @b A LMPopulate tList,the long ID of fld "Customers" of card "Sales" @@ / -- a widget named 'Customers' in another card @. U Every time you populate a ListMagic widget, its header is automatically refreshed. @1600   %/ If you populate again a widget by script during the same session and allow multiple selection, it is a good idea to add the following line of code: @1600 u v ) send "SetLastClickedLineNo" to  @ @ @ @ @ @ @  This will clean up a script local variable storing last clicked line number that is used to extend selection when the shift key is pressed. Back to syntax list " %3.2. How to retrieve displayed data? $ b To retrieve current data from ListMagic, use LMExtractList( [,]) function. @1600  @ @) @/ @<% F = false will return the columns seen by the user only. @ @ @/ V = true will return all columns including hidden data if they are some. @ @ @/ @D @T 3 is the long ID of the widget list field*  @ @! k You may omit if the target card is the current card and there is only one widget in this card**.   @[ , You may omit if it is false.  @ @% @* I So in most cases the first example below is enough to achieve the goal. @H # put LMExtractList() into tCurList @ @ @ @ 5 put LMExtractList(false) into tCurList -- identical @ @ @ @ @' Q -- columns seen by the user only in current card where there is one widget only @P B put LMExtractList(,the long ID of fld "Customers") into tCurList @ @0 @4 @8 T put LMExtractList(false,the long ID of fld "Customers") into tCurList -- identical @ @5 @9 @= @F @ -- columns seen by the user only in a widget named 'Customers' @? H -- in the current card when there is more than one widget in this card @G T put LMExtractList(true,the long ID of fld "Customers" of cd "Sales") into tCurList @ @B @F @J > -- all columns of a widget named 'Customers' in another card @= Note: passing true or false for parameter when the number of columns has been set to Auto does not change anything because in this case there are not hidden data. @ @_ @c @gI Back to syntax list " e To retrieve one or several lines from ListMagic, use LMExtractLines( [,]) function. @1600 ' @( @1 @7 @E I may be a line number or a comma delimited list of line numbers. @ @ @ @!& @G 3 is the long ID of the widget list field*  @ @! k You may omit if the target card is the current card and there is only one widget in this card**.   @[ I So in most cases the first example below is enough to achieve the goal. @H & put LMExtractLines(1) into tCurLines @ @ @ @ @ @ -- in current card where there is one widget only (first line) @? 2 put LMExtractLines(tHilitedLines) into tCurLines @ @ @ @# @' b -- using a variable containing a list of integers in current card where there is one widget only @a Q put LMExtractLines(tHilitedLines,the long ID of fld "Customers") into tCurLines @ @ @> @B @F S -- a widget named 'Customers' in current card where there is more than one widget @R _ put LMExtractLines(tHilitedLines,the long ID of fld "Customers" of cd "Sales") into tCurLines @ @ @L @P @T / -- a widget named 'Customers' in another card @.  etc. @ Back to syntax list " k To retrieve any column from ListMagic, use LMExtractColumns( [, [,]]) function. @1600  @ @' @- @=- Y is a column number or the name of a column (the name displayed in the header) @ @ @ @  @5# G Or a comma delimited list of column numbers or names (but not mixed). @ @ @- @/ @5 \ is a delimiter used in the returned value when more than one column is specified. @ @$ @3( J This delimiter may count more than one char: comma & space for instance. @I , is the long ID of the list field*  @ @ k You may omit if the target card is the current card and there is only one widget in this card**.   @[ * You may omit when pDelim = tab.   @ @ I So in most cases the first example below is enough to achieve the goal. @H 6 put LMExtractColumns(tColumnNo) into tColumnContents @ @ @ @! @% D -- using a variable in current card where there is one widget only @C * put LMExtractColumns("Name") into tNames @ @ @ @ @" A -- column "Name" in current card where there is one widget only @@ @ put LMExtractColumns(item 1 of LMGetCurSort()) into tCurColumn @ @ @, @0 @4 I -- current sorted column in current card where there is one widget only @ @G Q put LMExtractColumns("Phone",the long ID of fld "Customers") into tPhoneNumbers @ @ @: @> @B A -- column "Phone" in a widget named 'Customers' in current card @@ 2 -- if there is more than one widget in this card @1 _ put LMExtractColumns("Phone",the long ID of fld "Customers" of cd "Sales") into tPhoneNumbers @ @ @H @L @P A -- column "Phone" in a widget named 'Customers' in another card @@ And for multiple columns: @ E put LMExtractColumns("Name,Phone",colon & space) into tPhoneNumbers @ @ @. @2 @6 a -- all phone numbers returned as : in current card where there is one widget only @` ? put LMExtractColumns("City,State",comma & space) into tCities @ @ @. @2 @6 Z -- all cities returned as , in current card where there is one widget only @Y l put LMExtractColumns("City,State",comma & space,the long ID of fld "Customers" of cd "Sales") into tCities @ @ @[ @_ @c ; -- all cities returned as , in another card @: * put LMExtractColumns("2,1,5") into tData @ @ @ @ @# f -- columns 2,1 and 5 returned as a tab delimited list in current card where there is one widget only @e  etc. @ o Value returned is a carriage return delimited list of all columns items separated by the specidied delimiter. @n c LMExtractColumns is complementary to LMExtractList but allows much more specific returned values: @b * If five columns are shown, for instance: @) P LMExtractColumns("1,2,3,4,5") will return the same value than LMExtractList(). @O Back to syntax list " .3.3. How to know which lines are highlighted? - ] To know which lines are currently highlighted, use LMGetHilitedLines([]) function. @1600 4 5 @7 @F 3 is the long ID of the widget list field*  @ @! k You may omit if the target card is the current card and there is only one widget in this card**.   @[ I So in most cases the first example below is enough to achieve the goal. @H / put LMGetHilitedLines() into tCurHilitedLines @ @ @ @ 3 -- in current card where there is one widget only @2 M put LMGetHilitedLines(the long ID of fld "Customers") into tCurHilitedLines @ @3 @7 @; S -- in a widget named 'Customers' in current card if there is more than one widget @R [ put LMGetHilitedLines(the long ID of fld "Customers" of cd "Sales") into tCurHilitedLines @ @A @E @I / -- a widget named 'Customers' in another card @. + Returned value is a comma delimited list.   )  For instance: 1,2,5 Back to syntax list " 53.4. How to know which mini check boxes are checked? 4 d To know which mini check boxes are currently checked, use LMGetCheckedBoxes([]) function. @1600 ; < @> @M 3 is the long ID of the widget list field*  @ @! k You may omit if the target card is the current card and there is only one widget in this card**.   @[ I So in most cases the first example below is enough to achieve the goal. @H / put LMGetCheckedBoxes() into tCurCheckedBoxes @ @ @ @ 3 -- in current card where there is one widget only @2 M put LMGetCheckedBoxes(the long ID of fld "Customers") into tCurCheckedBoxes @ @3 @7 @; ] -- a widget named 'Customers' in current card if there is more than one widget in this card @\ [ put LMGetCheckedBoxes(the long ID of fld "Customers" of cd "Sales") into tCurCheckedBoxes @ @A @E @I / -- a widget named 'Customers' in another card @. + Returned value is a comma delimited list.   )  For instance: 3,6,18 Back to syntax list " $3.5. How to know current list sort? # O To know which is the current list sort, use LMGetCurSort() function. @1600 - . @0 @: 3 is the long ID of the widget list field*  @ @! k You may omit if the target card is the current card and there is only one widget in this card**.   @[ I So in most cases the first example below is enough to achieve the goal. @H " put LMGetCurSort() into tCurSort @ @ @ @ 3 -- in current card where there is one widget only @2 @ put LMGetCurSort(the long ID of fld "Customers") into tCurSort @ @. @2 @6 a -- a widget named 'Customers' in the current card if there is more than one widget in this card @` N put LMGetCurSort(the long ID of fld "Customers" of cd "Sales") into tCurSort @ @< @@ @D / -- a widget named 'Customers' in another card @. 7 If there is no current sort, returned value is empty.  @ 0 5 U If there is a current sort, returned value consists of three comma delimited items:  @ @8 @S @ ,
, or 0 0 2 E always refers to the right column in your data list C disregarding the fact that lines numbering is possibly displayed. k When line numbering is active and sort done by line numbers, returned value will always be 0,, Back to syntax list " 3.6. How to highlight lines?  N To set highlighted lines use LMSetHilitedLines [,] command. @1600   @! @0 J may be a line number or a comma delimited list of lines numbers. @ @ @ @!' @H 3 is the long ID of the widget list field*  @ @! k You may omit if the target card is the current card and there is only one widget in this card**.   @[ I So in most cases the first example below is enough to achieve the goal. @H  LMSetHilitedLines "3,5,7" @ . LMSetHilitedLines tLines -- using a variable @ @ 3 -- in current card where there is one widget only @2 9 LMSetHilitedLines tLines,the long ID of fld "Customers" @8 S -- in a widget named 'Customers' in current card if there is more than one widget @R F LMSetHilitedLines tLines,the long ID of fld "Customers of cd "Sales" @E 2 -- in a widget named 'Customers' in another card @1 ' LMSetHilitedLines LMGetCheckedBoxes() @& g -- selects all lines where a mini check box is checked in current card where there is one widget only @b @b  etc. @ Back to syntax list " /3.7. How to check or uncheck mini check boxes? . ` To set any mini check box status, use LMSetCheckedBoxes , [,] command. @1600 ' ( @* @9& \ may be the string All or a line number or a comma delimited list of lines numbers. @ @ @ @" @/ @3 @E A may be a Boolean (true or false) or the string Toggle. @ @ @  @$ @) @9 @? 3 is the long ID of the widget list field*  @ @! k You may omit if the target card is the current card and there is only one widget in this card**.   @[ I So in most cases the first example below is enough to achieve the goal. @H  LMSetCheckedBoxes "All",true @ f -- checks all boxes disregarding their current status in current card where there is one widget only @e LMSetCheckedBoxes "2,5,7",true @ N -- checks boxes 2, 5 and 7 disregarding their current status in current card @M # -- where there is one widget only @" ! LMSetCheckedBoxes "2,5,7",false @ P -- unchecks boxes 2, 5 and 7 disregarding their current status in current card @O # -- where there is one widget only @" $ LMSetCheckedBoxes "2,5,7","Toggle" @# T -- switches boxes 2, 5 and 7 status in current card where there is one widget only @S " LMSetCheckedBoxes "All","Toggle" @! M -- switches all boxes status in current card where there is one widget only @L A LMSetCheckedBoxes "All","Toggle",the long ID of fld "Customers" @@ L -- switches all boxes status of a widget named 'Customers' in current card @K 2 -- if there is more than one widget in this card @1 O LMSetCheckedBoxes "All","Toggle",the long ID of fld "Customers" of cd "Sales" @N L -- switches all boxes status of a widget named 'Customers' in another card @K  etc. Back to syntax list " 3.8. How to sort ListMagic?  P To sort ListMagic, use LMSetSort [, [,]] command. @1600     @ @"- Y is a column number or the name of a column (the name displayed in the header). @ @  @ @ @4# @W ) is ascending or descending. @ @ @ @ @' 3 is the long ID of the widget list field*  @ @! 5 You may omit if direction is ascending.   @ @ @* @3 k You may omit if the target card is the current card and there is only one widget in this card**.   @[ I So in most cases the first example below is enough to achieve the goal. @H LMSetSort 1 @ & LMSetSort 1,"ascending" -- identical @ @ O -- sorts by column 1 ascending in current card where there is one widget only @N A LMSetSort tColumnNo,"descending",the long ID of fld "Customers" @@ U -- sorts a widget named 'Customers' by column 'tColumNo' descending in current card @T 2 -- if there is more than one widget in this card @1 @ LMSetSort "City",,the long ID of fld "Customers" of cd "Sales" @? P -- sorts by column 'City' ascending a widget named 'Customers' in another card @O A When line numbering is active and to sort by line numbers, use:  LMSetSort 0 [,]  @ Back to syntax list " '3.9. How to resize one or all columns? & ` To resize one or all columns, use LMAdjustColumn [] [,] [,]]] command. @1600 # @$ @2- M is width set for all columns (a value in pixels) or the string Auto @H @H _ (meaning that every column will be adjusted according to its contents, header label included) @^ X is a column number or the name of a column (the name displayed in the header) @ @  @ @ @4#  or the string All @ @ - (meaning that all columns will be adjusted) @, 3 is the long ID of the widget list field*  @ @! ) You may omit if is Auto   @ @  @ @ @$ * You may omit if is All   @ @  @ @! @& k You may omit if the target card is the current card and there is only one widget in this card**.   @[ I So in most cases the first example below is enough to achieve the goal. @H  LMAdjustColumn @ * LMAdjustColumn "Auto","All" -- identical @ @ L -- auto resizes all columns in current card where there is one widget only @K 5 LMAdjustColumn "All",the long ID of fld "Customers" @4 K -- auto resizes all columns of a widget named 'Customers' in current card @J 2 -- if there is more than one widget in this card @1 C LMAdjustColumn "All",the long ID of fld "Customers" of cd "Sales" @B K -- auto resizes all columns of a widget named 'Customers' in another card @J  LMAdjustColumn ,2 @ & LMAdjustColumn "Auto",2 -- identical @ @ I -- auto resizes column 2 in current card where there is one widget only @H  LMAdjustColumn 100,2 @ R -- resizes column 2 to 100 pixels in current card where there is one widget only @Q  LMAdjustColumn 100 @ ' LMAdjustColumn 100,"All" -- identical @ @ U -- resizes all columns to 100 pixels in current card where there is one widget only @T : LMAdjustColumn ,the cSSSHeader["uCurHeader"] of  @ @ @ @ @, @. @0 U -- auto resizes the column the header tab of which was the last clicked by the user @ @S 3 -- in current card where there is one widget only @2  etc. Note: When width is set to Auto and column's formatted width exceeds 300 pixels, ListMagic limits the width of the column to 300 pixels.    i Back to syntax list " 3.10. How to manage find?  : ListMagic handles this feature from two points of view: @1600    . > 1. From your programmer point of view using LMFind function. - - 3 < 2. From the user's point of view using LMFindNext command. ( ( 2 5 To know all occurrences of a pattern in ListMagic, @1600 ) * 3 G use LMFind(, [, [,]]) function.     @ : # is the string to search. @ @ @! . is a Boolean (true or false). @ @ @" @& @+ Y is a column number or the name of a column (the name displayed in the header). @ @  @ @ @4$ 6 may be left empty to search the whole list. @4 @4 3 is the long ID of the widget list field*  @ @! - You may omit if if is false.   @ @ k You may omit if the target card is the current card and there is only one widget in this card**.   @[ G So in most cases first examples below are enough to achieve the goal. @F Searching a specified column:  + put LMFind("Barton",,"Name") into tOutput @ @ @ @" = put LMFind("Barton",false,"Name") into tOutput -- identical @ @ @# @' @0 Z -- searches for 'Barton' in column "Name" in current card where there is one widget only @Y -- 'Bartony' will be found too @ * put LMFind("Barton",true,1) into tOutput @ @ @ @! [ -- searches for exact 'Barton' in column 1 in current card where there is one widget only @Z  -- 'Bartony' will be ignored @ E put LMFind("Barton",,1,the long ID of fld "Customers") into tOutput @ @4 @8 @< W put LMFind("Barton",false,1,the long ID of fld "Customers") into tOutput -- identical @ @9 @= @A @J T -- searches for 'Barton' in column 1 of a widget named 'Customers' in current card @S 2 -- if there is more than one widget in this card @1 -- 'Bartony' will be found too @ S put LMFind("Barton",,1,the long ID of fld "Customers" of cd "Sales") into tOutput @ @B @F @J T -- searches for 'Barton' in column 1 of a widget named 'Customers' in another card @S -- 'Bartony' will be found too @  etc. Back to syntax list " (Searching the whole ListMagic contents: ' 0In this case, parameter is left empty:  @! # put LMFind("Barton") into tOutput @ @ @ @ I -- searches for 'Barton' in current card where there is one widget only @H -- 'Bartony' will be found too @ ( put LMFind("Barton",true) into tOutput @ @ @ @ O -- searches for exact 'Barton' in current card where there is one widget only @N  -- 'Bartony' will be ignored @ D put LMFind("Barton",true,,long ID of fld "Customers") into tOutput @ @3 @7 @; N -- searches for exact 'Barton' in a widget named 'Customers' in current card @M 2 -- if there is more than one widget in this card @1  -- 'Bartony' will be ignored @ R put LMFind("Barton",,,the long ID of fld "Customers" of cd "Sales") into tOutput @ @A @E @I d put LMFind("Barton",false,,the long ID of fld "Customers" of cd "Sales") into tOutput -- identical @ @F @J @N @W H -- searches for 'Barton' in a widget named 'Customers' in another card @G -- 'Bartony' will be found too @  etc. aIn both cases, returned value consists in a list of comma delimited items that are line numbers: , , J For instance: 1,3,21,32 #Or is empty if no match was found. J To allow the user to search ListMagic, use LMFindNext command. @1600   ' - @7 5 Actually this command makes a find tool showing up: @4 J is the prompt displayed in the ask dialog (as sheet on Mac OS). @ @ @!( J If is left empty, ListMagic will use its own prompt in English: @ @ @%$ + Enter a string to find: -- All platforms  @ 8 Type command G to display next occurrences. -- Mac OS . @. 3 Call back this dialog using command F. -- Mac OS ) @) 8 Type control G to display next occurrences. -- Win 32 . @. 3 Call back this dialog using control F. -- Win 32 ) @) 3 In a localized software, specify your own prompt. a Once the user has entered a string, the first line where it has been found will be highlighted. = Successive command/control G will display next occurrences. i When the last one will be found, ListMagic will beep while displaying again the first found occurrence. Notes:   1. A commandKeyDown handler in the library allows this behavior: if you use commandKeyDown also, don't forget to pass the message.   o JCommand/control F is a shortcut to call LMFindNext without any scripting. If you don't want to use this feature, just don't pass commandKeyDown if you use it or write a blocking handler in the script of your stack that will prevent the library to get the message:  on commandKeyDown  @ @  end commandKeyDown @ @ @ 2. If there are more than one widget in current card, ListMagic Find tool goes through all widgets in their order from top to bottom or from left to right according to your layout. @ @$ @4 Back to syntax list " 3.11. How to print ListMagic?  G To print ListMagic, use LMPrint [,] command. @1600     @!$ E _ is a column number or the name of a column (the name displayed in the header). @ @ @# @% @:# @] N that will be used to sort the list ascending before printing if you wish it. @M B If this parameter is left empty, current sort will be preserved. @A 3 is the long ID of the widget list field*  @ @! k You may omit if the target card is the current card and there is only one widget in this card**.   @[ I So in most cases the first example below is enough to achieve the goal. @H LMPrint @ Q -- print widget without any sort in current card where there is one widget only @P LMPrint 1 @ @ -- print widget in current card where there is one widget only @? C -- ListMagic will be sorted ascending by column 1 before printing @B / LMPrint "Name",the long ID of fld "Customers" @. 5 -- print a widget named 'Customers' in current card @4 2 -- if there is more than one widget in this card @1 H -- ListMagic will be sorted ascending by column 'Name' before printing @G 7 LMPrint ,the long ID of fld "Customers" of cd "Sales" @6 F -- print a widget named 'Customers' without any sort in another card @E Note:   Headers labels appear bolded. / Font and size used for display are respected. " Lines numbers are never printed. ' Page Setup and Print dialogs show up. [ Orientation is preset (portrait or landscape) according to ListMagic current proportions. < < E Back to syntax list " 3.12. How to export data?  o To export ListMagic to a text file*, use LMExport([ [, [, [,]]]]) function. @1600    + 3 @4: R * You will be able to open it in Microsoft Excel (a tab/tab/return text format). @Q i is a column number that will be used to sort the list ascending before exporting if you wish it. @ @  @N B If this parameter is left empty, current sort will be preserved. @A W is the prompt displayed in the answer dialog (as sheet on Mac OS) when done. @ @ @!5 4 is the file path to which export data. @3 3 is the long ID of the widget list field*  @ @! h If is left empty, not any dialog will show up but this assumes that is not empty. @g D If is left empty, ListMagic will display a Ask dialog. @C k You may omit if the target card is the current card and there is only one widget in this card**.   @[ I So in most cases the first example below is enough to achieve the goal. @H  put LMExport() into tResult @ @ @ @ C -- export widget from current card where there is one widget only @B > -- with no sort, a ask dialog and no answer dialog when done @= ( put LMExport(,,tFilePath) into tResult @ @ @ @ U -- export widget to tFilePath file from current card where there is one widget only @T ? -- with no sort, no ask dialog and no answer dialog when done @> ? -- use this form if you want to display first your own dialog @> 6 put LMExport(1,"Data have been saved.") into tResult @ @% @) @- C -- export widget from current card where there is one widget only @B F -- with sort by column 1, a ask dialog and a answer dialog when done @E U put LMExport(,"Data have been saved.",,the long ID of fld "Customers") into tResult @ @D @H @L 8 -- export a widget named 'Customers' from current card @7 2 -- if there is more than one widget in this card @1 = -- with no sort, a ask dialog and a answer dialog when done @< D Value returned may be cancel or the file path of the created file.    % . Note:   Actually, even if the syntax allows it, exporting ListMagic from another card might be not understandable by the user if parameters do not make the process invisible. 2 2 ;k In addition, as this function returns the path of the file, you may prefer to not specify any prompt and handle it by yourself using the returned value:  put LMExport() into tDest @ @ @ @ Y if tDest <> "cancel" then answer info "Data have been saved in" && tDest & "." as sheet @ @  @ @ @! @" @& @' @@ @L @P @R @S Back to syntax list " S JR a* To get the long ID of a ListMagic list field, just get the long ID of fld .  , .2 Actually, each widget includes mainly a field (list) and a group (header) that have both the name you gave to the widget: it is this short name that must be used. ** Target card is the current card and there is only one widget in this card means that code is written in controls that are in the card where is the widget or in the card's script itself and that you have not installed more than one widget in this card. In such a case, you may omit the parameter because ListMagic, to make your life easier, will always assume you refer to the current card and to the only widget installed in this card.  @ @I @L @2 @;{ gIf this parameter is left blank but confuses ListMagic, an error will be returned: see next paragraph. @- @- @60 To sum up, specify parameter when you refer to a ListMagic widget in another card or to any ListMagic widget in the current card when there are more than a ListMagic widget in this card. @ Back to top " 4. Errors handling $ It is a good idea to add error handling to your code since ListMagic widget returns error codes in case of bad parameter, widget not found, etc.   ' @; @DL +As usual, error codes are always the same: @*  Error: @ @ O When using a command, just test immediately the result that should be empty: @1600 M  LMPopulate tList @ @ V put the result into tResult -- so you can read the whole error string when debugging @ @ @ @ @ @  @ @ @ @8 < if word 1 of tResult = "error:" then -- don't forget colon  @ @ @ @ @  @  @  @ @ @  @! @% @&  @  else @ @ @  end if @ C When using a function, just test returned value before using it: @1600 A # put LMExtractList() into tCurList @ @ @ @ = if word 1 of tCurList = "error:" then -- don't forget colon @ @ @ @ @ @  @  @  @ @ @! @" @& @'  @  else @ @ @  end if @ Back to top " 5. Cross platform handling @$ QAs usual, the only cross platform issue you might encounter is related to fonts: @J @J @O JJust specify the font and size you want to use according to the platform. @I For instance: @ ? if the platform = "MacOS" then put "Lucida Grande" into tFont @ @ @ @ @ @ @ @ @ @ @  @# @$ @3 @4 @8  else put "Tahoma" into tFont @ @ @ @  @  @ @ @ 2 set the cSSSHeader["uFont"] of to tFont @ @ @ @ @ @ @ @ @) @+ 3 set the cSSSHeader["uFontSize"] of to 11 @ @ @ @ @ @ @! @$ @- @/ @0 V Where is the long ID of fld , the name you gave to the widget. These lines of code will be inserted in a preOpenCard handler in all cards where there are widgets installed and for each one. @* @* @5J .6. Contextual menus and tooltips localization @$- ]Contextual menus and tooltips in ListMagic (called or dispayed from headers or from the list itself when editing is allowed) are automatically localized according to the machine language in English, French, German, Italian, Portuguese or Spanish. Another languages are considered as English (on Mac OS and Win32 and English is always used on Linux) @ @9 @& @o To force an existing language disregarding the machine language, just put the right code (en, fr, de, es, it or pt) in gLMLanguage global variable when your project opens. @S S# @v @w @) @ All translations, if you want to modify them, are in two custom property sets named cSSSMenus and cSSSTooltips in LMGenericHeader group and in the list field. @T @T @] @b @o/ sSome of them have two items: first one in the singular and second one in the plural or an action and its opposite. @r Note that the last line in the list field cSSSMenus is used in a confirmation dialog. Its form is tab tab tab . @* @* @4 @ Back to top " $ (How to install ListMagic in my project? @$' $Installation documentation contents @$# 4 1. How to install ListMagic widget in my project? @1600  H1 F 2. Once installed, how to modify initial ListMagic widget settings? @1600  HC X 3. Once installed, how to upgrade my project according to a new version of ListMagic? @1600  HU ' 4. How to delete a ListMagic widget? @1600  H$  5. About settings @1600  H  5.1. Columns number  "  5.2. Columns width  "  5.3. Lines numbering  "  5.4. Mini check boxes  "  5.5. Columns drag and drop  "  5.6. Editing  "  5.6. Filtering  "  5.7. Other settings  "  6. Platform compliance @1600  H ( 6.1 Mac OS and Windows common settings  "&  6.2 Windows uniqueness  "  6.3 Mac OS uniqueness  " And for more advanced users: ( 7. What is installed into my project? @1600  H%  7.1. Controls  "  7.2 Custom property sets  "  7.4. Library  " 7.5. Images  "  7.6. Pre-installed handlers  " & 8. How are widget settings handled? @1600  H# ,Note there is a Print... button (19 pages).    Before clicking on the Install or modify a widget button below, be kind to read this section carefully if you want ListMagic working in your project as well as you can see it in the Action section... And working how you want it to work in your project. @ @ @1B @s @|: @ @@ ,Note there is a Print... button (17 pages).    21. How to install ListMagic widget in my project? @$1 8ListMagic installation process is entirely automatized. @7 lYou may install one or more ListMagic widgets in any card of a main stack or/and in any card of a substack. k First go to the card in the stack where you want to install ListMagic and be sure that the stack's window is editable (topleveled). @1600  @< @> @G( @o @w = Then click on the Install or modify a widget button below. @1600  @ @ @. ! ListMagic wizard will show up: @1600   @   @26058  @26061  g On the left are mirrored the settings you set and tested in the Action section: you may change them. @1600 A B H You have just to name the widget (as you would do it for any control) and specify the number of columns if you want more than nine or enter Auto: see below some important explanations about this setting. @1600   "6 X i%  ; If you check Pre-install ListMagic messages handlers check box, messages handlers structures will automatically be added to the card's script in order to help you to write your code: see Syntax section. @1600  ' 6   pIf you don't want ListMagic touching your project, uncheck this box and write all needed handlers by yourself*.   T p Then click on the Install button and confirm: installation is immediate and your project is brought to front. @1600   T   @26060  @26063  Pointer tool is already chosen and the list field selected: resize it to fit your layout: magically its header will be refreshed. @1600 = > D! @e  You are done! @ @ K All ListMagic features you have set on are now functional in your project @J  Could it get any easier? @ * If you have unchecked this box when installing and changed your mind, just click on the Modify button after having checked the box.  Back to List " D2. Once installed, how to modify initial ListMagic widget settings? @$C p First go to the card in the stack where you want to modify the widget settings as you did it when installing. @1600  @m V Then click on the Install or modify a widget button below to call ListMagic Wizard. @1600  @ @ @. @D @T G In its Option menu at the top, select the widget you want to modify. @1600   2 ]Now settings on the left mirror the current settings of the selected widget in your project. @ @B @[  Change them. @1600   @26059  @26062  o Then click on the Modify button and confirm: modification is immediate and your project is brought to front. @1600   T  You are done! @ @  Could it get any easier? @ Back to List " H V3. Once installed, how to upgrade my project according to a new version of ListMagic? @$ $R R First go to a card in your project where there is a ListMagic widget installed. @1600  @O V Then click on the Install or modify a widget button below to call ListMagic Wizard. @1600  @ @ @. @D @T @$ Don't modify any settings for this widget and click on the Modify button: ListMagic will detect which version you use and if an upgrade is possible. In such a case, it will alert you. @1600 / 0 = CR @$ @ If you agree, ListMagic Wizard will parse all cards of your current stack and will upgrade all widgets found including its own library. @1600  @ @ i  You are done! @ @  Could it get any easier? @ Note: ListMagic Wizard just parses current displayed stack. If there are other stacks using ListMagic in your project, just repeat this operation for all concerned stacks.   Back to List " H %4. How to delete a ListMagic widget? @$$ e Using the pointer tool, select a ListMagic list field or its header group then hit the delete key. @1600 " # , 2 7 F K  You are done! @ @  Could it get any easier? @ Note that once the last widget in a card is deleted, ListMagic suppresses all its controls, custom properties, etc. but not the possible code in the card's script because you may have modified it an might want to clean it up by yourself.  Back to List " 5. About settings @$ ListMagic is a sophisticated widget and, in your project, it uses custom properties and many other things set up when installing. So unless you have understood the whole thing, don't modify anything, even the name of any control, by yourself. Always prefer to use ListMagic Wizard even if modifying a list field custom property is always possible for advanced users (see section 6 in this pane).    [ s | 5.1. Columns number @ OListMagic allows you to specify a number of columns* or to choose Auto option. @ @  @" @( @B @F 0Why specify a number of columns or choose Auto? @ @ @ @* @. [* Nine columns only in this demo stack but as many as you want when installing the widget. @Z When choosing Auto option, the widget will fit your data list and will display as many header tabs as there are items in a data line. @1600  @ @ @s VIn this case the list will have a horizontal scrollbar because all columns are shown. @ @ @6 When specifying a number, the widget will display the specified number of headers disregarding the number of items in a data line. @1600    @,X {In this case the list will not have a horizontal scrollbar because all columns are not shown in order to keep hidden data. @ @$ @:@ Why would you hide some data? @ ;Having hidden data may appear very useful when processing: @: For instance: @ A column may display Internet domain names while a hidden column is storing corresponding urls. Whatever sort can be done, the right data is always in the right line without needing to build an external index to get the url. @ yActually, the list field itself can contain all needed indexed values without letting the user seeing or accessing them: @x  on LMMouseDoubleUp pLineNo @ ! set the itemDelimiter to tab @ @ @ @ @  @ @ @ @ @ 1 launch url item 9 of LMExtractLines(pLineNo) @ @ @  @  @ @ @ @ @ + -- see this function in syntax section @ @&  end LMMouseDoubleUp @ In this example, if the number of columns has been set to eight, the user will not see the url but a double click on the line will open his browser to the right url because it is item 9 (not displayed) in the list field and easily retrieved whatever sort can have been made.  KSee LMMouseDoubleUp message and LMExtractLines function in Syntax section.   @ @    @" @. / ; A UActually, using hidden data feature depends also on the number of displayed columns:   9 mRemember that screens are not extendable and only Auto (with no hidden data) allows a horizontal scroll bar. 2 2 66 QSuch a choice depends on many things: it is up to you and depends on your needs. Back to List " 5.2. Columns width @ PIf you choose Auto, columns width will fit your data when populating ListMagic. @ @ @3 @E @N NIn all other cases, ListMagic will respect the value in pixels you specified. @ @ @0 Back to List " 5.3. Lines numbering @ =ListMagic allows you to display line numbering as an option. @ @ 3 KIf you choose this option, lines are numbered when you populate ListMagic. @@ @@ @I Numbering is never changed and sorting by this column always return to your initial list (possibly in reverse order) if you use a registered version. @ @ Note: when running the trial version, lines are renumbered every time for technical reasons then you can't see this feature as expected. @ Back to List " 5.4. Mini check boxes @ FListMagic allows you to display mini check boxes in the first column. @ @ < oIf you choose this option, first column is fixed and you can't move this first column when reordering columns. @n Back to List " 5.5. Columns drag and drop @ oWhen this option is checked, ListMagic allows the user to reorganize columns order by drad an drop of headers. @ @ @&H GIf mini check boxes are allowed, corresponding column cannot be moved. @F Back to List " 5.6. Editing @ When this option is checked, ListMagic allows the user to edit ListMagic list using a superimposed entry box when a second mouseDown (not a double mouseDown or double MouseUp) is done on the same item in the list. @ @ @& @? @I In a line, once one item has been selected, pressing the tab key validates any change and edits next item and return key does the same in next/previous line (option tab on Mac OS and control tab on Win 32 allow to go backward). @ ]In addition, the pop up menu in the list field is enhanced, allowing to add or delete lines. @\ Back to List " 5.6. Filtering @ When this option is checked, ListMagic adds an item to the header contextual menu allowing to filter current displayed list. Then typing some chars into any of the filter entries boxes that are displayed filter current list. @ @ @& iWhen any list is filtered, it appears in dark red until filter is disabled using header contextual menu. @h WMultiple filtering by specifying some chars for several columns is of course possible. @V Back to List " 5.7. Other settings @ All other settings are obvious and can be set differently for every widget installed in a project except stripes color that is always the same for all widgets installed in one project. @ Back to List " 6. Platform compliance @ +ListMagic lets you decide of all settings. @ @ ! HSome of them are more compliant than others according to the platform : @G '6.1 Mac OS and Windows common settings @&  Font size: 11 @1600   Line spacing fixed to 16 @1600   Stripes color: 241,245,250 @1600   Highlight color: 62,127,227 @1600  . Highlighted text color: 255,255,255 (white) @1600 , 4 Disabled highlight color: 192,192,192 (automatic) @1600 2 + List grid color: 217,217,217 (automatic) @1600 ) 6.2 Windows uniqueness @  Font: Tahoma @1600  /See Cross platform handling in Syntax section.  @ @  @% 6.3 Mac OS uniqueness @  Font: Lucida Grande @1600  /See Cross platform handling in Syntax section.  @ @  @% gExplanations from this point are dedicated to more advanced users except 7.3 that is important for all @$f &7. What is installed into my project? @$% AActually all this magic requires some things behind the scene... @ @ @) HFor your information, below is described what is added to your project: @G 7.1. Controls @ g. A list field identical to the one you see in the Action section but according to your last settings. @ @ @% @3 @9- . A header group identical to the one you will have set in the Action section and a master header group (without any control but the code needed) that is used as a template to build any header on-the-fly. @ @ @/ @? @E @T @ge . A master filter group (without any control but the code needed) that is used as a template to build filtering boxes on-the-fly. @ @ @j Y. A scripted popUp button used by the header's contextual menu that will stay invisible. @ @ @? F. A scripted field used to allow list editing as a generic entry box. @ @  @3 Back to List " 7.2 Custom property sets   Each ListMagic field and each card that displays on or more widgets have a custom property set named cSSSHeader (22 custom properties in the field and 2 in the card). In addition, ListMagic adds a stack custom property to know the name of its library (cSSSHeader["uLibName"]). @1600     W 7.3. ListMagic Code @ hAll code needed by ListMagic (more than 3000 lines) is embedded in its own controls and in its library. @ @ @43 But to make your life easier, when installing, ListMagic will scan you existing code and add some pass to be sure that its libary will be able to handle them: @/ @/ @8" Z b p &  ; resizeStack to resize any widget as planned in settings @19046   , 3 closeCard to store any widget highlighted lines @19046    & 3 preOpenCard to set any widget highlighted lines @19046   $ 8 suspendStack to disable any widget highlighted lines @19046   ( < resumeStack to enable again any widget highlighted lines @19046   - / commandKeyDown to allow Find tool shortcuts @19046    This means that if, later, you write some code to trigger these messages in your project, don't forget to pass them to get ListMagic working as expected. @ xIn addition, ListMagic will add a start using for its library in your preOpenstack handler or will create it if needed. @ 0 F R% Back to List " 7.4. Library @ RListMagic library stores commands and functions you will use to manage ListMagic.     / @G P OThese messages use a LM prefix (ListMagic) and are detailed in Syntax section.   ( ? E Back to List " 7.5. Images @ 17 images used by ListMagic as icons or background patterns (these image are very light: less than 5 KB for all.). These images are stored in ListMagic library. @1600  @ @ @s @ @ Back to List " 7.6. Pre-installed handlers @  This is optional and depends on Pre-install ListMagic messages handlers check box status in ListMagic Wizard. When this option is ckecked in ListMagic Wizard, all handlers able to trigger messages sent by ListMagic widget are installed in current card's script. They are there to help you to handle easily all user's actions but, of course, you may deny this installation or suppress later all handlers you don't need. @1600 ! "' I ^ n!   Back to List " $8. How are widget settings handled? @$# eIn every list field, you will find a custom property set named CSSSHeader with 22 custom properties. @? @? @I Advanced users may set these properties by scripting, using the message box (when the right card is displayed in both these cases) or directly in Rev properties inspector: it's the easier way. To access this property set, display a widget and open Rev stack's properties inspector about the list field > Custom Properties then choose the CSSSHeader set in the lower option menu. @ @ @ @ `ListMagic will check the format of values you enter and will alert you if they are not correct. @ @ V In addition, all these properties are triggered by one setProp handler, so modifying any of these properties in the stack properties inspector (or by script or using the message box) will immediately change the widget layout accordingly. @7 @7 @> These custom properties are: @  uWidgetName @1600     Type: string lIndicates the short name of the list field and the short name of the header group (both are the same ones). uFont @1600    Type: string 1Indicates the name of a font currently installed 2This one is used by the list field and the header uFontSize @1600   Type: integer Indicates font size MThis one is used by the list field and the header (13 max for header's tabs)  uTextHeight @1600   Type: integer 4Indicates line space (1 = auto and 2 = fixed to 16) #This one is used by the list field uEdition @1600   Type: Boolean (true or false) $Indicates if the list may be edited #This one is used by the list field uFiltering @1600   Type: Boolean (true or false) &Indicates if the list may be filtered =This one is used to build header contextual menu accordingly uCheckBox @1600   Type: Boolean (true or false) 7Indicates if the list displays a column of check boxes #This one is used by the list field uNumLines @1600   Type: Boolean (true or false) /Indicates if the list displays lines numbering #This one is used by the list field  uColumnsDandD @1600   Type: Boolean (true or false) HIndicates if columns order's reorganization by drag and drop is allowed This one is used by the header  uHeaderColumsNum @1600   ,Type: may be an integer or the keyword Auto ' ' 0Indicates how many columns are seen by the user 2This one is used by the list field and the header  uDefaultHeaderLabels @1600   Type: list 5Stores default header tabs labels as a list of lines This one is used by the header  uCurHeaderLabels @1600   Type: list XStores current header tabs labels when columns have been reorganized as a list of lines This one is used by the header  uSelectType @1600   Type: integer One line only = 1   )> Multiple lines using the shift key = 2 ' ' Q> Non contiguous lines using the ctrl/command key (in addition of shift key) = 3 O O   uResizeType @1600   Type: integer ?Indicates how is made the resizing of the widget: 0, 1, 2 or 3 > No resizing = 0   > Vertical resizing only = 1   > Horizontal resizing only = 2   > Both ways resizing = 3     uDefaultTabStop @1600   ;Type: may be an integer (pixels value) or the keyword Auto 6 6 7Indicates default tabstops used when creating a header AWhen Auto is used, columns are sized according to their contents @ #This one is used by the list field uCurSort @1600   [Type: may be empty when there is no current sort or a line of three comma delimited items:    @1) ?,
, or / / 1 Indicates current list sort 3This property can be read but can't be set + +  uHighlightColor @1600    Type: RGB triplet 6Indicates the color of list field lines when selected #This one is used by the list field  uHighlightedTextColor @1600   Type: RGB triplet :Indicates the color of highlighted text in the list field #This one is used by the list field  uStripsColor @1600    Type: RGB triplet :Indicates the color of non white strips in the list field #This one is used by the list field uCurHeader @1600   Type: Integer FIndicates the number of the last header that has received a mouseDown 9This property is used internally and can't be set 1 1  uCheckboxReplaceChar @1600   Type: char 9Indicates a special char used to locate mini check boxes HBy default the code uses | - Chartonum(124) to locate them in the list.   , aThis one is used by the list field and can't conflict with your data even if they use this char. ` uBotttomDelta and uRightDelta @1600     Type: Integer QIndicates the delta taken into account when the widget is resized (pixels value) 3This property is used internally and can't be set 1 1 In addition, if editing is enabled, LMBox field has four custom properties properties that might help you when triggering LMListEdited message: $ $ /K z  uCheckBox @1600   Type: Boolean (true or false) KIndicates if the last edition has been done in the mini check boxes column uCurItem @1600   Type: Integer ,Passed to LMListEdited as parameter uCurLine @1600   Type: Integer .Passed to LMListEdited as parameter uCurText @1600   Type: String 0Passed to LMListEdited as parameter uCurWidget @1600   Type: String 'Indicates the short name of the widget 9Long ID is passed to LMListEdited as parameter ~Finally, you will two custom property sets, named cSSSMenus and cSSSTooltips, in the list field and the generic header group: 2 2 ; @ L1 uThese ones are used to localize contextual menus and tooltips automatically according to current machine's language. Back to List " + 3ListMagic 1.1 by Eric Chatonet - So Smart Software @$2 = ListMagic provides a full automatized Installation and Modification Wizard dedicated to a highly sophisticated widget. Using this Wizard, you are sure to get ListMagic customized as you want it in your projects with one or two clicks only: a lot of time saved for you and a professional look for your applications. @@1600 @ @ @ @( @E @M @Y @w @y @ @ @K @ @ @ @% ListMagic is provided with a library of more than twenty custom messages, commands and functions allowing to master it straightforward in your scripts. @@1600 @ @ @ In this trial version, all features are fully functional: the only restriction is lines added to your data saying it is a trial version as you can see it in Action section. Of course, this limitation will disappear once you will have bought ListMagic. @@1600 @ @! @:e @ @N @ @ Just click on the Buy ListMagic! button below to know how you can take advantage of ListMagic introducing offer for 39 dollars (28 euros) only (a 20% discount). This offer will end on 2009 January 15th and then retail price will be 49 dollars. @@1600 @ @ @"3 @U @r @u @i rListMagic has been deeply tested using Mac OS X, Win XP, Vista and Linux running Rev and MC 2.9, 3.0 and 3.5 dp1. @ @  @' @7 @8 @> C @I @Q @p If you need an advice as a registered user or find some bugs or imagine enhancements you want to report, please send an email to So Smart Software support. @ @ @*W "  bListMagic uses CreateFieldAlternatingColors and GetUserLang handlers by courtesy of Trevor DeVore @  ; @D #T $Presentation documentation contents @$#  1. Presentation @1600  H  2. Main features @1600  H  2.1. The widget  "  2.2. ListMagic list  "  2.3. ListMagic header  "  2.4. Miscellaneous  " +Note there is a Print... button (4 pages).    1. Presentation @$ qLists are essential in any management software (people like customers, students, products like CDs, cars, etc.). @. @.B Unfortunately, Revolution provides simple tabbed fields only without header and not any additional feature you might expect to build a professional software (features and look). @