
    ^	fy                        d Z ddlmZmZmZ ddlZddlZddlZddlmZm	Z	m
Z
mZmZmZmZ dZdZdZdZd	Zd
diZ G d d      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d  d!e      Zi d"ej@                  d#ejB                  d$ejD                  d%ejF                  d&ejH                  d'ejJ                  d(ejL                  d)ejN                  d*ejP                  d+ejR                  d,ejT                  d-ejV                  d.ejX                  d/ejZ                  d0ej\                  d1ej^                  d2ej`                  ejb                  ejd                   e3d3      d4Z4 e5e4jm                               D ]
  Z7e7e4e4e7   <    ejp                  ejr                  z   D  cg c]  }  e3|       | f c} D ]  \  Z:Z;e:e4e;<   e;e4e:<     G d5 d6      Z< G d7 d8      Z=i d9ej|                  d:ej~                  d;ej                  d<ej                  d=ej                  d>ej                  d?ej                  d@ej                  dAej                  dBej                  dCej                  dDej                  dEej                  dFej                  dGej                  dHej                  dIej                  ej                  ej                  ej                  ej                  ej                  ej                  dJZU G dK dL      ZVdedMZW G dN dOe      ZX G dP dQe=      ZY G dR dSe=      ZZ G dT dUe=      Z[ G dV dWe[      Z\ G dX dYe      Z]	 	 	 dfd[Z^d\d]gdZdddfd^Z_d_dZd`d\d]gdfdaZ` G db dce=      Zadd Zbyc c} 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_importprint_functionunicode_literalsN)FLAG_DISABLED	FLAGS_SETFLAGS_RESETFLAGS_TOGGLEFD_READFD_WRITE	FD_EXCEPT)r   )r   r   r   r   )   r   )r   r   appendr   c                       e Zd ZdZddZd Zy)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.
    Nc                 x    |r| j                   j                  ||       y | j                   j                  |       y N)wsetCallback)selfobjdatas      '/usr/lib/python3/dist-packages/snack.pyr   zWidget.setCallbackD   s+    FFsD)FFs#    c                     t         r   )NotImplementedErrorr   s    r   __init__zWidget.__init__J   s    !!r   r   )__name__
__module____qualname____doc__r   r    r   r   r   r   :   s    $"r   r   c                       e Zd ZdZd Zy)ButtonzqBasic button class, takes button text as parameter

    method:

     - Button(self, text): returns a button
    c                 8    t        j                  |      | _        y r   )_snackbuttonr   r   texts     r   r   zButton.__init__T   s    t$r   Nr    r!   r"   r#   r   r$   r   r   r&   r&   M   s    %r   r&   c                       e Zd ZdZd Zy)CompactButtonzCompact Button class (less frilly button decoration).

    methods:

     - CompactButton(self,text) : create button, with text.
    c                 8    t        j                  |      | _        y r   )r(   compactbuttonr   r*   s     r   r   zCompactButton.__init__^   s    %%d+r   Nr,   r$   r   r   r.   r.   W   s    ,r   r.   c                   0    e Zd ZdZd Zd Zd Zd ZddZy)	Checkboxa  A 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                 .    | j                   j                  S r   r   checkboxValuer   s    r   valuezCheckbox.valuen   s    vv###r   c                 4    | j                   j                  dk7  S Nr   r4   r   s    r   selectedzCheckbox.selectedq   s    vv##q((r   c                 :    | j                   j                  ||      S r   )r   checkboxSetFlagsr   flagsenses      r   setFlagszCheckbox.setFlagst   s    vv&&tU33r   c                 8    | j                   j                  |      S r   )r   checkboxSetValue)r   r6   s     r   setValuezCheckbox.setValuex   s    vv&&u--r   c                 :    t        j                  ||      | _        y r   )r(   checkboxr   )r   r+   isOns      r   r   zCheckbox.__init__{   s    t,r   Nr   )	r    r!   r"   r#   r6   r9   r?   rB   r   r$   r   r   r2   r2   a   s     $)4.-r   r2   c                       e Zd ZdZd ZddZy)SingleRadioButtonzSingle Radio Button.

    methods:
    
     -  SingleRadioButton(text, group, isOn = 0)  : create button
     -  selected(self)                            : returns bool, whether or not is selected.
    c                 \    | j                   j                  | j                   j                  k(  S r   )r   key
radioValuer   s    r   r9   zSingleRadioButton.selected   s    vvzzTVV....r   c                     |r't        j                  ||j                  |      | _        y t        j                  |d |      | _        y r   )r(   radiobuttonr   )r   r+   grouprE   s       r   r   zSingleRadioButton.__init__   s5    ''eggt<DF''dD9DFr   NrF   )r    r!   r"   r#   r9   r   r$   r   r   rH   rH   ~   s    0:r   rH   c                   H    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zdd
Zy)Listboxa  Listbox 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
    c                 v    | j                   j                  |      }|| j                  |<   || j                  |<   y r   )r   listboxAddItemkey2itemitem2keyr   r+   itemrJ   s       r   r   zListbox.append   s2    ff##D)!c!dr   c                     |s| j                   j                  |d      }n)| j                   j                  || j                  |         }|| j                  |<   || j                  |<   y r8   )r   listboxInsertItemrT   rS   )r   r+   rV   beforerJ   s        r   insertzListbox.insert   sV    &&**43C&&**4v1FGC!c!dr   c                     | j                   j                  | j                  |          | j                  | j                  |   = | j                  |= y r   )r   listboxDeleteItemrT   rS   r   rV   s     r   deletezListbox.delete   s>      t!45MM$---.MM$r   c                    | j                   j                  || j                  |         }| j                   j                  | j                  |          | j                  | j                  |   = || j                  |<   || j                  |<   y r   )r   rX   rT   r\   rS   rU   s       r   replacezListbox.replace   sm    ff&&tT]]4-@A  t!45MM$---.!d!cr   c                 P    | j                   | j                  j                            S r   )rS   r   listboxGetCurrentr   s    r   currentzListbox.current   s    }}TVV55788r   c                     g }| j                   j                         }|D ]   }|j                  | j                  |          " |S r   )r   listboxGetSelectionr   rS   r   	selectionlistrJ   s       r   getSelectionzListbox.getSelection   sE    	vv))+ 	1CT]]3/0	1r   c                 T    | j                   j                  | j                  |          y r   )r   listboxSetCurrentrT   r]   s     r   
setCurrentzListbox.setCurrent   s      t!45r   c                 T    i | _         i | _        | j                  j                          y r   )rS   rT   r   listboxClearr   s    r   clearzListbox.clear   s     r   c                     t        j                  ||||||      | _        i | _        i | _        |r| j                  j                  |       y y r   )r(   listboxr   rS   rT   listboxSetWidth)r   heightscroll
returnExitwidth
showCursormultipleborders           r   r   zListbox.__init__   sE    
JRXYFF""5) r   N)r   r   r   r   r   r   )r    r!   r"   r#   r   rZ   r^   r`   rc   ri   rl   ro   r   r$   r   r   rP   rP      s4    "
" 
"96
*r   rP   c                   $    e Zd ZdZd Zd ZddZy)Textboxa  Textbox, 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                 :    | j                   j                  |       y r   )r   textboxTextr*   s     r   setTextzTextbox.setText   s    4 r   c                 :    | j                   j                  |       y r   )r   textboxHeight)r   rs   s     r   	setHeightzTextbox.setHeight   s    V$r   c                 @    t        j                  |||||      | _        y r   )r(   textboxr   )r   rv   rs   r+   rt   wraps         r   r   zTextbox.__init__   s    vtVTBr   Nr   )r    r!   r"   r#   r~   r   r   r$   r   r   r{   r{      s    !%Cr   r{   c                       e Zd ZddZy)TextboxReflowedc                     t        ||||      \  }}}|dk7  r||kD  rt        j                  | |||d       y t        j                  | |||d       y )Nr   r   r   )reflowr{   r   )r   rv   r+   flexDownflexUp	maxHeightnewtextrs   s           r   r   zTextboxReflowed.__init__   sS    #)$x#H %?v	1T5)Wa@T5&'1=r   N)   
   r   )r    r!   r"   r   r$   r   r   r   r      s    >r   r   c                   "    e Zd ZdZd Zd Zd Zy)LabelzA Label (simple text).

    methods:

     - Label(self,text)   : create label
     - setText(self,text) : change text.
     - setColors(self, colorset) : change individual colors
    c                 :    | j                   j                  |       y r   )r   	labelTextr*   s     r   r~   zLabel.setText   s    r   c                 8    t        j                  |      | _        y r   )r(   labelr   r*   s     r   r   zLabel.__init__   s    d#r   c                 :    | j                   j                  |       y r   )r   labelSetColors)r   colorsets     r   	setColorszLabel.setColors   s    h'r   N)r    r!   r"   r#   r~   r   r   r$   r   r   r   r      s    $(r   r   c                       e Zd ZdZd Zd Zy)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                 :    | j                   j                  |       y r   )r   scaleSet)r   amounts     r   setz	Scale.set  s    r   c                 :    t        j                  ||      | _        y r   )r(   scaler   )r   rv   totals      r   r   zScale.__init__  s    eU+r   N)r    r!   r"   r#   r   r   r$   r   r   r   r      s     ,r   r   c                   0    e Zd ZdZd ZddZd Z	 	 ddZy)	Entrya  Entry 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                 .    | j                   j                  S r   )r   
entryValuer   s    r   r6   zEntry.value  s    vv   r   c                 :    | j                   j                  ||      S r   )r   entrySetValue)r   r+   cursorAtEnds      r   r   z	Entry.set  s    vv##D+66r   c                 :    | j                   j                  ||      S r   )r   entrySetFlagsr<   s      r   r?   zEntry.setFlags"  s    vv##D%00r   c                 B    t        j                  ||||||      | _        y r   )r(   entryr   )r   rv   r+   hiddenpasswordrt   ru   s          r   r   zEntry.__init__%  s    eT68VZPr   Nr   ) r   r   r   r   )r    r!   r"   r#   r6   r   r?   r   r$   r   r   r   r     s&    !71 MNQr   r   F1F2F3F4F5F6F7F8F9F10F11F12ESCENTERSUSPEND	BACKSPACEDELETE )INSERTRESIZEr   c                   B    e Zd ZdZd Zd Zd Zd ZddZd Z	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
    c                 H    | j                   j                  t        |          y r   )r   	addhotkeyhotkeysr   keynames     r   	addHotKeyzForm.addHotKeyI  s    )*r   c                    d|j                   v r0|j                  j                         D ]  }| j                  |        d|j                   v r#|j                  D ]  }| j                  |        y d|j                   v rH|| j                  |j                  j                  <   | j                  j                  |j                        S y )Nr   gridmembersr   )	__dict__r   keysr   r   addtransr   rJ   )r   widgetrJ   r   s       r   r   zForm.addL  s    '~~**, $s#$ FOO+'' 
  FOO#'-DJJvxx||$66::fhh''r   c                 :   | j                   j                         \  }}|t        j                  k(  r| j                  |   S |t        j
                  k(  ry|t        j                  k(  r| j                  |   S |t        j                  k(  r	t        |   S t        d      )NTIMERzEOF or IO error)r   runr(   FORM_EXIT_WIDGETr   FORM_EXIT_TIMERFORM_EXIT_FDREADYfilemapFORM_EXIT_HOTKEYr   RuntimeError)r   whatwhichs      r   r   zForm.runY  s    

uF+++::e$$f,,,f...<<&&f---5>!,--r   c                 8    | j                   j                          y r   )r   drawr   s    r   r   z	Form.drawe  s    r   Nc                 b    i | _         i | _        t        j                  |      | _        || _        y r   )r   r   r(   formr   helpArg)r   r   s     r   r   zForm.__init__i  s'    
W%r   c                 N    | j                   j                  |j                          y r   )r   
setcurrentr   cos     r   rl   zForm.setCurrentp  s    244 r   c                 :    | j                   j                  |       y r   )r   settimer)r   timers     r   setTimerzForm.setTimers  s    r   c                     || j                   |j                         <   | j                  j                  |j                         |       y r   )r   filenor   watchfd)r   fileflagss      r   	watchFilezForm.watchFilev  s.    &*T[[]#u-r   r   )r    r!   r"   r#   r   r   r   r   r   rl   r   r   r$   r   r   r   r   ;  s/    +
.! .r   r   c                   *    e Zd ZdZd Z	 	 	 ddZd Zy)Griday  Grid 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                 :    | j                   j                  ||      S r   )gplacer   xys      r   r   z
Grid.place  s    vv||Aq!!r   c                    | j                   j                  |       d}|rt        j                  }n|rt        j                  }|r|t        j
                  z  }n|r|t        j                  z  }d}|	rt        j                  }|
r|t        j                  z  }d|j                  v r*| j                  j                  |||j                  |||      S | j                  j                  |||j                  ||      S )Nr   r   )r   r   r(   ANCHOR_LEFTANCHOR_RIGHT
ANCHOR_TOPANCHOR_BOTTOM
GRID_GROWX
GRID_GROWYr   r   setfieldr   )r   r   colrowpadding
anchorLeft	anchorTopanchorRightanchorBottomgrowxgrowyanchorFlags	gridFlagss                r   setFieldzGrid.setField  s     	% ,,K --K%(9(99K%(<(<<K	))I!F$5$55I$--66??3TVVWk " " 66??3TVVWkJJr   c                 @    t        j                  | | _        g | _        y r   )r(   gridr   r   )r   argss     r   r   zGrid.__init__  s    d#r   N)r   r   r   r   r   r   r   r   r   r   )r    r!   r"   r#   r   r  r   r$   r   r   r   r   z  s"    
" 2>67./K6r   r   ROOTBORDERWINDOWSHADOWTITLEBUTTON	ACTBUTTONCHECKBOXACTCHECKBOXENTRYLABELLISTBOX
ACTLISTBOXTEXTBOX
ACTTEXTBOXHELPLINEROOTTEXT)
EMPTYSCALE	FULLSCALEDISENTRYCOMPACTBUTTONACTSELLISTBOX
SELLISTBOXc                   v    e Zd ZdZd Zd Zd Zd Zd Zd Z	dd	Z
d
 Zd Zd Zd Zd ZddZddZd Zd Zy)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)
    c                     t        j                          t        j                         \  | _        | _        | j                  d        y r   )r(   initsizerv   rs   pushHelpLiner   s    r   r   zSnackScreen.__init__  s-    $*KKM!T[$r   c                 *    t        j                         S r   )r(   finishr   s    r   r0  zSnackScreen.finish  s    }}r   c                 ,    t        j                          y r   )r(   resumer   s    r   r2  zSnackScreen.resume  s    r   c                 ,    t        j                          y r   )r(   suspendr   s    r   r4  zSnackScreen.suspend  s    r   c                 (    | j                  | |       y r   )helpCb)r   args     r   doHelpCallbackzSnackScreen.doHelpCallback  s    D#r   c                 N    || _         t        j                  | j                        S r   )r6  r(   helpcallbackr8  )r   cbs     r   helpCallbackzSnackScreen.helpCallback  s     ""4#6#677r   Nc                 \    |rt        j                  ||      S t        j                  |      S r   )r(   suspendcallback)r   r;  r   s      r   suspendCallbackzSnackScreen.suspendCallback  s)    ))"d33%%b))r   c                 4    t        j                  |||||      S r   )r(   
openwindow)r   lefttoprv   rs   titles         r   
openWindowzSnackScreen.openWindow  s      sE65AAr   c                 Z    |st        j                  d      S t        j                  |      S )Nz	*default*)r(   pushhelpliner*   s     r   r.  zSnackScreen.pushHelpLine  s'    &&{33&&t,,r   c                 *    t        j                         S r   )r(   pophelpliner   s    r   popHelpLinezSnackScreen.popHelpLine  s    !!##r   c                 0    t        j                  |||      S r   )r(   drawroottext)r   rB  rC  r+   s       r   drawRootTextzSnackScreen.drawRootText  s    ""4d33r   c                 0    t        j                  |||      S r   )r(   centeredwindow)r   rv   rs   rD  s       r   centeredWindowzSnackScreen.centeredWindow  s    $$UFE::r   c                     |r$|r"t        j                  |j                  |||      S t        j                  |j                  |      S r   )r(   gridwrappedwindowr   )r   r  rD  r   r   s        r   gridWrappedWindowzSnackScreen.gridWrappedWindow   s9    ++DFFE1a@@''66r   c                 V    |rt        j                         S t        j                         S r   )r(   	popwindowpopwindownorefresh)r   refreshs     r   	popWindowzSnackScreen.popWindow  s#    ##%%((**r   c                 *    t        j                         S r   )r(   rW  r   s    r   rW  zSnackScreen.refresh  s    ~~r   c                 |    |t         v rt        j                  t         |   ||      S t        j                  |||      S r   )	colorsetsr(   setcolor)r   r   fgbgs       r   setColorzSnackScreen.setColor  s7    y ??9X#6B?? //(B33r   r   NN)T)r    r!   r"   r#   r   r0  r2  r4  r8  r<  r?  rE  r.  rJ  rM  rP  rS  rX  rW  r_  r$   r   r   r*  r*    sX    & 
8*
B-$4;7+
 4r   r*  c                 2    t        j                  | |||      S )zR returns a tuple of the wrapped text, the actual width, and the actual height
    )r(   r   )r+   rv   r   r   s       r   r   r     s     ==uh77r   c                   $    e Zd ZdZd ZddZd Zy)
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 | _        y r   )prev
buttonlistr   s    r   r   zRadioGroup.__init__%  s    	r   Nc                     | j                   s|d k(  rd}t        || j                   |      }|| _         | j                  j                  ||f       |S Nr   )re  rH   rf  r   )r   rD  r6   defaultbs        r   r   zRadioGroup.add)  sJ    yyW_ GeTYY8	5z*r   c                 T    | j                   D ]  \  }}|j                         s|c S  y r   )rf  r9   )r   rj  r6   s      r   ri   zRadioGroup.getSelection3  s)    // 	*JQzz|E\	*r   r   )r    r!   r"   r#   r   r   ri   r$   r   r   rc  rc    s    r   rc  c                       e Zd ZdZd Zd Zy)RadioBarz Bar of Radio buttons, based on Grid.

    methods:

    - RadioBar(self, screen, buttonlist) : constructor.
    - getSelection(self): return value of selected button 
    c                 n   g | _         d| _        t               | _        t        j                  | dt        |             |D ]s  \  }}}| j                  j                  |||      }| j                   j                  ||f       | j                  |d| j                  d       | j                  dz   | _        u y )Nr   r   r  )
rh   rV   rc  rN   r   r   lenr   r   r  )r   screenrf  rD  r6   ri  rj  s          r   r   zRadioBar.__init__B  s    		\
dAs:/'1 	&#UE7

ueW5AIIaZ(MM!Q		M:		ADI		&r   c                 6    | j                   j                         S r   )rN   ri   r   s    r   ri   zRadioBar.getSelectionM  s    zz&&((r   N)r    r!   r"   r#   r   ri   r$   r   r   rm  rm  9  s    	&)r   rm  c                       e Zd ZdZddZd Zy)	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.
    c                    g | _         i | _        d| _        t        j	                  | t        |      d       |D ]  }t        |t        j                  dk\  rt        nt              r|}|j                         }n)t        |      dk(  r|\  }}n|\  }}}|| j                  |<   |rt        |      }nt        |      }| j                   j                  ||f       | j                  || j                  dd       | j                  dz   | _         y )Nr   r   3   )r   r   r   r   )rh   r   rV   r   r   rp  
isinstancesysversionstr
basestringlowerr.   r&   r   r  )	r   rq  rf  compactblistrD  r6   hotkeyrj  s	            r   r   zButtonBar.__init__\  s    		dC
OQ/ 	&E%s(:
KUq!&).&v',V$!%(5MIIaZ(MM!TYY<8		ADI!	&r   c                 x    || j                   v r| j                   |   S | j                  D ]  \  }}||k(  s|c S  y r   )r   rh   )r   resultr)   r6   s       r   buttonPressedzButtonBar.buttonPresseds  sF    T\\!<<''#yy 	OVU	 r   NrF   )r    r!   r"   r#   r   r  r$   r   r   rt  rt  S  s    &.r   rt  c                   Z    e Zd ZdZd Z	 	 	 ddZddZd Zd ZddZ	dd	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|d d t        j                  t        |        y r8   )
rq  rD  r   r   	childListform_createdrh   r   r   tuple)r   rq  rD  helpr  s        r   r   zGridFormHelp.__init__  sP    
J	Dz6RauT{#r   c                 n    | j                  |||||||||	|

       | j                  j                  |       y r   )r  r  r   )r   r   r  r  r  r  r  r  r  r	  r
  s              r   r   zGridFormHelp.add  s:     	fc3lU	$ 	f%r   Nc                 ^    | j                  ||      }| j                  j                          |S r   )r   rq  rX  )r   r   r   r  s       r   runOncezGridFormHelp.runOnce  s&    !Qr   c                 :    | j                   j                  |       y r   )r   r   r   s     r   r   zGridFormHelp.addHotKey  s    		G$r   c                 :    | j                   j                  |       y r   )r   r   r   s     r   r   zGridFormHelp.setTimer  s    		7#r   c                     | j                   sn| j                  dd       | j                  D ]  }| j                  j	                  |        | j
                  j                  | | j                  ||       d| _         y y rh  )r  r   r  r   r   rq  rS  rD  )r   r   r   childs       r   createzGridFormHelp.create  sd      JJqO %		e$%KK))$

AqA !D !r   c                 Z    | j                  ||       | j                  j                         S r   )r  r   r   r   s      r   r   zGridFormHelp.run  s     Aqyy}}r   c                 V    | j                          | j                  j                         S r   )r  r   r   r   s    r   r   zGridFormHelp.draw  s    yy~~r   c                     | j                          | j                  j                  | | j                         | j                  j                         }| j                  j                          |S r   )r  rq  rS  rD  r   r   rX  )r   r  s     r   runPopupzGridFormHelp.runPopup  sG    %%dDJJ7r   c                 :    | j                   j                  |       y r   )r   rl   r   s     r   rl   zGridFormHelp.setCurrent  s    		b!r   r  r`  )r    r!   r"   r#   r   r   r  r   r   r  r   r   r  rl   r$   r   r   r  r  }  sD    "$ /;9:12&
%$" "r   r  c                       e Zd ZdZd Zy)GridFormzh GridForm class (extends GridFormHelp):

    methods:

     - GridForm(self, screen, title, *args):
    c                 :    | ||d f|z   }t        j                  |  y r   )r  r   )r   rq  rD  r  myargss        r   r   zGridForm.__init__  s#    t,t3v&r   Nr,   r$   r   r   r  r    s    'r   r  c                   N    e Zd ZdZddZddZd ZddZd Zd Z	d	 Z
dd
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                  |t        d   f||       y )Nr   )addItem	snackArgs)r   r+   rV   r9   s       r   r   zCheckboxTree.append  s    TIh/2D(Cr   c                     ||}| j                   j                  |||      }|| j                  |<   || j                  |<   y r   )r   checkboxtreeAddItemrS   rT   )r   r+   pathrV   r9   rJ   s         r   r  zCheckboxTree.addItem  s@    <Dff((tX>!c!dr   c                 T    | j                   j                         }| j                  |   S r   )r   checkboxtreeGetCurrentrS   )r   currs     r   
getCurrentzCheckboxTree.getCurrent  s#    vv,,.}}T""r   c                     t        j                  ||||      | _        i | _        i | _        |r| j                  j                  |       y y r   )r(   checkboxtreer   rS   rT   checkboxtreeSetWidth)r   rs   rt   rv   hide_checkboxunselectables         r   r   zCheckboxTree.__init__  sB    $$VV]LQFF''. r   c                     g }| j                   j                         }|D ]   }|j                  | j                  |          " |S r   )r   checkboxtreeGetSelectionr   rS   rf   s       r   ri   zCheckboxTree.getSelection  sE    	vv..0 	1CT]]3/0	1r   c                 V    | j                   j                  | j                  |   |       y r   )r   checkboxtreeSetEntryrT   )r   rV   r+   s      r   setEntryzCheckboxTree.setEntry  s    ##DMM$$7>r   c                 T    | j                   j                  | j                  |          y r   )r   checkboxtreeSetCurrentrT   r]   s     r   rl   zCheckboxTree.setCurrent   s    %%dmmD&9:r   c                 V    | j                   j                  | j                  |   |       y r   )r   checkboxtreeSetEntryValuerT   )r   rV   r9   s      r   setEntryValuezCheckboxTree.setEntryValue  s    ((t)<hGr   c                 R    | j                   j                  | j                  |         S r   )r   checkboxtreeGetEntryValuerT   r]   s     r   getEntryValuezCheckboxTree.getEntryValue  s     vv//d0CDDr   r8   )r   Nr   r   r   )r    r!   r"   r#   r   r  r  r   ri   r  rl   r  r  r$   r   r   r  r    s7    D"#/?;HEr   r  (   c
                 *   |dk(  rt        |      }t        | |      }
t        ||      }t        ||d      }d}|D ]D  }t	        |      t
        k(  r|\  }}n|}|}||k(  r|}n||k(  r|}|j                  ||       |dz   }F |dk7  r|j                  |       t        | ||	dd      }|j                  |dd       |j                  |ddd       |j                  |
dd	d
       |j                         }|
j                  |      |j                         fS )z
    - ListboxChoiceWindow(screen, title, text, items, 
            buttons = ('Ok', 'Cancel'), 
            width = 40, scroll = 0, height = -1, default = None,
            help = None):
    r   r   )rt   ru   r   N   )r   r   r   r   r  rw  r	  )rp  rt  r   rP   typer  r   rl   r  r   r  r  rc   )rq  rD  r+   itemsbuttonsrv   rt   rs   ri  r  bbtlcountrV   rJ   r   rcs                     r   ListboxChoiceWindowr  	  s!    	"E
v	67	#Bt$Aa8AE :KT3DCuGoG	s	 	4	gVUD!Q/AEE!QNEE!Q\E*EE"aAE	
BR !))+..r   OkCancelc                    t        | |      }t        ||| j                  dz
        }	t        | ||dd      }
|
j	                  |	ddd       |
j	                  |ddd       |j                  |
j                  ||            S )	z
     - ButtonChoiceWindow(screen, title, text, 
               buttons = [ 'Ok', 'Cancel' ], 
               width = 40, x = None, y = None, help = None):
       )r   r   rw  r   r   r   r   r   r  r  )rt  r   rs   r  r   r  r  )rq  rD  r+   r  rv   r   r   r  r  r  r   s              r   ButtonChoiceWindowr  4  s|     
67	#Bt1CDAVUD!Q/AEE!Q\E*EE"aAEAIIaO,,r   r      c	                    t        | |      }	t        ||      }
d}|D ]  }|dz   }	 t        d|      }d}g }|D ]  }t        |      t        k(  r;|\  }}t        |t        j                  dk\  rt        nt              rt        ||      }nt        |      }|j                  t        |      d|dd       |j                  |d|d       |dz   }|j                  |        t        | ||dd      }|j                  |
ddd	
       |j                  |ddd	
       |j                  |	ddd       |j!                         }g }d}|D ])  }|j                  ||   j#                                |dz   }+ |	j%                  |      t	        |      fS )z
    EntryWindow(screen, title, text, prompts, allowCancel = 1, width = 40,
        entryWidth = 20, buttons = [ 'Ok', 'Cancel' ], help = None):
    r   r   rw  rv  )r   r   r   r   )r  r  ro  r  r  r  r  )rt  r   r   r  r  rx  ry  rz  r{  r|  r   r  r   r   r  r   r  r6   r  )rq  rD  r+   promptsallowCancelrv   
entryWidthr  r  r  r  r  nsg	entryLister   r  entryValuess                      r   EntryWindowr  D  s    
67	#Bt$AE 	 
aBEI 7eFQ!CKK3$6SJG*a(j!A
E!Ha,QO
Aq%a0	 	VUD!Q/AEE!Q\E*EE"alE+EE"aAEYY[FKE 9U+1134	 V$eK&899r   c                   X    e Zd ZdZ	 	 	 	 ddZddZddZddZd ZddZ	d	 Z
d
 Zd Zy)CListboxap  Clistbox 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
    Nc                    || _         |d d  | _        || _        || _        |	d k7  r]t        j                  | dd       d}| j                  |	|
|      }t        |      | _        | j                  | j                  ddd       nt        j                  | dd       d}t        ||||      | _        | j                  | j                  d|d       y )Nr   rw  )adjust_widthr   ro  )r  )cols
col_widthscol_padcol_text_alignr   r   colFormTextr   r   r  rP   rq   )r   rs   r  r  rt   ru   rv   r  r  
col_labelscol_label_alignr  box_ylstrs                 r   r   zCListbox.__init__  s    
 	$Q-,MM$1%E##J=I $ KDtDJMM$**aqM9 MM$1%E vvz5AdllAu!<r   c                 d   d}d}t        |      }|| j                  k  r||k  r
||   }t        j                  |      }| j                  |   |k  r$|r|| j                  |<   n|d | j                  |    }| j                  |   t        j                  |      z
  }	|	dkD  rS|d k(  rt
        }
n||   }
|
t
        k(  r|d|	z  z   }|
t        k(  rd|	dz  z  |z   d|	dz   dz  z  z   }|
t        k(  rd|	z  |z   }||dz
  k7  rd| j                  z  }nd}||z   |z   }|dz   }|| j                  k  r||k  r
|S )Nr   r   r   rw  r   )	rp  r  r(   wstrlenr  LEFTCENTERRIGHTr  )r   col_textalignr  ir{  c_lencstrcstrlendeltaapstrs               r   r  zCListbox.colFormText  sW   H499}1u9A;DnnT*Gq!G+)0DOOA& 3!34DOOA&)==EqyD=AaA93;/D;519-5a02D:%K4/DEAI~dll**t#CAAC 499}1u9F 
r   c                     |d k(  r| j                   }| j                  ||      }| j                  j                  ||       y r   )r  r  rq   r   r   r  rV   r  r+   s        r   r   zCListbox.append  s;    T!!00N.9D$'r   c                     |d k(  r| j                   }| j                  ||      }| j                  j                  |||       y r   )r  r  rq   rZ   )r   r  rV   rY   r  r+   s         r   rZ   zCListbox.insert  s=    T!!00N.9D$/r   c                 :    | j                   j                  |       y r   )rq   r^   r]   s     r   r^   zCListbox.delete  s    D!r   c                     |d k(  r| j                   }| j                  ||      }| j                  j                  ||       y r   )r  r  rq   r`   r  s        r   r`   zCListbox.replace  s;    T!!00N.9T4(r   c                 6    | j                   j                         S r   )rq   rc   r   s    r   rc   zCListbox.current  s    ||##%%r   c                 :    | j                   j                  |       y r   )rq   rl   r]   s     r   rl   zCListbox.setCurrent  s    %r   c                 8    | j                   j                          y r   )rq   ro   r   s    r   ro   zCListbox.clear  s    r   )r   r   r   r   NNNr   r8   r   )r    r!   r"   r#   r   r  r   rZ   r^   r`   rc   rl   ro   r$   r   r   r  r  r  sC      ;<675967=6'R(0")&&r   r  c                     d| z   S )N   r$   )r   s    r   customColorsetr    s    6Mr   )r   r   ))r  r  r  r   r   NN)cr#   
__future__r   r   r   r(   stringry  r   r   r   r	   r
   r   r   r  DOWNr  UPr  r  r   r&   r.   r2   rH   rP   r{   r   r   r   r   KEY_F1KEY_F2KEY_F3KEY_F4KEY_F5KEY_F6KEY_F7KEY_F8KEY_F9KEY_F10KEY_F11KEY_F12KEY_ESC	KEY_ENTERKEY_SUSPENDKEY_BACKSPACE
KEY_DELETE
KEY_INSERT
KEY_RESIZEordr   rh   r   r  ascii_lettersdigitsocr   r   COLORSET_ROOTCOLORSET_BORDERCOLORSET_WINDOWCOLORSET_SHADOWCOLORSET_TITLECOLORSET_BUTTONCOLORSET_ACTBUTTONCOLORSET_CHECKBOXCOLORSET_ACTCHECKBOXCOLORSET_ENTRYCOLORSET_LABELCOLORSET_LISTBOXCOLORSET_ACTLISTBOXCOLORSET_TEXTBOXCOLORSET_ACTTEXTBOXCOLORSET_HELPLINECOLORSET_ROOTTEXTCOLORSET_EMPTYSCALECOLORSET_FULLSCALECOLORSET_DISENTRYCOLORSET_COMPACTBUTTONCOLORSET_ACTSELLISTBOXCOLORSET_SELLISTBOXr[  r*  r   rc  rm  rt  r  r  r  r  r  r  r  r  )r  s   0r   <module>r2     s  !H I H   
 d d d	bM	" "&%V %,F ,-v -:: :$?*f ?*BCf C(>g >(F ($,F ,QF Q:D6== $ v}} 6=="&8<v}}6=="&8<v}} FNN %*FNN FNN	 %*FNN	
 V%%
 (163E3E -- 089J9J ''63D3Ds8 
glln	 AGGAJ!'!5!5fmm!CEAc!fQZE CAaGAJGAJ=. =.~, ,\:fv++ ://://: //: --	:
 //: F55: 633: f99: --: --: &11: V77: &11: V77: 633:  633!:" $77"55!33 & = = & = =#77-:	0S4 S4j8 :)t )4' 'TG"4 G"R	'| 	'6E6 6Er ';?)/X  +td-  =>rT8#5d,:\qt qf] Fs   .O