509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
…Õ^ž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 dFZdIZdJZdKZdLZddMi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œZ4x"e5e4j6ƒ ƒD ]Z7e7e4e4e7 < �q„W x4dd „ ej8ej9 D ƒD ]\Z:Z;e:e4e;< e;e4e:< �q²W G 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'ƒZVdNd)d*„ZWG d+d,„ d,eƒZXG d-d.„ d.e=ƒZYG d/d0„ d0e=ƒZZG d1d2„ d2e=ƒZ[G d3d4„ d4e[ƒZ\G d5d6„ d6eƒZ]dQd:d;„Z^d7d8gd9dddfd<d=„Z_dd9d>d7d8gdfd?d@„Z`G dAdB„ dBe=ƒZadCdD„ ZbdS )Raã  
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é   Úappendc               @   s"   e Zd ZdZddd„Zdd„ ZdS )ÚWidgetzÚBase 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 j||ƒ n| j j|ƒ d S )N)ÚwÚsetCallback)ÚselfÚobjÚdata© r   ú/usr/lib64/python3.6/snack.pyr   D   s    zWidget.setCallbackc             C   s   t ‚d S )N)Ú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 j|ƒ| _d S )N)Ú_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 )ÚCompactButtonz…Compact Button class (less frilly button decoration).

    methods:

     - CompactButton(self,text) : create button, with text.
    c             C   s   t j|ƒ| _d S )N)r   Zcompactbuttonr   )r   r   r   r   r   r   ^   s    zCompactButton.__init__N)r   r   r   r   r   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 )N)r   ÚcheckboxValue)r   r   r   r   Úvaluen   s    zCheckbox.valuec             C   s   | j jdkS )Nr   )r   r"   )r   r   r   r   Úselectedq   s    zCheckbox.selectedc             C   s   | j j||ƒS )N)r   ZcheckboxSetFlags)r   ÚflagÚsenser   r   r   ÚsetFlagst   s    zCheckbox.setFlagsc             C   s   | j j|ƒS )N)r   ZcheckboxSetValue)r   r#   r   r   r   ÚsetValuex   s    zCheckbox.setValuer   c             C   s   t j||ƒ| _d S )N)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 )	ÚSingleRadioButtonzÌSingle 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 )N)r   ÚkeyZ
radioValue)r   r   r   r   r$   ‡   s    zSingleRadioButton.selectedr   c             C   s,   |rt j||j|ƒ| _nt j|d |ƒ| _d S )N)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   r*   ~   s   r*   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|< || j|< d S )N)r   ZlistboxAddItemÚkey2itemÚitem2key)r   r   Úitemr+   r   r   r   r   Ÿ   s    
zListbox.appendc             C   s@   |s| j j|dƒ}n| j j|| j| ƒ}|| j|< || j|< d S )Nr   )r   ÚlistboxInsertItemr/   r.   )r   r   r0   Úbeforer+   r   r   r   Úinsert¤   s
    
zListbox.insertc             C   s,   | j j| j| ƒ | j| j| = | j|= d S )N)r   ÚlistboxDeleteItemr/   r.   )r   r0   r   r   r   Údelete¬   s    zListbox.deletec             C   sL   | j j|| j| ƒ}| j j| j| ƒ | j| j| = || j|< || j|< d S )N)r   r1   r/   r4   r.   )r   r   r0   r+   r   r   r   Úreplace±   s
    
zListbox.replacec             C   s   | j | jjƒ  S )N)r.   r   ZlistboxGetCurrent)r   r   r   r   Úcurrent¸   s    zListbox.currentc             C   s0   g }| j jƒ }x|D ]}|j| j| ƒ qW |S )N)r   ZlistboxGetSelectionr   r.   )r   Ú	selectionÚlistr+   r   r   r   ÚgetSelection»   s
    

zListbox.getSelectionc             C   s   | j j| j| ƒ d S )N)r   ZlistboxSetCurrentr/   )r   r0   r   r   r   Ú
setCurrentÂ   s    zListbox.setCurrentc             C   s   i | _ i | _| jjƒ  d S )N)r.   r/   r   ZlistboxClear)r   r   r   r   ÚclearÅ   s    zListbox.clearr   c             C   s6   t j||||||ƒ| _i | _i | _|r2| jj|ƒ d S )N)r   Úlistboxr   r.   r/   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   r3   r5   r6   r7   r:   r;   r<   r   r   r   r   r   r-   �   s   r-   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 j|ƒ d S )N)r   ZtextboxText)r   r   r   r   r   ÚsetTextÜ   s    zTextbox.setTextc             C   s   | j j|ƒ d S )N)r   ZtextboxHeight)r   r>   r   r   r   Ú	setHeightß   s    zTextbox.setHeightr   c             C   s   t j|||||ƒ| _d S )N)r   Ztextboxr   )r   rA   r>   r   r?   Zwrapr   r   r   r   â   s    zTextbox.__init__N)r   r   )r   r   r   r   rC   rD   r   r   r   r   r   rB   Ñ   s   	rB   c               @   s   e Zd Zddd„ZdS )	ÚTextboxReflowedé   é
   r   c             C   sN   t ||||ƒ\}}}|dkr8||kr8tj| |||dƒ ntj| |||dƒ d S )Nr   r   éÿÿÿÿ)ÚreflowrB   r   )r   rA   r   ÚflexDownÚflexUpÚ	maxHeightZnewtextr>   r   r   r   r   ç   s    zTextboxReflowed.__init__NrH   )rF   rG   rH   )r   r   r   r   r   r   r   r   rE   å   s   rE   c               @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚLabelz¸A Label (simple text).

    methods:

     - Label(self,text)   : create label
     - setText(self,text) : change text.
     - setColors(self, colorset) : change individual colors
    c             C   s   | j j|ƒ d S )N)r   Z	labelText)r   r   r   r   r   rC   ÷   s    zLabel.setTextc             C   s   t j|ƒ| _d S )N)r   Úlabelr   )r   r   r   r   r   r   ú   s    zLabel.__init__c             C   s   | j j|ƒ d S )N)r   ZlabelSetColors)r   Úcolorsetr   r   r   Ú	setColorsý   s    zLabel.setColorsN)r   r   r   r   rC   r   rP   r   r   r   r   rM   î   s   rM   c               @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚScalezÀA 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 j|ƒ d S )N)r   ZscaleSet)r   Zamountr   r   r   Úset  s    z	Scale.setc             C   s   t j||ƒ| _d S )N)r   Zscaler   )r   rA   Ztotalr   r   r   r     s    zScale.__init__N)r   r   r   r   rR   r   r   r   r   r   rQ      s   rQ   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 )N)r   Z
entryValue)r   r   r   r   r#     s    zEntry.valuer   c             C   s   | j j||ƒS )N)r   ZentrySetValue)r   r   ZcursorAtEndr   r   r   rR     s    z	Entry.setc             C   s   | j j||ƒS )N)r   ZentrySetFlags)r   r%   r&   r   r   r   r'   "  s    zEntry.setFlagsÚ r   c             C   s   t j||||||ƒ| _d S )N)r   Úentryr   )r   rA   r   ZhiddenZpasswordr?   r@   r   r   r   r   %  s    zEntry.__init__N)r   )rT   r   r   r   r   )r   r   r   r   r#   rR   r'   r   r   r   r   r   rS     s   
 rS   ú )ZF1ZF2ZF3ZF4ZF5ZF6ZF7ZF8ZF9ZF10ZF11ZF12ZESCZENTERZSUSPENDZ	BACKSPACEZDELETEZINSERTZRESIZErV   c             C   s   g | ]}t |ƒ|f‘qS r   )Úord)Ú.0Úcr   r   r   ú
<listcomp>7  s    rZ   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 jt| ƒ d S )N)r   Z	addhotkeyÚhotkeys)r   Úkeynamer   r   r   Ú	addHotKeyI  s    zForm.addHotKeyc             C   sx   d|j kr(x|jjƒ D ]}| j|ƒ qW d|j krNx@|jD ]}| j|ƒ q:W n&d|j krt|| j|jj< | jj|jƒS d S )Nr\   Úgridmembersr   )	Ú__dict__r\   Úkeysr^   r_   ÚaddÚtransr   r+   )r   Úwidgetr+   r   r   r   r   rb   L  s    


zForm.addc             C   sb   | j 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_WIDGETrc   ZFORM_EXIT_TIMERZFORM_EXIT_FDREADYÚfilemapZFORM_EXIT_HOTKEYr\   ÚRuntimeError)r   ÚwhatZwhichr   r   r   re   Y  s    





zForm.runc             C   s   | j jƒ  d S )N)r   Údraw)r   r   r   r   ri   e  s    
z	Form.drawNc             C   s"   i | _ i | _tj|ƒ| _|| _d S )N)rc   rf   r   Úformr   ÚhelpArg)r   rk   r   r   r   r   i  s    zForm.__init__c             C   s   | j j|j ƒ d S )N)r   Z
setcurrent)r   Úcor   r   r   r;   p  s    zForm.setCurrentc             C   s   | j j|ƒ d S )N)r   Zsettimer)r   Ztimerr   r   r   ÚsetTimers  s    zForm.setTimerc             C   s$   || j |jƒ < | jj|jƒ |ƒ d S )N)rf   Úfilenor   Zwatchfd)r   ÚfileÚflagsr   r   r   Ú	watchFilev  s    zForm.watchFile)N)r   r   r   r   r^   rb   re   ri   r   r;   rm   rq   r   r   r   r   r[   ;  s   
r[   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 j||ƒS )N)ÚgÚplace)r   ÚxÚyr   r   r   rt   †  s    z
Grid.placer   c             C   sœ   | j 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|||j
|||ƒS | j
j|||j||ƒS d S )Nr   rs   )r_   r   r   ZANCHOR_LEFTZANCHOR_RIGHTZ
ANCHOR_TOPZANCHOR_BOTTOMZ
GRID_GROWXZ
GRID_GROWYr`   rs   Zsetfieldr   )r   rh   Ú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 )N)r   Úgridrs   r_   )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   rt   r€   r   r   r   r   r   rr   z  s     
rr   )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 jƒ  t jƒ \| _| _| jd ƒ d S )N)r   ZinitÚsizerA   r>   ÚpushHelpLine)r   r   r   r   r   Ô  s    zSnackScreen.__init__c             C   s   t jƒ S )N)r   Úfinish)r   r   r   r   r‡   Ù  s    zSnackScreen.finishc             C   s   t jƒ  d S )N)r   Úresume)r   r   r   r   rˆ   Ü  s    zSnackScreen.resumec             C   s   t jƒ  d S )N)r   Úsuspend)r   r   r   r   r‰   ß  s    zSnackScreen.suspendc             C   s   | j | |ƒ d S )N)ÚhelpCb)r   Úargr   r   r   ÚdoHelpCallbackâ  s    zSnackScreen.doHelpCallbackc             C   s   || _ tj| jƒS )N)rŠ   r   ZhelpcallbackrŒ   )r   Úcbr   r   r   ÚhelpCallbackå  s    zSnackScreen.helpCallbackNc             C   s   |rt j||ƒS t j|ƒS )N)r   Zsuspendcallback)r   r�   r   r   r   r   ÚsuspendCallbacké  s    zSnackScreen.suspendCallbackc             C   s   t j|||||ƒS )N)r   Z
openwindow)r   ÚleftÚtoprA   r>   Útitler   r   r   Ú
openWindowî  s    zSnackScreen.openWindowc             C   s   |st jdƒS t j|ƒS d S )Nz	*default*)r   Zpushhelpline)r   r   r   r   r   r†   ñ  s    
zSnackScreen.pushHelpLinec             C   s   t jƒ S )N)r   Zpophelpline)r   r   r   r   ÚpopHelpLine÷  s    zSnackScreen.popHelpLinec             C   s   t j|||ƒS )N)r   Zdrawroottext)r   r�   r‘   r   r   r   r   ÚdrawRootTextú  s    zSnackScreen.drawRootTextc             C   s   t j|||ƒS )N)r   Zcenteredwindow)r   rA   r>   r’   r   r   r   ÚcenteredWindowý  s    zSnackScreen.centeredWindowc             C   s(   |r|rt j|j|||ƒS t j|j|ƒS )N)r   Zgridwrappedwindowrs   )r   r�   r’   ru   rv   r   r   r   ÚgridWrappedWindow   s    zSnackScreen.gridWrappedWindowTc             C   s   |rt jƒ S t jƒ S )N)r   Z	popwindowZpopwindownorefresh)r   Úrefreshr   r   r   Ú	popWindow  s    zSnackScreen.popWindowc             C   s   t jƒ S )N)r   r˜   )r   r   r   r   r˜     s    zSnackScreen.refreshc             C   s,   |t krtjt | ||ƒS tj|||ƒS d S )N)Ú	colorsetsr   Zsetcolor)r   rO   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„   rF   c             C   s   t j| |||ƒS )zR returns a tuple of the wrapped text, the actual width, and the actual height
    )r   rI   )r   rA   rJ   rK   r   r   r   rI     s    rI   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 )N)ÚprevÚ
buttonlist)r   r   r   r   r   %  s    zRadioGroup.__init__Nc             C   s<   | j  r|d krd}t|| j |ƒ}|| _ | jj||fƒ |S )Nr   )r�   r*   rž   r   )r   r’   r#   ÚdefaultÚbr   r   r   rb   )  s    zRadioGroup.addc             C   s$   x| j D ]\}}|jƒ r|S qW d S )N)rž   r$   )r   r    r#   r   r   r   r:   3  s     zRadioGroup.getSelection)N)r   r   r   r   r   rb   r:   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   s~   g | _ d| _tƒ | _tj| dt|ƒƒ xR|D ]J\}}}| jj|||ƒ}| j j||fƒ | j	|d| jdd� | jd | _q,W d S )Nr   r   )rz   )
r9   r0   rœ   r,   rr   r   Úlenrb   r   r€   )r   Úscreenrž   r’   r#   rŸ   r    r   r   r   r   B  s    zRadioBar.__init__c             C   s
   | j jƒ S )N)r,   r:   )r   r   r   r   r:   M  s    zRadioBar.getSelectionN)r   r   r   r   r   r:   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j| t|ƒdƒ x |D ]˜}t|tjdkr@t	nt
ƒrT|}|jƒ }n*t|ƒdkrj|\}}n|\}}}|| j|< |rŒt|ƒ}nt|ƒ}| j j||fƒ | j|| jddƒ | jd | _q*W d S )Nr   r   Ú3é   )r   r   r   r   )r9   r\   r0   rr   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 x| jD ]\}}||kr|S qW d S )N)r\   r9   )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 )Nr   )
r£   r’   r[   rj   Ú	childListÚform_createdr9   rr   r   Útuple)r   r£   r’   Úhelpr‚   r   r   r   r   �  s    
zGridFormHelp.__init__r   c             C   s,   | j |||||||||	|
ƒ
 | jj|ƒ d S )N)r€   r°   r   )r   rd   rw   rx   ry   rz   r{   r|   r}   r~   r   r   r   r   rb   ™  s    zGridFormHelp.addNc             C   s   | j ||ƒ}| jjƒ  |S )N)re   r£   r™   )r   ru   rv   r­   r   r   r   ÚrunOnce¡  s    
zGridFormHelp.runOncec             C   s   | j j|ƒ d S )N)rj   r^   )r   r]   r   r   r   r^   ¦  s    zGridFormHelp.addHotKeyc             C   s   | j j|ƒ d S )N)rj   rm   )r   r]   r   r   r   rm   ©  s    zGridFormHelp.setTimerc             C   sL   | j sH| jddƒ x| jD ]}| jj|ƒ qW | jj| | j||ƒ d| _ d S )Nr   )r±   rt   r°   rj   rb   r£   r—   r’   )r   ru   rv   Zchildr   r   r   Úcreate¬  s    zGridFormHelp.createc             C   s   | j ||ƒ | jjƒ S )N)rµ   rj   re   )r   ru   rv   r   r   r   re   ´  s    zGridFormHelp.runc             C   s   | j ƒ  | jjƒ S )N)rµ   rj   ri   )r   r   r   r   ri   ¸  s    zGridFormHelp.drawc             C   s0   | j ƒ  | jj| | jƒ | jjƒ }| jjƒ  |S )N)rµ   r£   r—   r’   rj   re   r™   )r   r­   r   r   r   ÚrunPopup¼  s
    

zGridFormHelp.runPopupc             C   s   | j j|ƒ d S )N)rj   r;   )r   rl   r   r   r   r;   Ã  s    zGridFormHelp.setCurrent©r   r   r   r   )r·   r   r   r   r   r   r   )NN)NN)NN)r   r   r   r   r   rb   r´   r^   rm   rµ   re   ri   r¶   r;   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 )N)r¯   r   )r   r£   r’   r‚   Zmyargsr   r   r   r   Í  s    zGridForm.__init__N)r   r   r   r   r   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   | j |td f||ƒ d S )Nr   )ÚaddItemÚ	snackArgs)r   r   r0   r$   r   r   r   r   á  s    zCheckboxTree.appendc             C   s4   |d kr|}| j j|||ƒ}|| j|< || j|< d S )N)r   ZcheckboxtreeAddItemr.   r/   )r   r   Úpathr0   r$   r+   r   r   r   rº   ä  s
    
zCheckboxTree.addItemc             C   s   | j jƒ }| j| S )N)r   ZcheckboxtreeGetCurrentr.   )r   Zcurrr   r   r   Ú
getCurrentë  s    
zCheckboxTree.getCurrentc             C   s2   t j||||ƒ| _i | _i | _|r.| jj|ƒ d S )N)r   Zcheckboxtreer   r.   r/   ZcheckboxtreeSetWidth)r   r>   r?   rA   Zhide_checkboxZunselectabler   r   r   r   ï  s
    zCheckboxTree.__init__c             C   s0   g }| j jƒ }x|D ]}|j| j| ƒ qW |S )N)r   ZcheckboxtreeGetSelectionr   r.   )r   r8   r9   r+   r   r   r   r:   ö  s
    

zCheckboxTree.getSelectionc             C   s   | j j| j| |ƒ d S )N)r   ZcheckboxtreeSetEntryr/   )r   r0   r   r   r   r   ÚsetEntryý  s    zCheckboxTree.setEntryc             C   s   | j j| j| ƒ d S )N)r   ZcheckboxtreeSetCurrentr/   )r   r0   r   r   r   r;      s    zCheckboxTree.setCurrentr   c             C   s   | j j| j| |ƒ d S )N)r   ZcheckboxtreeSetEntryValuer/   )r   r0   r$   r   r   r   ÚsetEntryValue  s    zCheckboxTree.setEntryValuec             C   s   | j j| j| ƒS )N)r   ZcheckboxtreeGetEntryValuer/   )r   r0   r   r   r   ÚgetEntryValue  s    zCheckboxTree.getEntryValue)Nr   )Nr   )r   Nr   r   )r   )r   r   r   r   r   rº   r½   r   r:   r¾   r;   r¿   rÀ   r   r   r   r   r¹   Ñ  s   



r¹   ÚOkÚCancelé(   c
             C   sþ   |d	krt |ƒ}t| |ƒ}
t||ƒ}t||dd�}d}xX|D ]P}t|ƒtkrV|\}}n|}|}||krl|}n||krx|}|j||ƒ |d }q<W |dkr¢|j|ƒ t| ||	ddƒ}|j	|ddƒ |j	|ddd
d� |j	|
d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?   r@   r   Né   )ry   r¦   )r~   rH   )r   r   r   r   )r¢   r¤   rE   r-   Útyper²   r   r;   r¯   rb   r´   r®   r7   )r£   r’   r   ÚitemsÚbuttonsrA   r?   r>   rŸ   r³   ÚbbÚtÚlÚcountr0   r+   rs   Zrcr   r   r   ÚListboxChoiceWindow	  s2    
 




rÌ   c             C   sd   t | |ƒ}t||| jd d�}	t| ||ddƒ}
|
j|	dddd� |
j|dddd� |j|
j||ƒƒS )	z 
     - ButtonChoiceWindow(screen, title, text, 
               buttons = [ 'Ok', 'Cancel' ], 
               width = 40, x = None, y = None, help = None):
    é   )rL   r   r¦   r   )ry   )r~   )r   r   r   r   )r¤   rE   r>   r¯   rb   r®   r´   )r£   r’   r   rÇ   rA   ru   rv   r³   rÈ   rÉ   rs   r   r   r   ÚButtonChoiceWindow4  s    
rÎ   é   c	          	   C   s\  t | |ƒ}	t||ƒ}
d}x|D ]}|d }qW td|ƒ}d}g }xˆ|D ]€}t|ƒtkr‚|\}}t|tjdkrptnt	ƒrŠt
||ƒ}nt
|ƒ}|jt|ƒd|d
dd� |j|d|dd� |d }|j|ƒ qFW t| ||ddƒ}|j|
dddd� |j|dddd� |j|	dddd	� |jƒ }g }d}x(|D ] }|j|| jƒ ƒ |d }�q&W |	j|ƒt|ƒfS )z•
    EntryWindow(screen, title, text, prompts, allowCancel = 1, width = 40,
        entryWidth = 20, buttons = [ 'Ok', 'Cancel' ], help = None):
    r   r   r¦   r¥   )ry   rz   )rz   rÄ   )ry   )r~   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r¤   rE   rr   rÅ   r²   r§   r¨   r©   rª   r«   rS   r€   rM   r   r¯   rb   r´   r#   r®   )r£   r’   r   ZpromptsZallowCancelrA   Z
entryWidthrÇ   r³   rÈ   rÉ   rË   ÚnZsgZ	entryListÚers   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j| ddƒ d}| j|	|
|d�}t|ƒ| _| j	| jdddd� ntj| ddƒ d}t
||||ƒ| _| j	| jd|dd� d S )Nr   r¦   )Úadjust_widthr   )rz   )r|   )ÚcolsÚ
col_widthsÚcol_padÚcol_text_alignrr   r   ÚcolFormTextrM   rN   r€   r-   r=   )r   r>   rÕ   rÖ   r?   r@   rA   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 |ƒ}�x|| jk o$||k �r || }tj|ƒ}| j| |k rj|rX|| j|< n|d | j| … }| j| tj|ƒ }	|	dkrì|d kr”t}
n|| }
|
tkr°|d|	  }|
tkrØd|	d  | d|	d d   }|
tkrìd|	 | }||d k�rd| j }nd}|| | }|d }qW |S )Nr   rT   rV   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Ù   ž  s8    
zCListbox.colFormTextc             C   s,   |d kr| j }| j||ƒ}| jj||ƒ d S )N)rØ   rÙ   r=   r   )r   rÝ   r0   rØ   r   r   r   r   r   Ç  s    zCListbox.appendc             C   s.   |d kr| j }| j||ƒ}| jj|||ƒ d S )N)rØ   rÙ   r=   r3   )r   rÝ   r0   r2   rØ   r   r   r   r   r3   Í  s    zCListbox.insertc             C   s   | j j|ƒ d S )N)r=   r5   )r   r0   r   r   r   r5   Ó  s    zCListbox.deletec             C   s,   |d kr| j }| j||ƒ}| jj||ƒ d S )N)rØ   rÙ   r=   r6   )r   rÝ   r0   rØ   r   r   r   r   r6   Ö  s    zCListbox.replacec             C   s
   | j jƒ S )N)r=   r7   )r   r   r   r   r7   Ü  s    zCListbox.currentc             C   s   | j j|ƒ d S )N)r=   r;   )r   r0   r   r   r   r;   ß  s    zCListbox.setCurrentc             C   s   | j jƒ  d S )N)r=   r<   )r   r   r   r   r<   â  s    zCListbox.clear)r   r   r   r   NNNr   )Nr   )N)N)N)r   r   r   r   r   rÙ   r   r3   r5   r6   r7   r;   r<   r   r   r   r   rÓ   r  s      

)


rÓ   c             C   s   d|  S )Né   r   )ru   r   r   r   ÚcustomColorsetå  s    rá   rH   )rH   r   rH   rH   )rH   rH   )r   r   )r   r   )r   r   rH   )rF   rF   ©rÁ   rÂ   rH   )râ   rÃ   r   rH   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!   r*   r-   rB   rE   rM   rQ   rS   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_RESIZErW   r\   r9   ra   rÐ   Zascii_lettersZdigitsÚorY   r[   rr   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„   rI   rœ   r¡   r¤   r¯   r¸   r¹   rÌ   rÎ   rÒ   rÓ   rá   r   r   r   r   Ú<module>(   sœ   $

A	 ?.
U
*I9  
)-s