^ fydZddlmZmZmZddlZddlZddlZddlmZm Z m Z m Z m Z m Z mZdZdZdZdZd Zd d iZGd d ZGddeZGddeZGddeZGddeZGddeZGddeZGddeZGddeZGddeZGd d!eZid"ej@d#ejBd$ejDd%ejFd&ejHd'ejJd(ejLd)ejNd*ejPd+ejRd,ejTd-ejVd.ejXd/ejZd0ej\d1ej^d2ej`ejbejde3d3d4Z4e5e4jmD] Z7e7e4e4e7< ejpejrzDcgc] }e3||fc}D]\Z:Z;e:e4e;<e;e4e:<Gd5d6Z<Gd7d8Z=id9ej|d:ej~d;ejdejd?ejd@ejdAejdBejdCejdDejdEejdFejdGejdHejdIejejejejejejejdJZUGdKdLZVdedMZWGdNdOeZXGdPdQe=ZYGdRdSe=ZZGdTdUe=Z[GdVdWe[Z\GdXdYeZ] dfd[Z^d\d]gdZdddfd^Z_d_dZd`d\d]gdfdaZ`Gdbdce=ZaddZbycc}w)ga 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)rrappendr ceZdZdZddZdZy)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. Ncx|r|jj||y|jj|yN)w setCallback)selfobjdatas '/usr/lib/python3/dist-packages/snack.pyrzWidget.setCallbackDs+  FF  sD ) FF  s #ctr)NotImplementedErrorrs r__init__zWidget.__init__Js!!rr)__name__ __module__ __qualname____doc__rrrrrr:s$ "rrceZdZdZdZy)ButtonzqBasic button class, takes button text as parameter method: - Button(self, text): returns a button c8tj||_yr)_snackbuttonrrtexts rrzButton.__init__Tst$rNr r!r"r#rr$rrr&r&Ms  %rr&ceZdZdZdZy) CompactButtonzCompact Button class (less frilly button decoration). methods: - CompactButton(self,text) : create button, with text. c8tj||_yr)r( compactbuttonrr*s rrzCompactButton.__init__^s%%d+rNr,r$rrr.r.Ws  ,rr.c0eZdZdZdZdZdZdZddZy) 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 c.|jjSrr checkboxValuers rvaluezCheckbox.valuensvv###rc4|jjdk7SNrr4rs rselectedzCheckbox.selectedqsvv##q((rc:|jj||Sr)rcheckboxSetFlagsrflagsenses rsetFlagszCheckbox.setFlagstsvv&&tU33rc8|jj|Sr)rcheckboxSetValue)rr6s rsetValuezCheckbox.setValuexsvv&&u--rc:tj|||_yr)r(checkboxr)rr+isOns rrzCheckbox.__init__{st,rNr) r r!r"r#r6r9r?rBrr$rrr2r2as  $)4.-rr2ceZdZdZdZddZy)SingleRadioButtonzSingle Radio Button. methods: - SingleRadioButton(text, group, isOn = 0) : create button - selected(self) : returns bool, whether or not is selected. c\|jj|jjk(Sr)rkey radioValuers rr9zSingleRadioButton.selectedsvvzzTVV....rc|r'tj||j||_ytj|d||_yr)r( radiobuttonr)rr+grouprEs rrzSingleRadioButton.__init__s5 ''eggt   t!45 MM$--- . MM$ rc|jj||j|}|jj|j||j|j|=||j|<||j|<yr)rrXrTr\rSrUs rreplacezListbox.replacesmff&&tT]]4-@A   t!45 MM$--- .! d! crcP|j|jjSr)rSrlistboxGetCurrentrs rcurrentzListbox.currents}}TVV55788rcg}|jj}|D] }|j|j|"|Sr)rlistboxGetSelectionrrSr selectionlistrJs r getSelectionzListbox.getSelectionsE vv))+ 1C   T]]3/ 0 1rcT|jj|j|yr)rlistboxSetCurrentrTr]s r setCurrentzListbox.setCurrents   t!45rcTi|_i|_|jjyr)rSrTr listboxClearrs rclearz Listbox.clears    rctj|||||||_i|_i|_|r|jj |yyr)r(listboxrrSrTlistboxSetWidth)rheightscroll returnExitwidth showCursormultipleborders rrzListbox.__init__sE JRXY   FF " "5 ) rN)rrrrrr) r r!r"r#rrZr^r`rcrirlrorr$rrrPrPs4 " " "96 *rrPc$eZdZdZdZdZddZy)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. c:|jj|yr)r textboxTextr*s rsetTextzTextbox.setTexts 4 rc:|jj|yr)r textboxHeight)rrss r setHeightzTextbox.setHeights V$rc@tj||||||_yr)r(textboxr)rrvrsr+rtwraps rrzTextbox.__init__svtVTBrNr)r r!r"r#r~rrr$rrr{r{s!%Crr{ceZdZddZy)TextboxReflowedct||||\}}}|dk7r||kDrtj||||dytj||||dy)Nr rr)reflowr{r)rrvr+flexDownflexUp maxHeightnewtextrss rrzTextboxReflowed.__init__sS#)$x#H % ?v 1   T5)Wa @   T5&'1 =rN) r )r r!r"rr$rrrrs>rrc"eZdZdZdZdZdZy)LabelzA Label (simple text). methods: - Label(self,text) : create label - setText(self,text) : change text. - setColors(self, colorset) : change individual colors c:|jj|yr)r labelTextr*s rr~z Label.setTexts rc8tj||_yr)r(labelrr*s rrzLabel.__init__sd#rc:|jj|yr)rlabelSetColors)rcolorsets r setColorszLabel.setColorss h'rN)r r!r"r#r~rrr$rrrrs$(rrceZdZdZdZdZy)ScalezA Scale (progress bar). methods: - Scale(self,width, total) : create scale; width: size on screen, fullamount: integer. - set(self,amount) : set amount to integer. c:|jj|yr)rscaleSet)ramounts rsetz Scale.sets rc:tj|||_yr)r(scaler)rrvtotals rrzScale.__init__ seU+rN)r r!r"r#rrr$rrrrs ,rrc0eZdZdZdZddZdZ ddZy) 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 c.|jjSr)r entryValuers rr6z Entry.valuesvv   rc:|jj||Sr)r entrySetValue)rr+ cursorAtEnds rrz Entry.setsvv##D+66rc:|jj||Sr)r entrySetFlagsr<s rr?zEntry.setFlags"svv##D%00rcBtj|||||||_yr)r(entryr)rrvr+hiddenpasswordrtrus rrzEntry.__init__%seT68VZPrNr)rrrr)r r!r"r#r6rr?rr$rrrrs& !71MNQrrF1F2F3F4F5F6F7F8F9F10F11F12ESCENTERSUSPEND BACKSPACEDELETE )INSERTRESIZErcBeZdZdZdZdZdZdZd dZdZ d Z d Z y) 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 cH|jjt|yr)r addhotkeyhotkeysrkeynames r addHotKeyzForm.addHotKeyIs )*rcd|jvr0|jjD]}|j|d|jvr#|jD]}|j |yd|jvrH||j |jj<|jj |jSy)Nr gridmembersr) __dict__rkeysrraddtransrrJ)rwidgetrJrs rrzForm.addLs  '~~**, $s# $ FOO +''    FOO #'-DJJvxx|| $66::fhh' 'rc:|jj\}}|tjk(r|j|S|tj k(ry|tj k(r|j|S|tjk(r t|Std)NTIMERzEOF or IO error) rrunr(FORM_EXIT_WIDGETrFORM_EXIT_TIMERFORM_EXIT_FDREADYfilemapFORM_EXIT_HOTKEYr RuntimeError)rwhatwhichs rrzForm.runYs u F++ +::e$ $f,,,f...<<& &f---5> !,--rc8|jjyr)rdrawrs rrz Form.drawes  rNcbi|_i|_tj||_||_yr)rrr(formrhelpArg)rrs rrz Form.__init__is'  W% rcN|jj|jyr)r setcurrentrcos rrlzForm.setCurrentps 244 rc:|jj|yr)rsettimer)rtimers rsetTimerz Form.setTimerss rc||j|j<|jj|j|yr)rfilenorwatchfd)rfileflagss r watchFilezForm.watchFilevs.&* T[[]#  u-rr) r r!r"r#rrrrrrlrrr$rrrr;s/ +  .! .rrc*eZdZdZdZ ddZdZy)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 c:|jj||Sr)gplacerxys rrz Grid.placesvv||Aq!!rc |jj|d} |rtj} n|rtj} |r| tj z} n|r| tj z} d} | rtj} | r| tjz} d|jvr*|jj|||j|| | S|jj|||j|| S)Nrr) rrr( ANCHOR_LEFT ANCHOR_RIGHT ANCHOR_TOP ANCHOR_BOTTOM GRID_GROWX GRID_GROWYrrsetfieldr) rrcolrowpadding anchorLeft anchorTop anchorRight anchorBottomgrowxgrowy anchorFlags gridFlagss rsetFieldz Grid.setFields %  ,,K --K %(9(99K%(<(<67./K6rrROOTBORDERWINDOWSHADOWTITLEBUTTON ACTBUTTONCHECKBOX ACTCHECKBOXENTRYLABELLISTBOX ACTLISTBOXTEXTBOX ACTTEXTBOXHELPLINEROOTTEXT) EMPTYSCALE FULLSCALEDISENTRY COMPACTBUTTON ACTSELLISTBOX SELLISTBOXcveZdZdZdZdZdZdZdZdZ dd Z d Z d Z d Z d ZdZddZddZdZdZy) 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) ctjtj\|_|_|j dyr)r(initsizervrs pushHelpLiners rrzSnackScreen.__init__s- $*KKM!T[ $rc*tjSr)r(finishrs rr0zSnackScreen.finishs}}rc,tjyr)r(resumers rr2zSnackScreen.resumes  rc,tjyr)r(suspendrs rr4zSnackScreen.suspends rc(|j||yr)helpCb)rargs rdoHelpCallbackzSnackScreen.doHelpCallbacks D#rcN||_tj|jSr)r6r( helpcallbackr8)rcbs r helpCallbackzSnackScreen.helpCallbacks  ""4#6#677rNc\|rtj||Stj|Sr)r(suspendcallback)rr;rs rsuspendCallbackzSnackScreen.suspendCallbacks) ))"d3 3%%b))rc4tj|||||Sr)r( openwindow)rlefttoprvrstitles r openWindowzSnackScreen.openWindows  sE65AArcZ|stjdStj|S)Nz *default*)r( pushhelpliner*s rr.zSnackScreen.pushHelpLines'&&{3 3&&t, ,rc*tjSr)r( pophelpliners r popHelpLinezSnackScreen.popHelpLines!!##rc0tj|||Sr)r( drawroottext)rrBrCr+s r drawRootTextzSnackScreen.drawRootTexts""4d33rc0tj|||Sr)r(centeredwindow)rrvrsrDs rcenteredWindowzSnackScreen.centeredWindows$$UFE::rc|r$|r"tj|j|||Stj|j|Sr)r(gridwrappedwindowr)rrrDrrs rgridWrappedWindowzSnackScreen.gridWrappedWindows9 ++DFFE1a@ @''66rcV|rtjStjSr)r( popwindowpopwindownorefresh)rrefreshs r popWindowzSnackScreen.popWindows# ##% %((**rc*tjSr)r(rWrs rrWzSnackScreen.refresh s~~rc||tvrtjt|||Stj|||Sr) colorsetsr(setcolor)rrfgbgs rsetColorzSnackScreen.setColors7 y ??9X#6B? ?//(B3 3rrNN)T)r r!r"r#rr0r2r4r8r<r?rEr.rJrMrPrSrXrWr_r$rrr*r*sX& 8* B- $4;7 +  4rr*c2tj||||S)zR returns a tuple of the wrapped text, the actual width, and the actual height )r(r)r+rvrrs rrrs ==uh 77rc$eZdZdZdZddZdZy) 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 c d|_g|_yr)prev buttonlistrs rrzRadioGroup.__init__%s rNc|js|dk(rd}t||j|}||_|jj||f|SNr)rerHrfr)rrDr6defaultbs rrzRadioGroup.add)sJyyW_G eTYY 8  5z*rcT|jD]\}}|js|cSyr)rfr9)rrjr6s rrizRadioGroup.getSelection3s)// *JQzz|E\ *rr)r r!r"r#rrrir$rrrcrcsrrcceZdZdZdZdZy)RadioBarz Bar of Radio buttons, based on Grid. methods: - RadioBar(self, screen, buttonlist) : constructor. - getSelection(self): return value of selected button cng|_d|_t|_tj |dt ||D]s\}}}|jj|||}|jj||f|j|d|jd|jdz|_uy)Nrrr) rhrVrcrNrrlenrrr )rscreenrfrDr6rirjs rrzRadioBar.__init__Bs  \  dAs:/'1 & #UE7 ueW5A II  aZ ( MM!Q M : A DI  &rc6|jjSr)rNrirs rrizRadioBar.getSelectionMszz&&((rN)r r!r"r#rrir$rrrmrm9s &)rrmceZdZdZddZdZy) 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. cg|_i|_d|_tj |t |d|D]}t |tjdk\rtntr|}|j}n)t |dk(r|\}}n|\}}}||j|<|r t|}n t|}|jj||f|j||jdd|jdz|_y)Nrr3)rrrr)rhrrVrrrp isinstancesysversionstr basestringlowerr.r&rr ) rrqrfcompactblistrDr6hotkeyrjs rrzButtonBar.__init__\s    dC OQ/ &E% s(: K Uq!&).&v', V$!%(5M II  aZ ( MM!TYY< 8 A DI! &rcx||jvr|j|S|jD]\}}||k(s |cSyr)rrh)rresultr)r6s r buttonPressedzButtonBar.buttonPressedssF T\\ !<<' '#yy OVU  rNrF)r r!r"r#rrr$rrrtrtSs&.rrtcZeZdZdZdZ d dZddZdZdZddZ dd Z d Z d Z d Z y) 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): c||_||_t||_g|_d|_t |}|g|ddtjt|yr8) rqrDrr childList form_createdrhrrtuple)rrqrDhelprs rrzGridFormHelp.__init__sP  J Dz6Ra uT{#rc n|j||||||||| | |jj|yr)r rr) rrrrrrrrrr r s rrzGridFormHelp.adds: fc3lU $ f%rNc^|j||}|jj|Sr)rrqrX)rrrrs rrunOncezGridFormHelp.runOnces&!Q  rc:|jj|yr)rrrs rrzGridFormHelp.addHotKeys G$rc:|jj|yr)rrrs rrzGridFormHelp.setTimers 7#rc|jsn|jdd|jD]}|jj ||j j ||j||d|_yyrh)rrrrrrqrSrD)rrrchilds rcreatezGridFormHelp.createsd  JJqO % e$ % KK ) )$ Aq A !D  !rcZ|j|||jjSr)rrrrs rrzGridFormHelp.runs  Aqyy}}rcV|j|jjSr)rrrrs rrzGridFormHelp.draws yy~~rc|j|jj||j|jj }|jj |Sr)rrqrSrDrrrX)rrs rrunPopupzGridFormHelp.runPopupsG  %%dDJJ7  rc:|jj|yr)rrlrs rrlzGridFormHelp.setCurrents b!rrr`)r r!r"r#rrrrrrrrrrlr$rrrr}sD"$/;9:12& %$" "rrceZdZdZdZy)GridFormzh GridForm class (extends GridFormHelp): methods: - GridForm(self, screen, title, *args): c:|||df|z}tj|yr)rr)rrqrDrmyargss rrzGridForm.__init__s#t,t3v&rNr,r$rrrrs  'rrcNeZdZdZd dZd dZdZd dZdZdZ d Z dd Z d Z y) 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): Nc<|j|tdf||y)Nr)addItem snackArgs)rr+rVr9s rrzCheckboxTree.appends TIh/2D(Crc||}|jj|||}||j|<||j|<yr)rcheckboxtreeAddItemrSrT)rr+pathrVr9rJs rrzCheckboxTree.addItems@ <Dff((tX>! c! drcT|jj}|j|Sr)rcheckboxtreeGetCurrentrS)rcurrs r getCurrentzCheckboxTree.getCurrents#vv,,.}}T""rctj|||||_i|_i|_|r|jj |yyr)r( checkboxtreerrSrTcheckboxtreeSetWidth)rrsrtrv hide_checkbox unselectables rrzCheckboxTree.__init__sB$$VV]LQ   FF ' ' . rcg}|jj}|D] }|j|j|"|Sr)rcheckboxtreeGetSelectionrrSrfs rrizCheckboxTree.getSelectionsE vv..0 1C   T]]3/ 0 1rcV|jj|j||yr)rcheckboxtreeSetEntryrT)rrVr+s rsetEntryzCheckboxTree.setEntrys ##DMM$$7>rcT|jj|j|yr)rcheckboxtreeSetCurrentrTr]s rrlzCheckboxTree.setCurrents %%dmmD&9:rcV|jj|j||yr)rcheckboxtreeSetEntryValuerT)rrVr9s r setEntryValuezCheckboxTree.setEntryValues ((t)r2s!HIH ddd   bM ""&%V%,F,-v-:::$?*f?*BCfC(>g>(F($ ,F ,QFQ: D6== $ v}}  6== "& 8rT8#5d,:\qtqf] Fs.O