o
    rŒ3bž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i d"ej “d#ej!“d$ej"“d%ej#“d&ej$“d'ej%“d(ej&“d)ej'“d*ej(“d+ej)“d,ej*“d-ej+“d.ej,“d/ej-“d0ej.“d1ej/“d2ej0“ej1ej2e3d3ƒd4œ¥Z4e5e4 6¡ ƒD ]Z7e7e4e4e7 < qåd5d6„ ej8ej9 D ƒD ]\Z:Z;e:e4e;< e;e4e:< qùG d7d8„ d8ƒZ<G d9d:„ d:ƒZ=i d;ej>“d<ej?“d=ej@“d>ejA“d?ejB“d@ejC“dAejD“dBejE“dCejF“dDejG“dEejH“dFejI“dGejJ“dHejK“dIejL“dJejM“dKejN“ejOejPejQejRejSejTdLœ¥ZUG dMdN„ dNƒZVdndPdQ„ZWG dRdS„ dSeƒZXG dTdU„ dUe=ƒZYG dVdW„ dWe=ƒZZG dXdY„ dYe=ƒZ[G dZd[„ d[e[ƒZ\G d\d]„ d]eƒZ]	^		dod`da„Z^dbdcgd_dddfddde„Z_dfd_dgdbdcgdfdhdi„Z`G djdk„ dke=ƒZadldm„ ZbdS )paã  
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 )Ú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  ||¡ d S | 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 ‚r   )ÚNotImplementedError©r   r   r   r   Ú__init__J   s   zWidget.__init__r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r   :   s    
	r   c                   @   ó   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   ó   t  |¡| _d S r   )Ú_snackÚbuttonr   ©r   Útextr   r   r   r   T   ó   zButton.__init__N©r   r   r   r   r   r   r   r   r   r!   M   ó    r!   c                   @   r    )ÚCompactButtonz…Compact Button class (less frilly button decoration).

    methods:

     - CompactButton(self,text) : create button, with text.
    c                 C   r"   r   )r#   Úcompactbuttonr   r%   r   r   r   r   ^   r'   zCompactButton.__init__Nr(   r   r   r   r   r*   W   r)   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   ó   | j jS r   ©r   ÚcheckboxValuer   r   r   r   Úvaluen   ó   zCheckbox.valuec                 C   s   | j jdkS ©Nr   r.   r   r   r   r   Úselectedq   ó   zCheckbox.selectedc                 C   ó   | j  ||¡S r   )r   ÚcheckboxSetFlags©r   ÚflagÚsenser   r   r   ÚsetFlagst   s   zCheckbox.setFlagsc                 C   s   | j  |¡S r   )r   ÚcheckboxSetValue)r   r0   r   r   r   ÚsetValuex   r4   zCheckbox.setValuer   c                 C   ó   t  ||¡| _d S r   )r#   Úcheckboxr   )r   r&   ÚisOnr   r   r   r   {   ó   zCheckbox.__init__N©r   )	r   r   r   r   r0   r3   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 r   )r   ÚkeyÚ
radioValuer   r   r   r   r3   ‡   r'   zSingleRadioButton.selectedr   c                 C   s.   |rt  ||j|¡| _d S t  |d |¡| _d S r   )r#   Úradiobuttonr   )r   r&   Úgroupr?   r   r   r   r   Š   s   zSingleRadioButton.__init__NrA   )r   r   r   r   r3   r   r   r   r   r   rB   ~   s    rB   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   ÚlistboxAddItemÚkey2itemÚitem2key©r   r&   ÚitemrC   r   r   r   r   Ÿ   s   
zListbox.appendc                 C   s@   |s
| j  |d¡}n
| j  || j| ¡}|| j|< || j|< d S r2   )r   ÚlistboxInsertItemrJ   rI   )r   r&   rL   ÚbeforerC   r   r   r   Úinsert¤   s
   
zListbox.insertc                 C   s,   | j  | j| ¡ | j| j| = | j|= d S r   )r   ÚlistboxDeleteItemrJ   rI   ©r   rL   r   r   r   Údelete¬   s   zListbox.deletec                 C   sL   | j  || j| ¡}| j  | j| ¡ | j| j| = || j|< || j|< d S r   )r   rM   rJ   rP   rI   rK   r   r   r   Úreplace±   s
   
zListbox.replacec                 C   s   | j | j ¡  S r   )rI   r   ÚlistboxGetCurrentr   r   r   r   Úcurrent¸   r'   zListbox.currentc                 C   ó,   g }| j  ¡ }|D ]
}| | j| ¡ q	|S r   )r   ÚlistboxGetSelectionr   rI   ©r   Ú	selectionÚlistrC   r   r   r   ÚgetSelection»   ó
   
zListbox.getSelectionc                 C   ó   | j  | j| ¡ d S r   )r   ÚlistboxSetCurrentrJ   rQ   r   r   r   Ú
setCurrentÂ   ó   zListbox.setCurrentc                 C   s   i | _ i | _| j ¡  d S r   )rI   rJ   r   ÚlistboxClearr   r   r   r   ÚclearÅ   s   zListbox.clearr   c                 C   s:   t  ||||||¡| _i | _i | _|r| j |¡ d S d S r   )r#   Úlistboxr   rI   rJ   ÚlistboxSetWidth)r   ÚheightÚscrollÚ
returnExitÚwidthÚ
showCursorÚmultipleÚborderr   r   r   r   Ê   s   ÿzListbox.__init__N)r   r   r   r   r   r   )r   r   r   r   r   rO   rR   rS   rU   r[   r_   rb   r   r   r   r   r   rG   �   s    rG   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   ó   | j  |¡ d S r   )r   ÚtextboxTextr%   r   r   r   ÚsetTextÜ   r'   zTextbox.setTextc                 C   rm   r   )r   ÚtextboxHeight)r   re   r   r   r   Ú	setHeightß   r'   zTextbox.setHeightr   c                 C   s   t  |||||¡| _d S r   )r#   Útextboxr   )r   rh   re   r&   rf   Úwrapr   r   r   r   â   ó   zTextbox.__init__Nr   )r   r   r   r   ro   rq   r   r   r   r   r   rl   Ñ   s
    
rl   c                   @   s   e Zd Zddd„ZdS )ÚTextboxReflowedé   é
   r   c                 C   sP   t ||||ƒ\}}}|dkr||krt | |||d¡ d S t | |||d¡ d S )Nr   r   r   )Úreflowrl   r   )r   rh   r&   ÚflexDownÚflexUpÚ	maxHeightÚnewtextre   r   r   r   r   ç   s   zTextboxReflowed.__init__N)rv   rw   r   )r   r   r   r   r   r   r   r   ru   å   s    ru   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   rm   r   )r   Ú	labelTextr%   r   r   r   ro   ÷   r'   zLabel.setTextc                 C   r"   r   )r#   Úlabelr   r%   r   r   r   r   ú   r'   zLabel.__init__c                 C   rm   r   )r   ÚlabelSetColors)r   Úcolorsetr   r   r   Ú	setColorsý   r'   zLabel.setColorsN)r   r   r   r   ro   r   r‚   r   r   r   r   r}   î   s
    r}   c                   @   ó    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   rm   r   )r   ÚscaleSet)r   Úamountr   r   r   Úset  r'   z	Scale.setc                 C   r=   r   )r#   Úscaler   )r   rh   Útotalr   r   r   r     r@   zScale.__init__N)r   r   r   r   r‡   r   r   r   r   r   r„      s    r„   c                   @   s8   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   r-   r   )r   Ú
entryValuer   r   r   r   r0     r1   zEntry.valuer   c                 C   r5   r   )r   ÚentrySetValue)r   r&   ÚcursorAtEndr   r   r   r‡     ó   z	Entry.setc                 C   r5   r   )r   ÚentrySetFlagsr7   r   r   r   r:   "  rŽ   zEntry.setFlagsÚ r   c                 C   s   t  ||||||¡| _d S r   )r#   Úentryr   )r   rh   r&   ÚhiddenÚpasswordrf   rg   r   r   r   r   %  s   zEntry.__init__N©r   )r�   r   r   r   r   )r   r   r   r   r0   r‡   r:   r   r   r   r   r   rŠ     s    
ÿrŠ   ÚF1ÚF2ÚF3ÚF4ÚF5ÚF6ÚF7ÚF8ÚF9ÚF10ÚF11ÚF12ÚESCÚENTERÚSUSPENDÚ	BACKSPACEÚDELETEú )ÚINSERTÚRESIZEr¦   c                 C   s   g | ]}t |ƒ|f‘qS r   )Úord)Ú.0Úcr   r   r   Ú
<listcomp>7  s    r¬   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   Ú	addhotkeyÚhotkeys©r   Úkeynamer   r   r   Ú	addHotKeyI  s   zForm.addHotKeyc                 C   sr   d|j v r|j ¡ D ]}|  |¡ q
d|j v r$|jD ]}|  |¡ qd S d|j v r7|| j|jj< | j |j¡S d S )Nr¯   Úgridmembersr   )	Ú__dict__r¯   Úkeysr²   r³   ÚaddÚtransr   rC   )r   ÚwidgetrC   r   r   r   r   r¶   L  s   



ýzForm.addc                 C   s^   | j  ¡ \}}|tjkr| j| S |tjkrdS |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Úwhichr   r   r   rº   Y  s   





zForm.runc                 C   ó   | j  ¡  d S r   )r   Údrawr   r   r   r   rÄ   e  s   
z	Form.drawNc                 C   s"   i | _ i | _t |¡| _|| _d S r   )r·   r¾   r#   Úformr   ÚhelpArg)r   rÆ   r   r   r   r   i  s   
zForm.__init__c                 C   s   | j  |j ¡ d S r   )r   Ú
setcurrent©r   Úcor   r   r   r_   p  r@   zForm.setCurrentc                 C   rm   r   )r   Úsettimer)r   Útimerr   r   r   ÚsetTimers  r'   zForm.setTimerc                 C   s$   || j | ¡ < | j | ¡ |¡ d S r   )r¾   Úfilenor   Úwatchfd)r   ÚfileÚflagsr   r   r   Ú	watchFilev  s   zForm.watchFiler   )r   r   r   r   r²   r¶   rº   rÄ   r   r_   rÌ   rÑ   r   r   r   r   r­   ;  s    
r­   c                   @   s0   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   r5   r   )ÚgÚplace©r   ÚxÚyr   r   r   rÔ   †  rŽ   z
Grid.place©r   r   r   r   r   c                 C   s˜   | j  |¡ d}|rtj}n|rtj}|r|tjB }n|r"|tjB }d}|	r)tj}|
r0|tjB }d|j	v rA| j
 |||j
|||¡S | 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Ú	gridFlagsr   r   r   ÚsetField‰  s(   


ÿzGrid.setFieldc                 G   s   t j|Ž | _g | _d S r   )r#   ÚgridrÓ   r³   )r   Úargsr   r   r   r   ¤  ó   
zGrid.__init__N©rØ   r   r   r   r   r   r   )r   r   r   r   rÔ   rë   r   r   r   r   r   rÒ   z  s    
þrÒ   ÚROOTÚBORDERÚWINDOWÚSHADOWÚTITLEÚBUTTONÚ	ACTBUTTONÚCHECKBOXÚACTCHECKBOXÚENTRYÚLABELÚLISTBOXÚ
ACTLISTBOXÚTEXTBOXÚ
ACTTEXTBOXÚHELPLINEÚROOTTEXT)Ú
EMPTYSCALEÚ	FULLSCALEÚDISENTRYÚCOMPACTBUTTONÚACTSELLISTBOXÚ
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#   ÚinitÚsizerh   re   ÚpushHelpLiner   r   r   r   r   Ô  s   zSnackScreen.__init__c                 C   ó   t  ¡ S r   )r#   Úfinishr   r   r   r   r  Ù  r1   zSnackScreen.finishc                 C   ó   t  ¡  d S r   )r#   Úresumer   r   r   r   r  Ü  r4   zSnackScreen.resumec                 C   r  r   )r#   Úsuspendr   r   r   r   r  ß  r4   zSnackScreen.suspendc                 C   s   |   | |¡ d S r   )ÚhelpCb)r   Úargr   r   r   ÚdoHelpCallbackâ  r'   zSnackScreen.doHelpCallbackc                 C   s   || _ t | j¡S r   )r  r#   Úhelpcallbackr  )r   Úcbr   r   r   ÚhelpCallbackå  s   zSnackScreen.helpCallbackNc                 C   s   |rt  ||¡S t  |¡S r   )r#   Úsuspendcallback)r   r  r   r   r   r   ÚsuspendCallbacké  s   
zSnackScreen.suspendCallbackc                 C   s   t  |||||¡S r   )r#   Ú
openwindow)r   ÚleftÚtoprh   re   Útitler   r   r   Ú
openWindowî  r@   zSnackScreen.openWindowc                 C   s   |st  d¡S t  |¡S )Nz	*default*)r#   Úpushhelpliner%   r   r   r   r
  ñ  s   

zSnackScreen.pushHelpLinec                 C   r  r   )r#   Úpophelpliner   r   r   r   ÚpopHelpLine÷  r1   zSnackScreen.popHelpLinec                 C   ó   t  |||¡S r   )r#   Údrawroottext)r   r  r  r&   r   r   r   ÚdrawRootTextú  rŽ   zSnackScreen.drawRootTextc                 C   r   r   )r#   Úcenteredwindow)r   rh   re   r  r   r   r   ÚcenteredWindowý  rŽ   zSnackScreen.centeredWindowc                 C   s(   |r|rt  |j|||¡S t  |j|¡S r   )r#   ÚgridwrappedwindowrÓ   )r   rì   r  rÖ   r×   r   r   r   ÚgridWrappedWindow   s   zSnackScreen.gridWrappedWindowTc                 C   s   |rt  ¡ S t  ¡ S r   )r#   Ú	popwindowÚpopwindownorefresh)r   Úrefreshr   r   r   Ú	popWindow  s   zSnackScreen.popWindowc                 C   r  r   )r#   r)  r   r   r   r   r)    r1   zSnackScreen.refreshc                 C   s(   |t v rt t | ||¡S t |||¡S r   )Ú	colorsetsr#   Úsetcolor)r   r�   ÚfgÚbgr   r   r   ÚsetColor  s   zSnackScreen.setColorr   ©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  rv   c                 C   s   t  | |||¡S )zR returns a tuple of the wrapped text, the actual width, and the actual height
    )r#   rx   )r&   rh   ry   rz   r   r   r   rx     s   rx   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   )r2  rB   r3  r   )r   r  r0   ÚdefaultÚbr   r   r   r¶   )  s   zRadioGroup.addc                 C   s$   | j D ]\}}| ¡ r|  S qd S r   )r3  r3   )r   r6  r0   r   r   r   r[   3  s   zRadioGroup.getSelectionr   )r   r   r   r   r   r¶   r[   r   r   r   r   r1    s
    

r1  c                   @   rƒ   )Ú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  ||f¡ | j	|d| jdd� | jd | _qd S )Nr   r   ©rã   )
rZ   rL   r1  rF   rÒ   r   Úlenr¶   r   rë   )r   Úscreenr3  r  r0   r5  r6  r   r   r   r   B  s   üzRadioBar.__init__c                 C   ó
   | j  ¡ S r   )rF   r[   r   r   r   r   r[   M  ó   
zRadioBar.getSelectionN)r   r   r   r   r   r[   r   r   r   r   r7  9  s    r7  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 ]L}t|tjdkrt	nt
ƒr)|}| ¡ }nt|ƒdkr4|\}}n
|\}}}|| j|< |rEt|ƒ}nt|ƒ}| j  ||f¡ |  || jdd¡ | jd | _qd S )Nr   r   Ú3é   )r   r   r   r   )rZ   r¯   rL   rÒ   r   r9  Ú
isinstanceÚsysÚversionÚstrÚ
basestringÚlowerr*   r!   r   rë   )	r   r:  r3  ÚcompactÚblistr  r0   Úhotkeyr6  r   r   r   r   \  s&   




ðzButtonBar.__init__c                 C   s8   || j v r
| j | S | jD ]\}}||kr|  S qd S r   )r¯   rZ   )r   Úresultr$   r0   r   r   r   ÚbuttonPresseds  s   

ÿzButtonBar.buttonPressedNrA   )r   r   r   r   r   rJ  r   r   r   r   r=  S  s    
r=  c                   @   sn   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 r2   )
r:  r  r­   rÅ   Ú	childListÚform_createdrZ   rÒ   r   Útuple)r   r:  r  Úhelprí   r   r   r   r   �  s   
zGridFormHelp.__init__rØ   r   c                 C   s,   |   |||||||||	|
¡
 | j |¡ d S r   )rë   rL  r   )r   r¸   rà   rá   râ   rã   rä   rå   ræ   rç   rè   r   r   r   r¶   ™  s
   þzGridFormHelp.addNc                 C   s   |   ||¡}| j ¡  |S r   )rº   r:  r*  )r   rÖ   r×   rI  r   r   r   ÚrunOnce¡  s   
zGridFormHelp.runOncec                 C   rm   r   )rÅ   r²   r°   r   r   r   r²   ¦  r'   zGridFormHelp.addHotKeyc                 C   rm   r   )rÅ   rÌ   r°   r   r   r   rÌ   ©  r'   zGridFormHelp.setTimerc                 C   sL   | j s$|  dd¡ | jD ]}| j |¡ q| j | | j||¡ d| _ d S d S r4  )rM  rÔ   rL  rÅ   r¶   r:  r&  r  )r   rÖ   r×   Úchildr   r   r   Úcreate¬  s   

ûzGridFormHelp.createc                 C   s   |   ||¡ | j ¡ S r   )rR  rÅ   rº   rÕ   r   r   r   rº   ´  rî   zGridFormHelp.runc                 C   s   |   ¡  | j ¡ S r   )rR  rÅ   rÄ   r   r   r   r   rÄ   ¸  s   
zGridFormHelp.drawc                 C   s0   |   ¡  | j | | j¡ | j ¡ }| j ¡  |S r   )rR  r:  r&  r  rÅ   rº   r*  )r   rI  r   r   r   ÚrunPopup¼  s
   

zGridFormHelp.runPopupc                 C   rm   r   )rÅ   r_   rÈ   r   r   r   r_   Ã  r'   zGridFormHelp.setCurrentrï   r0  )r   r   r   r   r   r¶   rP  r²   rÌ   rR  rº   rÄ   rS  r_   r   r   r   r   rK  }  s    

þ


rK  c                   @   r    )ÚGridFormzh GridForm class (extends GridFormHelp):

    methods:

     - GridForm(self, screen, title, *args):
    c                 G   s   | ||d f| }t j|Ž  d S r   )rK  r   )r   r:  r  rí   Úmyargsr   r   r   r   Í  s   zGridForm.__init__Nr(   r   r   r   r   rT  Æ  r)   rT  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&   rL   r3   r   r   r   r   á  s   zCheckboxTree.appendc                 C   s4   |d u r|}| j  |||¡}|| j|< || j|< d S r   )r   ÚcheckboxtreeAddItemrI   rJ   )r   r&   ÚpathrL   r3   rC   r   r   r   rW  ä  s
   
zCheckboxTree.addItemc                 C   s   | j  ¡ }| j| S r   )r   ÚcheckboxtreeGetCurrentrI   )r   Úcurrr   r   r   Ú
getCurrentë  s   

zCheckboxTree.getCurrentc                 C   s6   t  ||||¡| _i | _i | _|r| j |¡ d S d S r   )r#   Úcheckboxtreer   rI   rJ   ÚcheckboxtreeSetWidth)r   re   rf   rh   Úhide_checkboxÚunselectabler   r   r   r   ï  s   ÿzCheckboxTree.__init__c                 C   rV   r   )r   ÚcheckboxtreeGetSelectionr   rI   rX   r   r   r   r[   ö  r\   zCheckboxTree.getSelectionc                 C   ó   | j  | j| |¡ d S r   )r   ÚcheckboxtreeSetEntryrJ   )r   rL   r&   r   r   r   ÚsetEntryý  rt   zCheckboxTree.setEntryc                 C   r]   r   )r   ÚcheckboxtreeSetCurrentrJ   rQ   r   r   r   r_      r`   zCheckboxTree.setCurrentr   c                 C   rc  r   )r   ÚcheckboxtreeSetEntryValuerJ   )r   rL   r3   r   r   r   ÚsetEntryValue  rt   zCheckboxTree.setEntryValuec                 C   s   | j  | j| ¡S r   )r   ÚcheckboxtreeGetEntryValuerJ   rQ   r   r   r   ÚgetEntryValue  r@   zCheckboxTree.getEntryValuer2   )r   Nr   r   r”   )r   r   r   r   r   rW  r]  r   r[   re  r_   rh  rj  r   r   r   r   rV  Ñ  s    



rV  ©ÚOkÚCancelé(   c
                 C   sú   |dkrt |ƒ}t| |ƒ}
t||ƒ}t||dd�}d}|D ](}t|ƒtkr*|\}}n|}|}||kr5|}n||kr;|}| ||¡ |d }q|dkrO| |¡ 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   )rf   rg   r   Né   )r   r   r   r   ©râ   r?  ©rç   )r9  r=  ru   rG   ÚtyperN  r   r_   rK  r¶   rP  rJ  rU   )r:  r  r&   ÚitemsÚbuttonsrh   rf   re   r5  rO  ÚbbÚtÚlÚcountrL   rC   rÓ   Úrcr   r   r   ÚListboxChoiceWindow	  s0   





rz  rl  rm  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):
    é   )r{   r   r?  r   ©r   r   r   r   rp  rq  )r=  ru   re   rK  r¶   rJ  rP  )r:  r  r&   rt  rh   rÖ   r×   rO  ru  rv  rÓ   r   r   r   ÚButtonChoiceWindow4  s   
r}  r   é   c	                 C   sN  t | |ƒ}	t||ƒ}
d}|D ]}|d }qtd|ƒ}d}g }|D ]@}t|ƒtkr>|\}}t|tjdkr5tnt	ƒr=t
||ƒ}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ã   r8  ro  r|  rp  rq  )r=  ru   rÒ   rr  rN  r@  rA  rB  rC  rD  rŠ   rë   r}   r   rK  r¶   rP  r0   rJ  )r:  r  r&   ÚpromptsÚallowCancelrh   Ú
entryWidthrt  rO  ru  rv  rx  ÚnÚsgÚ	entryListÚerÓ   rI  ÚentryValuesr   r   r   ÚEntryWindowD  s<   




€
r‡  c                   @   sj   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r5t | 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   r8  )rå   )ÚcolsÚ
col_widthsÚcol_padÚcol_text_alignrÒ   r   ÚcolFormTextr}   r   rë   rG   rc   )r   re   rŠ  r‹  rf   rg   rh   rŒ  r�  Ú
col_labelsÚcol_label_alignr‰  Úbox_yÚlstrr   r   r   r   ƒ  s    ÿ
zCListbox.__init__c                 C   s,  d}d}t |ƒ}|| jk r”||k r”|| }t |¡}| j| |k r2|r)|| j|< n	|d | j| … }| j| t |¡ }	|	dkrs|d krGt}
n|| }
|
tkrU|d|	  }|
tkrid|	d  | d|	d d   }|
tkrsd|	 | }||d krd| j }nd}|| | }|d }|| jk r”||k s|S )Nr   r�   r¦   r?  r   )	r9  rŠ  r#   Úwstrlenr‹  ÚLEFTÚCENTERÚRIGHTrŒ  )r   Úcol_textÚalignr‰  ÚirC  Úc_lenÚcstrÚcstrlenÚdeltaÚaÚpstrr   r   r   rŽ  ž  s<   
ÿß#zCListbox.colFormTextc                 C   ó,   |d kr| j }|  ||¡}| j ||¡ d S r   )r�  rŽ  rc   r   ©r   r—  rL   r�  r&   r   r   r   r   Ç  ó   zCListbox.appendc                 C   s.   |d kr| j }|  ||¡}| j |||¡ d S r   )r�  rŽ  rc   rO   )r   r—  rL   rN   r�  r&   r   r   r   rO   Í  s   zCListbox.insertc                 C   rm   r   )rc   rR   rQ   r   r   r   rR   Ó  r'   zCListbox.deletec                 C   r   r   )r�  rŽ  rc   rS   r¡  r   r   r   rS   Ö  r¢  zCListbox.replacec                 C   r;  r   )rc   rU   r   r   r   r   rU   Ü  r<  zCListbox.currentc                 C   rm   r   )rc   r_   rQ   r   r   r   r_   ß  r'   zCListbox.setCurrentc                 C   rÃ   r   )rc   rb   r   r   r   r   rb   â  rŽ   zCListbox.clear)r   r   r   r   NNNr   r2   r   )r   r   r   r   r   rŽ  r   rO   rR   rS   rU   r_   rb   r   r   r   r   rˆ  r  s    
ý

)

rˆ  c                 C   s   d|  S )Né   r   )rÖ   r   r   r   ÚcustomColorsetå  r1   r¤  )rv   rv   )rk  rn  r   r   NN)cr   Ú
__future__r   r   r   r#   ÚstringrA  r   r   r   r   r	   r
   r   r”  ÚDOWNr•  ÚUPr–  rX  r   r!   r*   r,   rB   rG   rl   ru   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_RESIZEr©   r¯   rZ   rµ   r‚  Úascii_lettersÚdigitsÚor«   r­   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  rx   r1  r7  r=  rK  rT  rV  rz  r}  r‡  rˆ  r¤  r   r   r   r   Ú<module>   sô   $$

A	ÿÿÿþþþýýüüûûúúø

?
.ÿþýüûúùø	÷
öõôóòñðê
U*I9
ý,
þ

ÿ.s