ÿØÿà JFIF    ÿÛ „  ( %"1!%)+...383,7(-.+  -+++--++++---+-+-----+---------------+---+-++7-----ÿÀ  ß â" ÿÄ     ÿÄ H    !1AQaq"‘¡2B±ÁÑð#R“Ò Tbr‚²á3csƒ’ÂñDS¢³$CÿÄ   ÿÄ %  !1AQa"23‘ÿÚ   ? ôÿ ¨pŸªáÿ —åYõõ\?àÒü©ŠÄï¨pŸªáÿ —åYõõ\?àÓü©ŠÄá 0Ÿªáÿ Ÿå[úƒ ú®ði~TÁbqÐ8OÕpÿ ƒOò¤Oè`–RÂáœá™êi€ßÉ< FtŸI“öÌ8úDf´°å}“¾œ6  öFá°y¥jñÇh†ˆ¢ã/ÃÐ:ªcÈ "Y¡ðÑl>ÿ ”ÏËte:qž\oäŠe÷󲍷˜HT4&ÿ ÓÐü6ö®¿øþßèô Ÿ•7Ñi’•j|“ñì>b…þS?*Óôÿ ÓÐü*h¥£ír¶ü UãS炟[AÐaè[ûª•õ&õj?†Éö+EzP—WeÒírJFt ‘BŒ†Ï‡%#tE Øz ¥OÛ«!1›üä±Í™%ºÍãö]°î(–:@<‹ŒÊö×òÆt¦ãº+‡¦%ÌÁ²h´OƒJŒtMÜ>ÀÜÊw3Y´•牋4ǍýʏTì>œú=Íwhyë,¾Ôò×õ¿ßÊa»«þˆѪQ|%6ž™A õ%:øj<>É—ÿ Å_ˆCbõ¥š±ý¯Ýƒï…¶|RëócÍf溪“t.СøTÿ *Ä¿-{†çàczůŽ_–^XþŒ±miB[X±d 1,é”zEù»& î9gœf™9Ð'.;—™i}!ôšåîqêÛ٤ёý£½ÆA–àôe"A$˝Úsäÿ ÷Û #°xŸëí(l »ý3—¥5m! rt`†0~'j2(]S¦¦kv,ÚÇ l¦øJA£Šƒ J3E8ÙiŽ:cÉžúeZ°€¯\®kÖ(79«Ž:¯X”¾³Š&¡* ….‰Ž(ÜíŸ2¥ª‡×Hi²TF¤ò[¨íÈRëÉ䢍mgÑ.Ÿ<öäS0í„ǹÁU´f#Vß;Õ–…P@3ío<ä-±»Ž.L|kªÀê›fÂ6@»eu‚|ÓaÞÆŸ…¨ááå>åŠ?cKü6ùTÍÆ”†sĤÚ;H2RÚ†õ\Ö·Ÿn'¾ ñ#ºI¤Å´%çÁ­‚â7›‹qT3Iï¨ÖÚ5I7Ë!ÅOóŸ¶øÝñØôת¦$Tcö‘[«Ö³šÒ';Aþ ¸èíg A2Z"i¸vdÄ÷.iõ®§)¿]¤À†–‡É&ä{V¶iŽ”.Ó×Õÿ û?h¬Mt–íª[ÿ Ñÿ ÌV(í}=ibÔ¡›¥¢±b Lô¥‡piη_Z<‡z§èŒ)iÖwiÇ 2hÙ3·=’d÷8éŽ1¦¸c¤µ€7›7Ø ð\á)} ¹fËí›pAÃL%âc2 í§æQz¿;T8sæ°qø)QFMð‰XŒÂ±N¢aF¨…8¯!U  Z©RÊ ÖPVÄÀÍin™Ì-GˆªÅËŠ›•zË}º±ŽÍFò¹}Uw×#ä5B¤{î}Ð<ÙD é©¤&‡ïDbàÁôMÁ." ¤‡ú*õ'VŽ|¼´Úgllº¼klz[Æüï÷Aób‡Eÿ dÑ»Xx9ÃÜ£ÁT/`¼¸vI±Ýµ·Ë‚“G³þ*Ÿû´r|*}<¨îºœ @¦mÄ’M¹”.œ«Y–|6ÏU¤jç¥ÕÞqO ˜kDÆÁ¨5ÿ š;ÐЦ¦€GÙk \ –Þ=â¼=SͧµªS°ÚÍpÜãQűÀõ¬?ÃÁ1Ñ•õZà?hóœ€ L¦l{Y*K˜Ù›zc˜–ˆâ ø+¾ ­-Ök¥%ùEÜA'}ˆ><ÊIè“bpÍ/qÞâvoX€w,\úªò6Z[XdÒæ­@Ö—€$òJí#é>'°Ú ôª˜<)4ryÙ£|óAÅn5žêŸyÒäMÝ2{"}‰–¤l÷ûWX\l¾Á¸góÉOÔ /óñB¤f¸çñ[.P˜ZsÊË*ßT܈§QN¢’¡¨§V¼(Üù*eÕ“”5T¨‹Âê¥FŒã½Dü[8'Ò¥a…Ú¶k7a *•›¼'Ò·\8¨ª\@\õ¢¦íq+DÙrmÎ…_ªæ»ŠÓœ¡¯’Ré9MÅ×D™lælffc+ŒÑ,ý™ÿ ¯þǤ=Å’Á7µ÷ÚÛ/“Ü€ñýã¼àí¾ÕÑ+ƒ,uµMâÀÄbm:ÒÎPæ{˜Gz[ƒ¯«® KHà`ߨŠéí¯P8Aq.C‰ à€kòpj´kN¶qô€…Õ,ÜNŠª-­{Zö’æû44‰sŽè‰îVíRœÕm" 6?³D9¡ÇTíÅꋇ`4«¸ÝÁô ï’ýorqКÇZ«x4Žâéþuïf¹µö[P ,Q£éaX±`PÉÍZ ¸äYúg üAx ’6Lê‚xÝÓ*äQ  Ï’¨hÍ =²,6ï#rÃ<¯–£»ƒ‹,–ê•€ aÛsñ'%Æ"®ÛüìBᝠHÚ3ß°©$“XnœÖ’î2ËTeûìxîß ¦å¿çÉ ðK§þ{‘t‚Ϋ¬jéîZ[ ”š7L¥4VÚCE×]m¤Øy”ä4-dz£œ§¸x.*ãÊÊ b÷•h:©‡¦s`BTÁRû¾g⻩‹jø sF¢àJøFl‘È•Xᓁà~*j¯ +(ÚÕ6-£¯÷GŠØy‚<Ç’.F‹Hœw(+)ÜÜâÈzÄäT§FߘãÏ;DmVœ3Àu@mÚüXÝü•3B¨òÌÁÛ<·ÃÜ z,Ì@õÅ·d2]ü8s÷IôÞ¯^Ç9¢u„~ëAŸï4«M? K]­ÅàPl@s_ p:°¬ZR”´›JC[CS.h‹ƒïËœ«Æ]–÷ó‚wR×k7X‰k›‘´ù¦=¡«‰¨¨Â')—71ó’c‡Ðúµ `é.{§p¹ój\Ž{1h{o±Ý=áUÊïGÖŒõ–-BÄm+AZX¶¡ ïHðæ¥JmÙ;…䡟ˆ¦ ° äšiÉg«$üMk5¤L“’çÊvïâï ,=f“"íἊ5ô¬x6{ɏžID0e¸vçmi'︧ºð9$ò¹÷*£’9ÿ ²TÔ…×>JV¥}Œ}$p[bÔ®*[jzS*8 ”·T›Í–ñUîƒwo$áè=LT™ç—~ô·¤ÈÚ$榍q‰„+´kFm)ž‹©i–ËqÞŠ‰à¶ü( ‚•§ •°ò·‡#5ª•µÊ﯅¡X¨šÁ*F#TXJÊ ušJVÍ&=iÄs1‚3•'fý§5Ñ<=[íÞ­ PÚ;ѱÌ_~Ä££8rÞ ²w;’hDT°>ÈG¬8Á²ÚzŽ®ò®qZcqJêäÞ-ö[ܘbň±çb“ж31²n×iƒðÕ;1¶þÉ ªX‰,ßqÏ$>•î íZ¥Z 1{ç൵+ƒÕµ¥°T$§K]á»Ûï*·¤tMI’ÂZbŽÕiÒ˜}bÓ0£ª5›¨ [5Ž^ÝœWøÂÝh° ¢OWun£¤5 a2Z.G2³YL]jåtì”ä ÁÓ‘%"©<Ôúʰsº UZvä‡ÄiÆÒM .÷V·™ø#kèýiíÌ–ª)µT[)BˆõÑ xB¾B€ÖT¨.¥~ð@VĶr#¸ü*åZNDŽH;âi ],©£öØpù(šºãö¼T.uCê•4@ÿ GÕÛ)Cx›®0ø#:ÏðFÒbR\(€€Ä®fã4Þ‰Fä¯HXƒÅ,†öEÑÔÜ]Öv²?tLÃvBY£ú6Êu5ÅAQ³1‘’¬x–HŒÐ‡ ^ ¸KwJôÖŽ5×CÚ¨vÜ«/B0$×k°=ðbÇ(Ï)w±A†Á† 11Í=èQšµ626ŒÜ/`G«µ<}—-Ö7KEHÈÉðóȤmݱû±·ø«Snmá=“䫚mݱŸ¡¶~ó·“äUóJæúòB|E LêŽy´jDÔ$G¢þÐñ7óR8ýÒ…Ç› WVe#·Ÿ p·Fx~•ݤF÷0Èÿ K¯æS<6’¡WШ; ´ÿ ¥Êø\Òuî†åÝ–VNœkÒ7oòX¨Á­Ø÷FÎÑä±g÷ÿ M~Çî=p,X´ ÝÌÚÅ‹’ÃjÖ.ØöÏñ qïQ¤ÓZE†° =6·]܈ s¸>v•Ž^Ý\wq9r‰Î\¸¡kURÒ$­*‹Nq?Þª*!sŠÆ:TU_u±T+øX¡ ®¹¡,ÄâÃBTsÜ$Ø›4m椴zÜK]’’›Pƒ @€#â˜`é¹=I‡fiV•Ôî“nRm+µFPOhÍ0B£ €+¬5c v•:P'ÒyÎ ‰V~‚Ó†ÖuókDoh$å\*ö%Ю=£«…aȼ½÷Û.-½VŒŠ¼'lyî±1¬3ó#ÞE¿ÔS¤gV£m›=§\û"—WU¤ÚǼÿ ÂnÁGŒÃ ‚õN D³õNÚíŒÕ;HôyÄÈ©P¹Ä{:?R‘Ô¨âF÷ø£bÅó® JS|‚R÷ivýáâ€Æé¡è³´IئÑT!§˜•ت‚¬â@q€wnïCWÄ@JU€ê¯m6]Ï:£âx'+ÒðXvÓ¦Úm=–´7œ $ì“B£~p%ÕŸUþ« N@¼üï~w˜ñø5®—'Ôe»¤5ã//€ž~‰Tþ›Å7•#¤× Íö pÄ$ùeåì*«ÓŠEØWEÈsßg ¦ûvžSsLpºÊW–âµEWöˬH; ™!CYõZ ÃÄf æ#1W. \uWâ\,\Çf j’<qTbên›Î[vxx£ë 'ö¨1›˜ÀM¼Pÿ H)ƒêêŒA7s,|F“ 꺸k³9Ìö*ç®;Ö!Ö$Eiž•¹ÒÚ†ýóéÝû¾ÕS®ó$’NÝäŸz¤5r¦ãÄÃD÷Üø!°ø‡Ô&@m™Ì^Ãä­d q5Lnÿ N;.6½·N|#ä"1Nƒx“ã<3('&ñßt  ~ªu”1Tb㫨9ê–›–bìd$ߣ=#ÕãÒmU¯eí$EFù5ýYô櫨æì™Ç—±ssM]·á¿0ÕåJRÓªîiƒ+O58ÖñªŠÒx" \µâá¨i’¤i —Ö ” M+M¤ë9‚‰A¦°Qõ¾ßøK~¼Ã‘g…Ö´~÷Ï[3GUœÒ½#…kàÔ®Ò”‰³·dWV‰IP‰Ú8u¹”E ÖqLj¾êÕCBš{A^Âß;–¨`¯¬ìö ˼ ×tìø.tƐm*n¨y4o&Àx¥n¦×î‡aupáÛj8¿m›è¶ã!o½;ß0y^ý×^EÑ¿ÒjzŒ­)vÚÑnÄL …^ªô× ‡—‚3k Îý­hï]içå–îÏ*÷ñþ»Ô CÒjøjÍznˆ´ ¹#b'Fô‹ ‰v¥'’à'T´ƒHýÍ%M‰ ƒ&ÆÇŒï1 ‘ –Þ ‰i¬s žR-Ÿ kЬá¬7:þ 0ŒÅÒÕ/aÙ¬ÃÝ#Úøœ ©aiVc‰. ¹¦ãµ” ›Yg¦›ÆÎýº°f³7ƒhá·¸­}&D9¡ÂsÉÙÞèŠõØàC™¨ñbFC|´Ü(ŸƒÚÒ-%»'a Ì¿)ËÇn¿úÿ ÞŽX…4ÊÅH^ôΑí@ù¹Eh¶“L8Çjù ¼ÎåVªóR©Ï5uà V4lZß®=€xÖŸ–ÑÈ ÷”¨°¾__yM1tÉ?uÆþIkÄgæ@þ[¢†°XÃJ£j·:nkÅ¢u ‘}âGzö­/IµèЬ¼48q¦F°ŽR¼=ûì{´¯RýicS ÕÛ íNtÍÙï£,w4rêì®»~x(©Uñ§#Ñ&œÕ¤>ÎåÍÓ9’Ö{9eV­[Öjâ²ãu]˜å2›qÑšÕJç0€sÄ|Êëè0튔bÁ>“{×_F`Ø©ºê:µä,v¤ðfc1±"«ÔÍän1#=· Âøv~H½ÐßA¾¿Ü€Óš]Õ; I¾÷ç‚Qi†î¹9ywÔKG˜áñ zQY—§ÃÕZ07§X‚ Áh;ÁM)iÌCH-¯T‘ë|A0{Ò½LÚ–TâÖkÜ’dÀ“rmm»”جPF³ÖcbE§T€ÒxKºû’Ó®7±²(\4ŽÃ¸Uu@j™yĵ;³µ!Á¢b.W¤=mõ´êµK k ¸K^ÜÛ#p*Ü14qkZç5ïë †°5Ï%ÍÛ<Õ¤×Ô¥ê†C Õ´¼ú$ƒÖ“”]Ù¬qÞÚ[4©ý!ûÏ—Áb쳐XµA¬â~`›Çr¸8ìùÝ䫦<>ä÷«?xs´ÇÑ /á;¹øüÊÈÙà{"@Žïzâ¬[âß‚ U_<ÇŸ½4èN˜ú61®qŠu ¦þF£»äJ_ˆÙÎ~ ÞAã–݄ϗrŠD;xTž‘ô`É«…suãO`?³à™ô Lý#Íc5öoæØ‚y´´÷«ZR§<&JÇ+éâô´€i!Àˆ0æAoàðLèÖ-2ŸõW.’t^–(KÁmHµV@xÜÇy®Ñø­â^:Ú3w· 7½¹°ñ¸â¹®:',«Mœ—n­Á+Ãbš LÈ‘ÄnRÓÅœ%¦²‰¨ùQ:¤f‚ "PÕtô¸…cæl…&˜Ú˜Ôkv‹ž+vŠ,=¢v­6—Xy*¥t£«<™:“aîϲ=¦6rO]XI¿Œ÷¤zÚ­›¶ 6÷”w\d ü~v®ˆÌk«^m<ÿ ¢‰Õ\)ùºŽ;… lîÙÅEŠ®cѾ@vnMÏ,¼“ñ•ŽBxðÃzãÇç%3ˆ"}Ù•Åî> BÉú;Ò]V+P˜F_´ßé> Øše|ï‡ÄOmFæÇ ãqÞ$/xÐx­z`ï9"œÜij‚!7.\Td…9M‡•iŽ‹¾‘50ÞŽn¥ß4ÉôO ¹*í^QêËÜÇÌ8=ާs‰'ÂëÙ«á%Pú[O †ÅP¯Vsް.‰,kc¶ ¬A9n˜XÎ-ÞšN["¹QÕ‰ƒMýÁߺXJæÍaLj¾×Ãmã¾ãÚ uñÒþåQô¦¥ /ÄUx:‚ÍÜ’ Đ©ØÝ3V¨‰ÕnÐ6ó*óúK­«…c ¯U òhsý­jóÔj#,ímŒRµ«lbïUTŒÑ8†Ä0œÏr`ð¡¬É Ї ë"À² ™ 6¥ f¶ ¢ÚoܱԷ-<Àî)†a¶ž'Ú»¨TXqØæ¶÷YÄHy˜9ÈIW­YÀuMFë ºÏ’AqÌ4·/Ú †ô'i$øä­=Ä Ý|öK×40è|È6p‘0§)o¥ctî§H+CA-“ xØ|ÐXАç l8íºð3Ø:³¤¬KX¯UÿÙ U K^y@sdZddlmZmZmZddlZddlZddlZddlmZm Z m Z m Z m Z m Z mZdZdZdZdZd Zd d iZGd d d ZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGdddeZGd d!d!eZej ej!ej"ej#ej$ej%ej&ej'ej(ej)ej*ej+ej,ej-ej.ej/ej0ej1ej2e3d"d#Z4e5e46D]Z7e7e4e4e7<qd$d%ej8ej9DD]\Z:Z;e:e4e;<e;e4e:<qGd&d'd'Zej?ej@ejAejBejCejDejEejFejGejHejIejJejKejLejMejNejOejPejQejRejSejTd*ZUGd+d,d,ZVdLd.d/ZWGd0d1d1eZXGd2d3d3e=ZYGd4d5d5e=ZZGd6d7d7e=Z[Gd8d9d9e[Z\Gd:d;d;eZ]dMd>d?Z^d@dAgd=dddfdBdCZ_dDd=dEd@dAgdfdFdGZ`GdHdIdIe=ZadJdKZbdS)Na This module provides the NEWT Windowing toolkit API for Python This is a lightweight text-mode windowing library, based on slang. Classes: - Widget - Button - CompactButton - Checkbox - SingleRadioButton - Listbox - Textbox - TextboxReflowed - Label - Scale - Entry - Form - Grid - SnackScreen - RadioGroup - RadioBar - ButtonBar - GridFormHelp - GridForm - CheckboxTree - Clistbox Functions: - ListboxChoiceWindow - ButtonChoiceWindow - EntryWindow )absolute_importprint_functionunicode_literalsN) FLAG_DISABLED FLAGS_SET FLAGS_RESET FLAGS_TOGGLEFD_READFD_WRITE FD_EXCEPT)r)r r )rr)r )r rappendr c@s"eZdZdZdddZddZdS)WidgetzBase class for NEWT toolkit - Do not use directly methods: - Widget(self) - setCallback(self, obj, data = None) : The callback for when object activated. data is passed to obj. NcCs$|r|j||n |j|dSN)w setCallback)selfobjdatar'/usr/lib/python3/dist-packages/snack.pyrDszWidget.setCallbackcCstdSr)NotImplementedErrorrrrr__init__JszWidget.__init__)N)__name__ __module__ __qualname____doc__rrrrrrr:s rc@seZdZdZddZdS)ButtonzqBasic button class, takes button text as parameter method: - Button(self, text): returns a button cCst||_dSr)_snackbuttonrrtextrrrrTszButton.__init__NrrrrrrrrrrMsrc@seZdZdZddZdS) CompactButtonzCompact Button class (less frilly button decoration). methods: - CompactButton(self,text) : create button, with text. cCst||_dSr)r Z compactbuttonrr"rrrr^szCompactButton.__init__Nr$rrrrr%Wsr%c@s:eZdZdZddZddZddZdd Zdd d Zd S)CheckboxaA checkbox. methods: - Checkbox(self, text, isOn = 0) : text, and boolean as to default value - setValue(self) : set value - value(self, value) : return checkbox value - selected(self) : returns boolean - setFlags(self, flag, sense) : set flags flags: FLAG_DISABLED, FLAGS_SET, FLAGS_RESET cCs|jjSrrZ checkboxValuerrrrvaluenszCheckbox.valuecCs |jjdkSNrr'rrrrselectedqszCheckbox.selectedcCs|j||Sr)rZcheckboxSetFlagsrflagZsenserrrsetFlagstszCheckbox.setFlagscCs |j|Sr)rZcheckboxSetValue)rr(rrrsetValuexszCheckbox.setValuercCst|||_dSr)r Zcheckboxr)rr#isOnrrrr{szCheckbox.__init__N)r) rrrrr(r*r-r.rrrrrr&as  r&c@s"eZdZdZddZdddZdS) SingleRadioButtonzSingle Radio Button. methods: - SingleRadioButton(text, group, isOn = 0) : create button - selected(self) : returns bool, whether or not is selected. cCs|jj|jjkSr)rkeyZ radioValuerrrrr*szSingleRadioButton.selectedrcCs,|rt||j||_nt|d||_dSr)r Z radiobuttonr)rr#groupr/rrrrszSingleRadioButton.__init__N)r)rrrrr*rrrrrr0~sr0c@sZeZdZdZddZddZddZdd Zd d Zd d Z ddZ ddZ dddZ dS)ListboxaListbox class. methods: - Listbox(self, height, scroll = 0, returnExit = 0, width = 0, showCursor = 0, multiple = 0, border = 0) - insert(self, text, item, before) : insert element; before = key to item to insert before, or None. - delete(self, item) : delete item from list. - replace(self, text,item) : Replace a given item's text - current(self) : returns currently selected item - getSelection(self) : returns a list of selected items - setCurrent(self,i tem) : select current. - clear(self) : clear listbox cCs$|j|}||j|<||j|<dSr)rZlistboxAddItemkey2itemitem2keyrr#itemr1rrrrs  zListbox.appendcCs@|s|j|d}n|j||j|}||j|<||j|<dSr))rlistboxInsertItemr5r4)rr#r7beforer1rrrinserts  zListbox.insertcCs,|j|j||j|j|=|j|=dSr)rlistboxDeleteItemr5r4rr7rrrdeleteszListbox.deletecCsL|j||j|}|j|j||j|j|=||j|<||j|<dSr)rr8r5r;r4r6rrrreplaces  zListbox.replacecCs|j|jSr)r4rZlistboxGetCurrentrrrrcurrentszListbox.currentcCs,g}|j}|D]}||j|q|Sr)rZlistboxGetSelectionrr4rZ selectionlistr1rrr getSelections  zListbox.getSelectioncCs|j|j|dSr)rZlistboxSetCurrentr5r<rrr setCurrentszListbox.setCurrentcCsi|_i|_|jdSr)r4r5rZ listboxClearrrrrclearsz Listbox.clearrcCs6t|||||||_i|_i|_|r2|j|dSr)r listboxrr4r5ZlistboxSetWidth)rheightscroll returnExitwidthZ showCursorZmultipleZborderrrrrs zListbox.__init__N)rrrrrr) rrrrrr:r=r>r?rBrCrDrrrrrr3sr3c@s*eZdZdZddZddZd ddZd S) TextboxaTextbox, container for text. methods: - Textbox(self, width, height, scroll = 0, wrap = 0): scroll, wrap are flags include scroll bars, or text wrap. - setText(text) : set text. - setHeight(height): set height. cCs|j|dSr)rZ textboxTextr"rrrsetTextszTextbox.setTextcCs|j|dSr)rZ textboxHeight)rrFrrr setHeightszTextbox.setHeightrcCst||||||_dSr)r Ztextboxr)rrIrFr#rGZwraprrrrszTextbox.__init__N)rr)rrrrrKrLrrrrrrJs rJc@seZdZdddZdS)TextboxReflowed r cCsNt||||\}}}|dkr8||kr8t||||dnt||||ddS)Nr r r)reflowrJr)rrIr#flexDownflexUp maxHeightZnewtextrFrrrrszTextboxReflowed.__init__N)rNrOr )rrrrrrrrrMsrMc@s(eZdZdZddZddZddZdS) LabelzA Label (simple text). methods: - Label(self,text) : create label - setText(self,text) : change text. - setColors(self, colorset) : change individual colors cCs|j|dSr)rZ labelTextr"rrrrKsz Label.setTextcCst||_dSr)r labelrr"rrrrszLabel.__init__cCs|j|dSr)rZlabelSetColors)rcolorsetrrr setColorsszLabel.setColorsN)rrrrrKrrWrrrrrTsrTc@s eZdZdZddZddZdS)ScalezA Scale (progress bar). methods: - Scale(self,width, total) : create scale; width: size on screen, fullamount: integer. - set(self,amount) : set amount to integer. cCs|j|dSr)rZscaleSet)rZamountrrrsetsz Scale.setcCst|||_dSr)r Zscaler)rrIZtotalrrrr szScale.__init__N)rrrrrYrrrrrrXsrXc@s4eZdZdZddZdddZddZdd d Zd S)EntryaEntry widget. methods: - Entry(self, width, text = "", hidden = 0, password = 0, scroll = 1, returnExit = 0) constructor. hidden doesn't show text, password stars it out, scroll includes scroll bars; if returnExit is set, return from Form when exiting this element, else proceed to next entry widget. - value(self): return value. - set(text, cursorAtEnd = 1) : set the text - setFlags (flag, sense) : flags can be FLAG_DISABLED, FLAGS_SET, FLAGS_RESET, FLAGS_TOGGLE cCs|jjSr)rZ entryValuerrrrr(sz Entry.valuer cCs|j||Sr)rZ entrySetValue)rr#Z cursorAtEndrrrrYsz Entry.setcCs|j||Sr)rZ entrySetFlagsr+rrrr-"szEntry.setFlagsrcCst|||||||_dSr)r entryr)rrIr#ZhiddenZpasswordrGrHrrrr%szEntry.__init__N)r )r[rrr r)rrrrr(rYr-rrrrrrZs  rZ )ZF1ZF2ZF3ZF4ZF5ZF6ZF7ZF8ZF9ZF10ZF11ZF12ZESCZENTERZSUSPENDZ BACKSPACEZDELETEZINSERTZRESIZEr]cCsg|]}t||fqSr)ord).0crrr 7srac@sReZdZdZddZddZddZdd Zdd d Zd dZ ddZ ddZ d S)Forma Base Form class, from which Grid, etc. inherit methods: - Form(self, helpArg = None) : constructor. - addHotKey(self, keyname) : keynames of form "F1" through "F12", "ESC" - add(self, widget) : Add a widget - run(self): run a form, expecting input - draw(self): draw form. - setTimer(self, timer) : add a timer - watchFile(self, file, flags) : watch a named file - setCurrent (self, co): Set a given widget as the current focus cCs|jt|dSr)rZ addhotkeyhotkeysrZkeynamerrr addHotKeyIszForm.addHotKeycCspd|jkr$|jD]}||qd|jkrF|jD]}||q4n&d|jkrl||j|jj<|j|jSdS)Nrc gridmembersr) __dict__rckeysrerfaddtransrr1)rwidgetr1rrrrriLs     zForm.addcCsb|j\}}|tjkr"|j|S|tjkr0dS|tjkrD|j|S|tjkrVt |St ddS)NZTIMERzEOF or IO error) rrunr ZFORM_EXIT_WIDGETrjZFORM_EXIT_TIMERZFORM_EXIT_FDREADYfilemapZFORM_EXIT_HOTKEYrc RuntimeError)rwhatZwhichrrrrlYs      zForm.runcCs|jdSr)rdrawrrrrrpes z Form.drawNcCs"i|_i|_t||_||_dSr)rjrmr formrhelpArg)rrrrrrris z Form.__init__cCs|j|jdSr)rZ setcurrentrcorrrrCpszForm.setCurrentcCs|j|dSr)rZsettimer)rZtimerrrrsetTimerssz Form.setTimercCs$||j|<|j||dSr)rmfilenorZwatchfd)rfileflagsrrr watchFilevszForm.watchFile)N) rrrrrerirlrprrCruryrrrrrb;s    rbc@s*eZdZdZddZd ddZdd Zd S) GridayGrid class. methods: - place(self,x,y): Return what is placed at (x,y) - setField(self, what, col, row, padding = (0, 0, 0, 0), anchorLeft = 0, anchorTop = 0, anchorRight = 0, anchorBottom = 0, growx = 0, growy = 0): used to add widget 'what' to grid. - Grid(self, *args): eg. g = Grid(2,3) for 2x3 grid cCs|j||Sr)gplacerxyrrrr|sz Grid.placerrrrrc Cs|j|d} |rtj} n |r&tj} |r6| tjB} n|rD| tjB} d} | rRtj} | r`| tjB} d|j kr|j |||j || | S|j |||j || SdS)Nrr{) rfrr Z ANCHOR_LEFTZ ANCHOR_RIGHTZ ANCHOR_TOPZ ANCHOR_BOTTOMZ GRID_GROWXZ GRID_GROWYrgr{Zsetfieldr) rrocolrowpadding anchorLeft anchorTop anchorRight anchorBottomgrowxgrowyZ anchorFlagsZ gridFlagsrrrsetFields(     z Grid.setFieldcGstj||_g|_dSr)r gridr{rf)rargsrrrrs z Grid.__init__N)rrrrrrr)rrrrr|rrrrrrrzzs  rz)ZROOTZBORDERZWINDOWZSHADOWZTITLEZBUTTONZ ACTBUTTONZCHECKBOXZ ACTCHECKBOXZENTRYZLABELZLISTBOXZ ACTLISTBOXZTEXTBOXZ ACTTEXTBOXZHELPLINEZROOTTEXTZ EMPTYSCALEZ FULLSCALEZDISENTRYZ COMPACTBUTTONZ ACTSELLISTBOXZ SELLISTBOXc@seZdZdZddZddZddZdd Zd d Zd d Z d$ddZ ddZ ddZ ddZ ddZddZd%ddZd&ddZd d!Zd"d#ZdS)' SnackScreena A Screen; methods: - Screen(self) : constructor - finish(self) - resume(self) - suspend(self) - doHelpCallback(self,arg) call callback with arg - helpCallback(self,cb): Set help callback - suspendcallback(self,cb, data=None) : set callback. data=data to pass to cb. - openWindow(self,left, top, width, height, title): Open a window. - pushHelpLine(self,text): put help line on screen. Returns current help line if text=None - setColor(self, colorset, fg, bg): Set foreground and background colors; colorset = key from snack.colorsets, fg & bg = english color names defined by S-Lang (ref: S-Lang Library C Programmer's Guide section: 8.4.4. Setting Character Attributes) cCs&tt\|_|_|ddSr)r ZinitsizerIrF pushHelpLinerrrrrszSnackScreen.__init__cCstSr)r finishrrrrrszSnackScreen.finishcCs tdSr)r resumerrrrrszSnackScreen.resumecCs tdSr)r suspendrrrrrszSnackScreen.suspendcCs|||dSr)helpCb)rargrrrdoHelpCallbackszSnackScreen.doHelpCallbackcCs||_t|jSr)rr Z helpcallbackr)rcbrrr helpCallbackszSnackScreen.helpCallbackNcCs|rt||St|Sr)r Zsuspendcallback)rrrrrrsuspendCallbacks zSnackScreen.suspendCallbackcCst|||||Sr)r Z openwindow)rlefttoprIrFtitlerrr openWindowszSnackScreen.openWindowcCs|stdSt|SdS)Nz *default*)r Z pushhelpliner"rrrrs zSnackScreen.pushHelpLinecCstSr)r Z pophelplinerrrr popHelpLineszSnackScreen.popHelpLinecCst|||Sr)r Z drawroottext)rrrr#rrr drawRootTextszSnackScreen.drawRootTextcCst|||Sr)r Zcenteredwindow)rrIrFrrrrcenteredWindowszSnackScreen.centeredWindowcCs(|r|rt|j|||St|j|Sr)r Zgridwrappedwindowr{)rrrr~rrrrgridWrappedWindowszSnackScreen.gridWrappedWindowTcCs|r tStSr)r Z popwindowZpopwindownorefresh)rrefreshrrr popWindowszSnackScreen.popWindowcCstSr)r rrrrrr szSnackScreen.refreshcCs,|tkrtt|||St|||SdSr) colorsetsr Zsetcolor)rrVZfgZbgrrrsetColorszSnackScreen.setColor)N)NN)T)rrrrrrrrrrrrrrrrrrrrrrrrrs"   rrNcCst||||S)zR returns a tuple of the wrapped text, the actual width, and the actual height )r rP)r#rIrQrRrrrrPsrPc@s*eZdZdZddZd ddZddZdS) RadioGroupz Combo widget: Group of Radio buttons methods: - RadioGroup(self): constructor. - add(self,title, value, default = None): add a button. Returns button. - getSelection(self) : returns value of selected button | None cCsd|_g|_dSr)prev buttonlistrrrrr%szRadioGroup.__init__NcCs:|js|dkrd}t||j|}||_|j||f|SNr )rr0rr)rrr(defaultbrrrri)s zRadioGroup.addcCs$|jD]\}}|r|SqdSr)rr*)rrr(rrrrB3s zRadioGroup.getSelection)N)rrrrrrirBrrrrrs rc@s eZdZdZddZddZdS)RadioBarz Bar of Radio buttons, based on Grid. methods: - RadioBar(self, screen, buttonlist) : constructor. - getSelection(self): return value of selected button cCszg|_d|_t|_t|dt||D]J\}}}|j|||}|j||f|j |d|jdd|jd|_q*dS)Nrr r) rAr7rr2rzrlenrirr)rscreenrrr(rrrrrrBszRadioBar.__init__cCs |jSr)r2rBrrrrrBMszRadioBar.getSelectionN)rrrrrrBrrrrr9s rc@s"eZdZdZdddZddZdS) ButtonBara Bar of buttons, based on grid. methods: - ButtonBar(screen, buttonlist,buttonlist, compact = 0): - buttonPressed(self, result): Takes the widget returned by Form.run and looks to see if it was one of the widgets in the ButtonBar. rc Csg|_i|_d|_t|t|d|D]}t|tjdkr>t nt rR|}| }n*t|dkrh|\}}n|\}}}||j|<|rt |}nt |}|j||f|||jdd|jd|_q(dS)Nrr 3)r rr r)rArcr7rzrr isinstancesysversionstr basestringlowerr%rrr) rrrZcompactZblistrr(Zhotkeyrrrrr\s$      zButtonBar.__init__cCs8||jkr|j|S|jD]\}}||kr|SqdSr)rcrA)rresultr!r(rrr buttonPressedss    zButtonBar.buttonPressedN)r)rrrrrrrrrrrSs rc@sheZdZdZddZdddZdd d Zd d Zd dZdddZ dddZ ddZ ddZ ddZ dS) GridFormHelpa= Subclass of Grid, for the help form text. methods: - GridFormHelp(self, screen, title, help, *args) : - add (self, widget, col, row, padding = (0, 0, 0, 0), anchorLeft = 0, anchorTop = 0, anchorRight = 0, anchorBottom = 0, growx = 0, growy = 0): - runOnce(self, x = None, y = None): pop up the help window - addHotKey(self, keyname): - setTimer(self, keyname): - create(self, x = None, y = None): - run(self, x = None, y = None): - draw(self): - runPopup(self): - setCurrent (self, co): cGsJ||_||_t||_g|_d|_t|}|g|dd<tjt |dSr)) rrrbrq childList form_createdrArzrtuple)rrrhelprrrrrs zGridFormHelp.__init__rrc Cs,|||||||||| | |j|dSr)rrr) rrkrrrrrrrrrrrrriszGridFormHelp.addNcCs|||}|j|Sr)rlrr)rr~rrrrrrunOnces  zGridFormHelp.runOncecCs|j|dSr)rqrerdrrrreszGridFormHelp.addHotKeycCs|j|dSr)rqrurdrrrruszGridFormHelp.setTimercCsH|jsD|dd|jD]}|j|q|j||j||d|_dSr)rr|rrqrirrr)rr~rZchildrrrcreates   zGridFormHelp.createcCs||||jSr)rrqrlr}rrrrls zGridFormHelp.runcCs||jSr)rrqrprrrrrpszGridFormHelp.drawcCs0||j||j|j}|j|Sr)rrrrrqrlr)rrrrrrunPopups   zGridFormHelp.runPopupcCs|j|dSr)rqrCrsrrrrCszGridFormHelp.setCurrent)rrrrrrr)NN)NN)NN)rrrrrrirrerurrlrprrCrrrrr}s$     rc@seZdZdZddZdS)GridFormzh GridForm class (extends GridFormHelp): methods: - GridForm(self, screen, title, *args): cGs|||df|}tj|dSr)rr)rrrrZmyargsrrrrszGridForm.__init__Nr$rrrrrsrc@s`eZdZdZdddZdddZdd Zdd d Zd d ZddZ ddZ dddZ ddZ dS) CheckboxTreea CheckboxTree combo widget, methods: - CheckboxTree(self, height, scroll = 0, width = None, hide_checkbox = 0, unselectable = 0) constructor. - append(self, text, item = None, selected = 0): - addItem(self, text, path, item = None, selected = 0): - getCurrent(self): - getSelection(self): - setEntry(self, item, text): - setCurrent(self, item): - setEntryValue(self, item, selected = 1): - getEntryValue(self, item): NrcCs||tdf||dS)Nr)addItem snackArgs)rr#r7r*rrrrszCheckboxTree.appendcCs4|dkr |}|j|||}||j|<||j|<dSr)rZcheckboxtreeAddItemr4r5)rr#pathr7r*r1rrrrs  zCheckboxTree.addItemcCs|j}|j|Sr)rZcheckboxtreeGetCurrentr4)rZcurrrrr getCurrents zCheckboxTree.getCurrentcCs2t|||||_i|_i|_|r.|j|dSr)r Z checkboxtreerr4r5ZcheckboxtreeSetWidth)rrFrGrIZ hide_checkboxZ unselectablerrrrs zCheckboxTree.__init__cCs,g}|j}|D]}||j|q|Sr)rZcheckboxtreeGetSelectionrr4r@rrrrBs  zCheckboxTree.getSelectioncCs|j|j||dSr)rZcheckboxtreeSetEntryr5)rr7r#rrrsetEntryszCheckboxTree.setEntrycCs|j|j|dSr)rZcheckboxtreeSetCurrentr5r<rrrrCszCheckboxTree.setCurrentr cCs|j|j||dSr)rZcheckboxtreeSetEntryValuer5)rr7r*rrr setEntryValueszCheckboxTree.setEntryValuecCs|j|j|Sr)rZcheckboxtreeGetEntryValuer5r<rrr getEntryValueszCheckboxTree.getEntryValue)Nr)Nr)rNrr)r ) rrrrrrrrrBrrCrrrrrrrs    rOkCancel(c Cs|dkrt|}t||} t||} t||dd} d} |D]P}t|tkrT|\}}n|}| }|| krj|}n ||krv|}| ||| d} q:|dkr| |t||| dd}| | dd|j | dddd|j | dd dd | }| || fS) z - ListboxChoiceWindow(screen, title, text, items, buttons = ('Ok', 'Cancel'), width = 40, scroll = 0, height = -1, default = None, help = None): r r )rGrHrN)rr rr rrr) rrrMr3typerrrCrrirrr?)rrr#itemsbuttonsrIrGrFrrbbtlcountr7r1r{ZrcrrrListboxChoiceWindow s2        rrrc Csdt||}t|||jdd} t|||dd} | j| dddd| j|dddd|| ||S) z - ButtonChoiceWindow(screen, title, text, buttons = [ 'Ok', 'Cancel' ], width = 40, x = None, y = None, help = None): )rSr rrrrrr rr)rrMrFrrirr) rrr#rrIr~rrrrr{rrrButtonChoiceWindow4s  rr c CsPt||} t||} d} |D] } | d} qtd| } d} g}|D]} t| tkr|| \} }t|tjdkrjtnt rt ||}nt |}| j t | d| ddd| j |d| dd| d} | |q@t|||dd}|j| ddd d |j| ddd d |j| dddd |}g}d} |D] } | || | d} q| |t|fS) z EntryWindow(screen, title, text, prompts, allowCancel = 1, width = 40, entryWidth = 20, buttons = [ 'Ok', 'Cancel' ], help = None): rr rr)rrr r)rrrrrrr)rrMrzrrrrrrrrZrrTrrrirr(r)rrr#ZpromptsZ allowCancelrIZ entryWidthrrrrrnZsgZ entryLister{rZ entryValuesrrr EntryWindowDs:        rc@sbeZdZdZdddZdddZdd d Zdd d Zd dZdddZ ddZ ddZ ddZ dS)CListboxapClistbox convenience class. methods: - Clistbox(self, height, cols, cols_widths, scroll = 0) : constructor - colFormText(self, col_text, align = None, adjust_width = 0) : column text. - append(self, col_text, item, col_text_align = None) : - insert(self, col_text, item, before, col_text_align = None) - delete(self, item) - replace(self, col_text, item, col_text_align = None) - current(self) : returns current item - setCurrent(self, item): sets an item as current - clear(self): clear the listbox Alignments may be LEFT, RIGHT, CENTER, None rr Nc Cs||_|dd|_||_||_| dkrjt|ddd} |j| | | d} t| |_|j |jddddnt|ddd} t |||||_ |j |j d| dddS)Nr r) adjust_widthrr)r) cols col_widthscol_padcol_text_alignrzr colFormTextrTrUrr3rE)rrFrrrGrHrIrrZ col_labelsZcol_label_alignrZbox_yZlstrrrrrs  zCListbox.__init__c Cs"d}d}t|}||jkr||kr||}t|}|j||krh|rV||j|<n|d|j|}|j|t|} | dkr|dkrt} n||} | tkr|d| }| tkrd| d|d| dd}| tkrd| |}||dkrd|j} nd} ||| }|d}q|S)Nrr[r]rr ) rrr ZwstrlenrLEFTCENTERRIGHTr) rcol_textZalignrirZc_lenZcstrZcstrlenZdeltaaZpstrrrrrs:       zCListbox.colFormTextcCs,|dkr|j}|||}|j||dSr)rrrErrrr7rr#rrrrs zCListbox.appendcCs.|dkr|j}|||}|j|||dSr)rrrEr:)rrr7r9rr#rrrr:s zCListbox.insertcCs|j|dSr)rEr=r<rrrr=szCListbox.deletecCs,|dkr|j}|||}|j||dSr)rrrEr>rrrrr>s zCListbox.replacecCs |jSr)rEr?rrrrr?szCListbox.currentcCs|j|dSr)rErCr<rrrrCszCListbox.setCurrentcCs|jdSr)rErDrrrrrDszCListbox.clear)rrrr NNNr)Nr)N)N)N) rrrrrrrr:r=r>r?rCrDrrrrrrs$  )   rcCsd|S)Nr)r~rrrcustomColorsetsr)rNrN)rrrr NN)crZ __future__rrrr stringrrrrrr r r rZDOWNrZUPrrrrr%r&r0r3rJrMrTrXrZZKEY_F1ZKEY_F2ZKEY_F3ZKEY_F4ZKEY_F5ZKEY_F6ZKEY_F7ZKEY_F8ZKEY_F9ZKEY_F10ZKEY_F11ZKEY_F12ZKEY_ESCZ KEY_ENTERZ KEY_SUSPENDZ KEY_BACKSPACEZ KEY_DELETEZ KEY_INSERTZ KEY_RESIZEr^rcrArhrZ ascii_lettersZdigitsor`rbrzZ COLORSET_ROOTZCOLORSET_BORDERZCOLORSET_WINDOWZCOLORSET_SHADOWZCOLORSET_TITLEZCOLORSET_BUTTONZCOLORSET_ACTBUTTONZCOLORSET_CHECKBOXZCOLORSET_ACTCHECKBOXZCOLORSET_ENTRYZCOLORSET_LABELZCOLORSET_LISTBOXZCOLORSET_ACTLISTBOXZCOLORSET_TEXTBOXZCOLORSET_ACTTEXTBOXZCOLORSET_HELPLINEZCOLORSET_ROOTTEXTZCOLORSET_EMPTYSCALEZCOLORSET_FULLSCALEZCOLORSET_DISENTRYZCOLORSET_COMPACTBUTTONZCOLORSET_ACTSELLISTBOXZCOLORSET_SELLISTBOXrrrPrrrrrrrrrrrrrrrs$$  A    ?.U *I 9 ,  .s