U
    K^y                     @   s  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 dZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG d d! d!eZej ej!ej"ej#ej$ej%ej&ej'ej(ej)ej*ej+ej,ej-ej.ej/ej0ej1ej2e3d"d#Z4e5e46 D ]Z7e7e4e4e7 < qd$d% ej8ej9 D D ]\Z:Z;e:e4e;< e;e4e:< qG d&d' d'Z<G d(d) d)Z=ej>ej?ej@ejAejBejCejDejEejFejGejHejIejJejKejLejMejNejOejPejQejRejSejTd*ZUG d+d, d,ZVdLd.d/ZWG d0d1 d1eZXG d2d3 d3e=ZYG d4d5 d5e=ZZG d6d7 d7e=Z[G d8d9 d9e[Z\G d:d; d;eZ]dMd>d?Z^d@dAgd=dddfdBdCZ_dDd=dEd@dAgdfdFdGZ`G dHdI dIe=ZadJdK ZbdS )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_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                   @   s"   e Zd ZdZdddZdd ZdS )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                 C   s$   |r| j || n| j | d S N)wsetCallback)selfobjdata r   '/usr/lib/python3/dist-packages/snack.pyr   D   s    zWidget.setCallbackc                 C   s   t d S r   )NotImplementedErrorr   r   r   r   __init__J   s    zWidget.__init__)N)__name__
__module____qualname____doc__r   r   r   r   r   r   r   :   s   	
r   c                   @   s   e Zd ZdZdd ZdS )ButtonzqBasic button class, takes button text as parameter

    method:

     - Button(self, text): returns a button
    c                 C   s   t || _d S r   )_snackbuttonr   r   textr   r   r   r   T   s    zButton.__init__Nr   r   r   r   r   r   r   r   r   r   M   s   r   c                   @   s   e Zd ZdZdd ZdS )CompactButtonzCompact Button class (less frilly button decoration).

    methods:

     - CompactButton(self,text) : create button, with text.
    c                 C   s   t || _d S r   )r    Zcompactbuttonr   r"   r   r   r   r   ^   s    zCompactButton.__init__Nr$   r   r   r   r   r%   W   s   r%   c                   @   s:   e Zd ZdZdd Zdd Zdd Zdd	 ZdddZdS )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                 C   s   | j jS r   r   ZcheckboxValuer   r   r   r   valuen   s    zCheckbox.valuec                 C   s   | j jdkS Nr   r'   r   r   r   r   selectedq   s    zCheckbox.selectedc                 C   s   | j ||S r   )r   ZcheckboxSetFlagsr   flagZsenser   r   r   setFlagst   s    zCheckbox.setFlagsc                 C   s   | j |S r   )r   ZcheckboxSetValue)r   r(   r   r   r   setValuex   s    zCheckbox.setValuer   c                 C   s   t ||| _d S r   )r    Zcheckboxr   )r   r#   isOnr   r   r   r   {   s    zCheckbox.__init__N)r   )	r   r   r   r   r(   r*   r-   r.   r   r   r   r   r   r&   a   s   r&   c                   @   s"   e Zd ZdZdd ZdddZdS )	SingleRadioButtonzSingle Radio Button.

    methods:
    
     -  SingleRadioButton(text, group, isOn = 0)  : create button
     -  selected(self)                            : returns bool, whether or not is selected.
    c                 C   s   | j j| j jkS r   )r   keyZ
radioValuer   r   r   r   r*      s    zSingleRadioButton.selectedr   c                 C   s,   |rt ||j|| _nt |d || _d S r   )r    Zradiobuttonr   )r   r#   groupr/   r   r   r   r      s    zSingleRadioButton.__init__N)r   )r   r   r   r   r*   r   r   r   r   r   r0   ~   s   r0   c                   @   sZ   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd ZdddZdS )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                 C   s$   | j |}|| j|< || j|< d S r   )r   ZlistboxAddItemkey2itemitem2keyr   r#   itemr1   r   r   r   r      s    
zListbox.appendc                 C   s@   |s| j |d}n| j || j| }|| j|< || j|< d S r)   )r   listboxInsertItemr5   r4   )r   r#   r7   beforer1   r   r   r   insert   s
    
zListbox.insertc                 C   s,   | j | j|  | j| j| = | j|= d S r   )r   listboxDeleteItemr5   r4   r   r7   r   r   r   delete   s    zListbox.deletec                 C   sL   | j || j| }| j | j|  | j| j| = || j|< || j|< d S r   )r   r8   r5   r;   r4   r6   r   r   r   replace   s
    
zListbox.replacec                 C   s   | j | j  S r   )r4   r   ZlistboxGetCurrentr   r   r   r   current   s    zListbox.currentc                 C   s,   g }| j  }|D ]}|| j|  q|S r   )r   ZlistboxGetSelectionr   r4   r   Z	selectionlistr1   r   r   r   getSelection   s
    
zListbox.getSelectionc                 C   s   | j | j|  d S r   )r   ZlistboxSetCurrentr5   r<   r   r   r   
setCurrent   s    zListbox.setCurrentc                 C   s   i | _ i | _| j  d S r   )r4   r5   r   ZlistboxClearr   r   r   r   clear   s    zListbox.clearr   c                 C   s6   t ||||||| _i | _i | _|r2| j| d S r   )r    listboxr   r4   r5   ZlistboxSetWidth)r   heightscroll
returnExitwidthZ
showCursorZmultipleZborderr   r   r   r      s
    zListbox.__init__N)r   r   r   r   r   r   )r   r   r   r   r   r:   r=   r>   r?   rB   rC   rD   r   r   r   r   r   r3      s   r3   c                   @   s*   e Zd ZdZdd Zdd Zd
ddZd	S )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                 C   s   | j | d S r   )r   ZtextboxTextr"   r   r   r   setText   s    zTextbox.setTextc                 C   s   | j | d S r   )r   ZtextboxHeight)r   rF   r   r   r   	setHeight   s    zTextbox.setHeightr   c                 C   s   t |||||| _d S r   )r    Ztextboxr   )r   rI   rF   r#   rG   Zwrapr   r   r   r      s    zTextbox.__init__N)r   r   )r   r   r   r   rK   rL   r   r   r   r   r   rJ      s   
rJ   c                   @   s   e Zd ZdddZdS )TextboxReflowed   
   r   c                 C   sN   t ||||\}}}|dkr8||kr8t| |||d nt| |||d d S )Nr   r   r   )reflowrJ   r   )r   rI   r#   flexDownflexUp	maxHeightZnewtextrF   r   r   r   r      s    zTextboxReflowed.__init__N)rN   rO   r   )r   r   r   r   r   r   r   r   rM      s   rM   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	LabelzA Label (simple text).

    methods:

     - Label(self,text)   : create label
     - setText(self,text) : change text.
     - setColors(self, colorset) : change individual colors
    c                 C   s   | j | d S r   )r   Z	labelTextr"   r   r   r   rK      s    zLabel.setTextc                 C   s   t || _d S r   )r    labelr   r"   r   r   r   r      s    zLabel.__init__c                 C   s   | j | d S r   )r   ZlabelSetColors)r   colorsetr   r   r   	setColors   s    zLabel.setColorsN)r   r   r   r   rK   r   rW   r   r   r   r   rT      s   rT   c                   @   s    e Zd ZdZdd Zdd ZdS )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                 C   s   | j | d S r   )r   ZscaleSet)r   Zamountr   r   r   set  s    z	Scale.setc                 C   s   t ||| _d S r   )r    Zscaler   )r   rI   Ztotalr   r   r   r     s    zScale.__init__N)r   r   r   r   rY   r   r   r   r   r   rX      s   rX   c                   @   s4   e Zd ZdZdd ZdddZdd ZdddZdS )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                 C   s   | j jS r   )r   Z
entryValuer   r   r   r   r(     s    zEntry.valuer   c                 C   s   | j ||S r   )r   ZentrySetValue)r   r#   ZcursorAtEndr   r   r   rY     s    z	Entry.setc                 C   s   | j ||S r   )r   ZentrySetFlagsr+   r   r   r   r-   "  s    zEntry.setFlags r   c                 C   s   t ||||||| _d S r   )r    entryr   )r   rI   r#   ZhiddenZpasswordrG   rH   r   r   r   r   %  s    zEntry.__init__N)r   )r[   r   r   r   r   )r   r   r   r   r(   rY   r-   r   r   r   r   r   rZ     s   
  rZ    )ZF1ZF2ZF3ZF4ZF5ZF6ZF7ZF8ZF9ZF10ZF11ZF12ZESCZENTERZSUSPENDZ	BACKSPACEZDELETEZINSERTZRESIZEr]   c                 C   s   g | ]}t ||fqS r   )ord).0cr   r   r   
<listcomp>7  s     ra   c                   @   sR   e Zd ZdZdd Zdd Zdd Zdd	 ZdddZdd Z	dd Z
dd Z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
    c                 C   s   | j t|  d S r   )r   Z	addhotkeyhotkeysr   Zkeynamer   r   r   	addHotKeyI  s    zForm.addHotKeyc                 C   sp   d|j kr$|j D ]}| | qd|j krF|jD ]}| | q4n&d|j krl|| j|jj< | j|jS d S )Nrc   gridmembersr   )	__dict__rc   keysre   rf   addtransr   r1   )r   widgetr1   r   r   r   r   ri   L  s    



zForm.addc                 C   sb   | j  \}}|tjkr"| j| S |tjkr0dS |tjkrD| j| S |tjkrVt	| S t
dd S )NZTIMERzEOF or IO error)r   runr    ZFORM_EXIT_WIDGETrj   ZFORM_EXIT_TIMERZFORM_EXIT_FDREADYfilemapZFORM_EXIT_HOTKEYrc   RuntimeError)r   whatZwhichr   r   r   rl   Y  s    





zForm.runc                 C   s   | j   d S r   )r   drawr   r   r   r   rp   e  s    
z	Form.drawNc                 C   s"   i | _ i | _t|| _|| _d S r   )rj   rm   r    formr   helpArg)r   rr   r   r   r   r   i  s    zForm.__init__c                 C   s   | j |j  d S r   )r   Z
setcurrentr   cor   r   r   rC   p  s    zForm.setCurrentc                 C   s   | j | d S r   )r   Zsettimer)r   Ztimerr   r   r   setTimers  s    zForm.setTimerc                 C   s$   || j | < | j| | d S r   )rm   filenor   Zwatchfd)r   fileflagsr   r   r   	watchFilev  s    zForm.watchFile)N)r   r   r   r   re   ri   rl   rp   r   rC   ru   ry   r   r   r   r   rb   ;  s   
rb   c                   @   s*   e Zd ZdZdd ZdddZdd	 Zd
S )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                 C   s   | j ||S r   )gplacer   xyr   r   r   r|     s    z
Grid.placer   r   r   r   r   c                 C   s   | j | d}|rtj}n
|r&tj}|r6|tjB }n|rD|tjB }d}|	rRtj}|
r`|tjB }d|j	kr| j
|||j
|||S | j
|||j||S d S )Nr   r{   )rf   r   r    ZANCHOR_LEFTZANCHOR_RIGHTZ
ANCHOR_TOPZANCHOR_BOTTOMZ
GRID_GROWXZ
GRID_GROWYrg   r{   Zsetfieldr   )r   ro   colrowpadding
anchorLeft	anchorTopanchorRightanchorBottomgrowxgrowyZanchorFlagsZ	gridFlagsr   r   r   setField  s(    


zGrid.setFieldc                 G   s   t j| | _g | _d S r   )r    gridr{   rf   )r   argsr   r   r   r     s    zGrid.__init__N)r   r   r   r   r   r   r   )r   r   r   r   r|   r   r   r   r   r   r   rz   z  s              
rz   )ZROOTZBORDERZWINDOWZSHADOWZTITLEZBUTTONZ	ACTBUTTONZCHECKBOXZACTCHECKBOXZENTRYZLABELZLISTBOXZ
ACTLISTBOXZTEXTBOXZ
ACTTEXTBOXZHELPLINEZROOTTEXTZ
EMPTYSCALEZ	FULLSCALEZDISENTRYZCOMPACTBUTTONZACTSELLISTBOXZ
SELLISTBOXc                   @   s   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	d$ddZ
dd Zdd Zdd Zdd Zdd Zd%ddZd&ddZd d! Zd"d# ZdS )'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                 C   s&   t   t  \| _| _| d  d S r   )r    ZinitsizerI   rF   pushHelpLiner   r   r   r   r     s    zSnackScreen.__init__c                 C   s   t  S r   )r    finishr   r   r   r   r     s    zSnackScreen.finishc                 C   s   t   d S r   )r    resumer   r   r   r   r     s    zSnackScreen.resumec                 C   s   t   d S r   )r    suspendr   r   r   r   r     s    zSnackScreen.suspendc                 C   s   |  | | d S r   )helpCb)r   argr   r   r   doHelpCallback  s    zSnackScreen.doHelpCallbackc                 C   s   || _ t| jS r   )r   r    Zhelpcallbackr   )r   cbr   r   r   helpCallback  s    zSnackScreen.helpCallbackNc                 C   s   |rt ||S t |S r   )r    Zsuspendcallback)r   r   r   r   r   r   suspendCallback  s    zSnackScreen.suspendCallbackc                 C   s   t |||||S r   )r    Z
openwindow)r   lefttoprI   rF   titler   r   r   
openWindow  s    zSnackScreen.openWindowc                 C   s   |st dS t |S d S )Nz	*default*)r    Zpushhelpliner"   r   r   r   r     s    
zSnackScreen.pushHelpLinec                 C   s   t  S r   )r    Zpophelpliner   r   r   r   popHelpLine  s    zSnackScreen.popHelpLinec                 C   s   t |||S r   )r    Zdrawroottext)r   r   r   r#   r   r   r   drawRootText  s    zSnackScreen.drawRootTextc                 C   s   t |||S r   )r    Zcenteredwindow)r   rI   rF   r   r   r   r   centeredWindow  s    zSnackScreen.centeredWindowc                 C   s(   |r|rt |j|||S t |j|S r   )r    Zgridwrappedwindowr{   )r   r   r   r~   r   r   r   r   gridWrappedWindow   s    zSnackScreen.gridWrappedWindowTc                 C   s   |rt  S t  S r   )r    Z	popwindowZpopwindownorefresh)r   refreshr   r   r   	popWindow  s    zSnackScreen.popWindowc                 C   s   t  S r   )r    r   r   r   r   r   r     s    zSnackScreen.refreshc                 C   s,   |t krtt | ||S t|||S d S r   )	colorsetsr    Zsetcolor)r   rV   ZfgZbgr   r   r   setColor  s    zSnackScreen.setColor)N)NN)T)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s"   


r   rN   c                 C   s   t | |||S )zR returns a tuple of the wrapped text, the actual width, and the actual height
    )r    rP   )r#   rI   rQ   rR   r   r   r   rP     s    rP   c                   @   s*   e Zd ZdZdd Zd	ddZdd ZdS )

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                 C   s   d | _ g | _d S r   )prev
buttonlistr   r   r   r   r   %  s    zRadioGroup.__init__Nc                 C   s:   | j s|d krd}t|| j |}|| _ | j||f |S Nr   )r   r0   r   r   )r   r   r(   defaultbr   r   r   ri   )  s    zRadioGroup.addc                 C   s$   | j D ]\}}| r|  S qd S r   )r   r*   )r   r   r(   r   r   r   rB   3  s     
zRadioGroup.getSelection)N)r   r   r   r   r   ri   rB   r   r   r   r   r     s   

r   c                   @   s    e Zd ZdZdd Zdd ZdS )RadioBarz Bar of Radio buttons, based on Grid.

    methods:

    - RadioBar(self, screen, buttonlist) : constructor.
    - getSelection(self): return value of selected button 
    c                 C   sz   g | _ d| _t | _t| dt| |D ]J\}}}| j|||}| j ||f | j	|d| jdd | jd | _q*d S )Nr   r   r   )
rA   r7   r   r2   rz   r   lenri   r   r   )r   screenr   r   r(   r   r   r   r   r   r   B  s    zRadioBar.__init__c                 C   s
   | j  S r   )r2   rB   r   r   r   r   rB   M  s    zRadioBar.getSelectionN)r   r   r   r   r   rB   r   r   r   r   r   9  s   r   c                   @   s"   e Zd ZdZdddZdd ZdS )		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.
    r   c           	      C   s   g | _ i | _d| _t| t|d |D ]}t|tjdkr>t	nt
rR|}| }n*t|dkrh|\}}n|\}}}|| j|< |rt|}nt|}| j ||f | || jdd | jd | _q(d S )Nr   r   3   )r   r   r   r   )rA   rc   r7   rz   r   r   
isinstancesysversionstr
basestringlowerr%   r   r   r   )	r   r   r   ZcompactZblistr   r(   Zhotkeyr   r   r   r   r   \  s$    




zButtonBar.__init__c                 C   s8   || j kr| j | S | jD ]\}}||kr|  S qd S r   )rc   rA   )r   resultr!   r(   r   r   r   buttonPresseds  s    


zButtonBar.buttonPressedN)r   )r   r   r   r   r   r   r   r   r   r   r   S  s   
r   c                   @   sh   e Zd ZdZdd ZdddZdd	d
Zdd Zdd ZdddZ	dddZ
dd Zdd Zdd ZdS )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                 G   sJ   || _ || _t|| _g | _d| _t|}| g|d d< tjt	|  d S r)   )
r   r   rb   rq   	childListform_createdrA   rz   r   tuple)r   r   r   helpr   r   r   r   r     s    
zGridFormHelp.__init__r   r   c                 C   s,   |  |||||||||	|

 | j| d S r   )r   r   r   )r   rk   r   r   r   r   r   r   r   r   r   r   r   r   ri     s       zGridFormHelp.addNc                 C   s   |  ||}| j  |S r   )rl   r   r   )r   r~   r   r   r   r   r   runOnce  s    
zGridFormHelp.runOncec                 C   s   | j | d S r   )rq   re   rd   r   r   r   re     s    zGridFormHelp.addHotKeyc                 C   s   | j | d S r   )rq   ru   rd   r   r   r   ru     s    zGridFormHelp.setTimerc                 C   sH   | j sD| dd | jD ]}| j| q| j| | j|| d| _ d S r   )r   r|   r   rq   ri   r   r   r   )r   r~   r   Zchildr   r   r   create  s    
zGridFormHelp.createc                 C   s   |  || | j S r   )r   rq   rl   r}   r   r   r   rl     s    zGridFormHelp.runc                 C   s   |    | j S r   )r   rq   rp   r   r   r   r   rp     s    zGridFormHelp.drawc                 C   s0   |    | j| | j | j }| j  |S r   )r   r   r   r   rq   rl   r   )r   r   r   r   r   runPopup  s
    

zGridFormHelp.runPopupc                 C   s   | j | d S r   )rq   rC   rs   r   r   r   rC     s    zGridFormHelp.setCurrent)r   r   r   r   r   r   r   )NN)NN)NN)r   r   r   r   r   ri   r   re   ru   r   rl   rp   r   rC   r   r   r   r   r   }  s$   
           



r   c                   @   s   e Zd ZdZdd ZdS )GridFormzh GridForm class (extends GridFormHelp):

    methods:

     - GridForm(self, screen, title, *args):
    c                 G   s   | ||d f| }t j|  d S r   )r   r   )r   r   r   r   Zmyargsr   r   r   r     s    zGridForm.__init__Nr$   r   r   r   r   r     s   r   c                   @   s`   e Zd ZdZdddZdddZdd	 Zdd
dZdd Zdd Z	dd Z
dddZdd ZdS )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):
    Nr   c                 C   s   |  |td f|| d S )Nr   )addItem	snackArgs)r   r#   r7   r*   r   r   r   r     s    zCheckboxTree.appendc                 C   s4   |d kr|}| j |||}|| j|< || j|< d S r   )r   ZcheckboxtreeAddItemr4   r5   )r   r#   pathr7   r*   r1   r   r   r   r     s
    
zCheckboxTree.addItemc                 C   s   | j  }| j| S r   )r   ZcheckboxtreeGetCurrentr4   )r   Zcurrr   r   r   
getCurrent  s    
zCheckboxTree.getCurrentc                 C   s2   t ||||| _i | _i | _|r.| j| d S r   )r    Zcheckboxtreer   r4   r5   ZcheckboxtreeSetWidth)r   rF   rG   rI   Zhide_checkboxZunselectabler   r   r   r     s
    zCheckboxTree.__init__c                 C   s,   g }| j  }|D ]}|| j|  q|S r   )r   ZcheckboxtreeGetSelectionr   r4   r@   r   r   r   rB     s
    
zCheckboxTree.getSelectionc                 C   s   | j | j| | d S r   )r   ZcheckboxtreeSetEntryr5   )r   r7   r#   r   r   r   setEntry  s    zCheckboxTree.setEntryc                 C   s   | j | j|  d S r   )r   ZcheckboxtreeSetCurrentr5   r<   r   r   r   rC      s    zCheckboxTree.setCurrentr   c                 C   s   | j | j| | d S r   )r   ZcheckboxtreeSetEntryValuer5   )r   r7   r*   r   r   r   setEntryValue  s    zCheckboxTree.setEntryValuec                 C   s   | j | j| S r   )r   ZcheckboxtreeGetEntryValuer5   r<   r   r   r   getEntryValue  s    zCheckboxTree.getEntryValue)Nr   )Nr   )r   Nr   r   )r   )r   r   r   r   r   r   r   r   rB   r   rC   r   r   r   r   r   r   r     s   



r   OkCancel(   c
                 C   s   |dkrt |}t| |}
t||}t||dd}d}|D ]P}t|tkrT|\}}n|}|}||krj|}n||krv|}||| |d }q:|dkr|| t| ||	dd}|	|dd |j	|dddd |j	|
dd	dd
 |
 }|
|| fS )z
    - ListboxChoiceWindow(screen, title, text, items, 
            buttons = ('Ok', 'Cancel'), 
            width = 40, scroll = 0, height = -1, default = None,
            help = None):
    r   r   )rG   rH   r   N   )r   r   r   r   r   r   r   )r   r   rM   r3   typer   r   rC   r   ri   r   r   r?   )r   r   r#   itemsbuttonsrI   rG   rF   r   r   bbtlcountr7   r1   r{   Zrcr   r   r   ListboxChoiceWindow	  s2    
 




r   r   r   c                 C   sd   t | |}t||| jd d}	t| ||dd}
|
j|	dddd |
j|dddd ||
||S )	z
     - ButtonChoiceWindow(screen, title, text, 
               buttons = [ 'Ok', 'Cancel' ], 
               width = 40, x = None, y = None, help = None):
       )rS   r   r   r   r   r   r   r   r   r   )r   rM   rF   r   ri   r   r   )r   r   r#   r   rI   r~   r   r   r   r   r{   r   r   r   ButtonChoiceWindow4  s    
r   r      c	                 C   sP  t | |}	t||}
d}|D ]}|d }qtd|}d}g }|D ]}t|tkr||\}}t|tjdkrjtnt	rt
||}nt
|}|jt|d|ddd |j|d|dd |d }|| q@t| ||dd}|j|
ddd	d
 |j|ddd	d
 |j|	dddd | }g }d}|D ] }|||   |d }q|	|t|fS )z
    EntryWindow(screen, title, text, prompts, allowCancel = 1, width = 40,
        entryWidth = 20, buttons = [ 'Ok', 'Cancel' ], help = None):
    r   r   r   r   )r   r   r   r   )r   r   r   r   r   r   r   )r   rM   rz   r   r   r   r   r   r   r   rZ   r   rT   r   r   ri   r   r(   r   )r   r   r#   ZpromptsZallowCancelrI   Z
entryWidthr   r   r   r   r   nZsgZ	entryLister{   r   ZentryValuesr   r   r   EntryWindowD  s:    



r   c                   @   sb   e Zd ZdZdddZdddZdd	d
ZdddZdd ZdddZ	dd Z
dd Zdd ZdS )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
    r   r   Nc                 C   s   || _ |d d  | _|| _|| _|	d krjt| dd d}| j|	|
|d}t|| _| j	| jdddd nt| dd d}t
||||| _| j	| jd|dd d S )Nr   r   )adjust_widthr   r   )r   )cols
col_widthscol_padcol_text_alignrz   r   colFormTextrT   rU   r   r3   rE   )r   rF   r   r   rG   rH   rI   r   r   Z
col_labelsZcol_label_alignr   Zbox_yZlstrr   r   r   r     s     
zCListbox.__init__c                 C   s"  d}d}t |}|| jk r||k r|| }t|}| j| |k rh|rV|| j|< n|d | j|  }| j| t| }	|	dkr|d krt}
n|| }
|
tkr|d|	  }|
tkrd|	d  | d|	d d   }|
tkrd|	 | }||d krd| j }nd}|| | }|d }q|S )Nr   r[   r]   r   r   )	r   r   r    Zwstrlenr   LEFTCENTERRIGHTr   )r   col_textZalignr   ir   Zc_lenZcstrZcstrlenZdeltaaZpstrr   r   r   r     s:    

zCListbox.colFormTextc                 C   s,   |d kr| j }| ||}| j|| d S r   )r   r   rE   r   r   r   r7   r   r#   r   r   r   r     s    zCListbox.appendc                 C   s.   |d kr| j }| ||}| j||| d S r   )r   r   rE   r:   )r   r   r7   r9   r   r#   r   r   r   r:     s    zCListbox.insertc                 C   s   | j | d S r   )rE   r=   r<   r   r   r   r=     s    zCListbox.deletec                 C   s,   |d kr| j }| ||}| j|| d S r   )r   r   rE   r>   r   r   r   r   r>     s    zCListbox.replacec                 C   s
   | j  S r   )rE   r?   r   r   r   r   r?     s    zCListbox.currentc                 C   s   | j | d S r   )rE   rC   r<   r   r   r   rC     s    zCListbox.setCurrentc                 C   s   | j   d S r   )rE   rD   r   r   r   r   rD     s    zCListbox.clear)r   r   r   r   NNNr   )Nr   )N)N)N)r   r   r   r   r   r   r   r:   r=   r>   r?   rC   rD   r   r   r   r   r   r  s$               

)


r   c                 C   s   d|  S )N   r   )r~   r   r   r   customColorset  s    r   )rN   rN   )r   r   r   r   NN)cr   Z
__future__r   r   r   r    stringr   r   r   r   r   r	   r
   r   r   ZDOWNr   ZUPr   r   r   r   r%   r&   r0   r3   rJ   rM   rT   rX   rZ   ZKEY_F1ZKEY_F2ZKEY_F3ZKEY_F4ZKEY_F5ZKEY_F6ZKEY_F7ZKEY_F8ZKEY_F9ZKEY_F10ZKEY_F11ZKEY_F12ZKEY_ESCZ	KEY_ENTERZKEY_SUSPENDZKEY_BACKSPACEZ
KEY_DELETEZ
KEY_INSERTZ
KEY_RESIZEr^   rc   rA   rh   r   Zascii_lettersZdigitsor`   rb   rz   ZCOLORSET_ROOTZCOLORSET_BORDERZCOLORSET_WINDOWZCOLORSET_SHADOWZCOLORSET_TITLEZCOLORSET_BUTTONZCOLORSET_ACTBUTTONZCOLORSET_CHECKBOXZCOLORSET_ACTCHECKBOXZCOLORSET_ENTRYZCOLORSET_LABELZCOLORSET_LISTBOXZCOLORSET_ACTLISTBOXZCOLORSET_TEXTBOXZCOLORSET_ACTTEXTBOXZCOLORSET_HELPLINEZCOLORSET_ROOTTEXTZCOLORSET_EMPTYSCALEZCOLORSET_FULLSCALEZCOLORSET_DISENTRYZCOLORSET_COMPACTBUTTONZCOLORSET_ACTSELLISTBOXZCOLORSET_SELLISTBOXr   r   rP   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s   $$

A	         
?.U
*I9         
,   
  
.s