- EntryWindow
"""
+
+from __future__ import absolute_import, print_function, unicode_literals
import _snack
-import types
import string
+import sys
from _snack import FLAG_DISABLED, FLAGS_SET, FLAGS_RESET, FLAGS_TOGGLE, FD_READ, FD_WRITE, FD_EXCEPT
snackArgs = {"append":-1}
class Widget:
- """Base class for NEWT toolkit
+ """Base class for NEWT toolkit - Do not use directly
methods:
self.w.setCallback(obj)
def __init__(self):
- self.w = None
+ raise NotImplementedError
class Button(Widget):
"""Basic button class, takes button text as parameter
methods:
- - Listbox(self,height, scroll = 0l returnExit = 0, width = 0, showCursor = 0)
+ - 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
"""
def current(self):
return self.key2item[self.w.listboxGetCurrent()]
+ def getSelection(self):
+ selection = []
+ list = self.w.listboxGetSelection()
+ for key in list:
+ selection.append(self.key2item[key])
+ return selection
+
def setCurrent(self, item):
self.w.listboxSetCurrent(self.item2key[item])
self.item2key = {}
self.w.listboxClear()
- def __init__(self, height, scroll = 0, returnExit = 0, width = 0, showCursor = 0):
- self.w = _snack.listbox(height, scroll, returnExit, showCursor)
+ def __init__(self, height, scroll = 0, returnExit = 0, width = 0, showCursor = 0, multiple = 0, border = 0):
+ self.w = _snack.listbox(height, scroll, returnExit, showCursor, multiple, border)
self.key2item = {}
self.item2key = {}
if (width):
- 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.
"""
def setText(self, text):
self.w.textboxText(text)
+ def setHeight(self, height):
+ self.w.textboxHeight(height)
+
def __init__(self, width, height, text, scroll = 0, wrap = 0):
self.w = _snack.textbox(width, height, text, scroll, wrap)
- Label(self,text) : create label
- setText(self,text) : change text.
+ - setColors(self, colorset) : change individual colors
"""
def setText(self, text):
self.w.labelText(text)
def __init__(self, text):
self.w = _snack.label(text)
+ def setColors(self, colorset):
+ self.w.labelSetColors(colorset)
+
class Scale(Widget):
"""A Scale (progress bar).
if returnExit is set, return from Form when exiting this element, else
proceed to next entry widget.
- value(self): return value.
- - set(text) : set the text
+ - set(text, cursorAtEnd = 1) : set the text
- setFlags (flag, sense) : flags can be FLAG_DISABLED, FLAGS_SET, FLAGS_RESET, FLAGS_TOGGLE
"""
def value(self):
return self.w.entryValue
- def set(self, text):
- return self.w.entrySetValue(text)
+ def set(self, text, cursorAtEnd = 1):
+ return self.w.entrySetValue(text, cursorAtEnd)
def setFlags (self, flag, sense):
return self.w.entrySetFlags(flag, sense)
"F4" : _snack.KEY_F4, "F5" : _snack.KEY_F5, "F6" : _snack.KEY_F6,
"F7" : _snack.KEY_F7, "F8" : _snack.KEY_F8, "F9" : _snack.KEY_F9,
"F10" : _snack.KEY_F10, "F11" : _snack.KEY_F11,
- "F12" : _snack.KEY_F12, "ESC" : _snack.KEY_ESC , " " : ord(" ") }
+ "F12" : _snack.KEY_F12, "ESC" : _snack.KEY_ESC,
+ "ENTER": _snack.KEY_ENTER, "SUSPEND" : _snack.KEY_SUSPEND,
+ "BACKSPACE": _snack.KEY_BACKSPACE, "DELETE": _snack.KEY_DELETE,
+ "INSERT": _snack.KEY_INSERT, "RESIZE": _snack.KEY_RESIZE,
+ " " : ord(" ") }
-for n in hotkeys.keys():
+for n in list(hotkeys.keys()):
hotkeys[hotkeys[n]] = n
+for o,c in [ (ord(c),c) for c in string.ascii_letters+string.digits ]:
+ hotkeys[c] = o
+ hotkeys[o] = c
class Form:
""" Base Form class, from which Grid, etc. inherit
self.w.addhotkey(hotkeys[keyname])
def add(self, widget):
- if widget.__dict__.has_key('hotkeys'):
+ if 'hotkeys' in widget.__dict__:
for key in widget.hotkeys.keys():
self.addHotKey(key)
- if widget.__dict__.has_key('gridmembers'):
+ if 'gridmembers' in widget.__dict__:
for w in widget.gridmembers:
self.add(w)
- elif widget.__dict__.has_key('w'):
+ elif 'w' in widget.__dict__:
self.trans[widget.w.key] = widget
return self.w.add(widget.w)
return None
return "TIMER"
elif (what == _snack.FORM_EXIT_FDREADY):
return self.filemap[which]
-
- return hotkeys[which]
+ elif (what == _snack.FORM_EXIT_HOTKEY):
+ return hotkeys[which]
+ raise RuntimeError("EOF or IO error")
def draw(self):
self.w.draw()
if (growy):
gridFlags = gridFlags | _snack.GRID_GROWY
- if (what.__dict__.has_key('g')):
+ if 'g' in what.__dict__:
return self.g.setfield(col, row, what.g, padding, anchorFlags,
gridFlags)
else:
return self.g.setfield(col, row, what.w, padding, anchorFlags)
def __init__(self, *args):
- self.g = apply(_snack.grid, args)
+ self.g = _snack.grid(*args)
self.gridmembers = []
+colorsets = { "ROOT" : _snack.COLORSET_ROOT,
+ "BORDER" : _snack.COLORSET_BORDER,
+ "WINDOW" : _snack.COLORSET_WINDOW,
+ "SHADOW" : _snack.COLORSET_SHADOW,
+ "TITLE" : _snack.COLORSET_TITLE,
+ "BUTTON" : _snack.COLORSET_BUTTON,
+ "ACTBUTTON" : _snack.COLORSET_ACTBUTTON,
+ "CHECKBOX" : _snack.COLORSET_CHECKBOX,
+ "ACTCHECKBOX" : _snack.COLORSET_ACTCHECKBOX,
+ "ENTRY" : _snack.COLORSET_ENTRY,
+ "LABEL" : _snack.COLORSET_LABEL,
+ "LISTBOX" : _snack.COLORSET_LISTBOX,
+ "ACTLISTBOX" : _snack.COLORSET_ACTLISTBOX,
+ "TEXTBOX" : _snack.COLORSET_TEXTBOX,
+ "ACTTEXTBOX" : _snack.COLORSET_ACTTEXTBOX,
+ "HELPLINE" : _snack.COLORSET_HELPLINE,
+ "ROOTTEXT" : _snack.COLORSET_ROOTTEXT,
+ "EMPTYSCALE" : _snack.COLORSET_EMPTYSCALE,
+ "FULLSCALE" : _snack.COLORSET_FULLSCALE,
+ "DISENTRY" : _snack.COLORSET_DISENTRY,
+ "COMPACTBUTTON" : _snack.COLORSET_COMPACTBUTTON,
+ "ACTSELLISTBOX" : _snack.COLORSET_ACTSELLISTBOX,
+ "SELLISTBOX" : _snack.COLORSET_SELLISTBOX }
+
class SnackScreen:
"""A Screen;
- 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)
"""
def __init__(self):
_snack.init()
self.helpCb(self, arg)
def helpCallback(self, cb):
- self.helpCb = cb
+ self.helpCb = cb
return _snack.helpcallback(self.doHelpCallback)
def suspendCallback(self, cb, data = None):
return _snack.gridwrappedwindow(grid.g, title)
- def popWindow(self):
- return _snack.popwindow()
+ def popWindow(self, refresh = True):
+ if refresh:
+ return _snack.popwindow()
+ return _snack.popwindownorefresh()
def refresh(self):
return _snack.refresh()
+ def setColor(self, colorset, fg, bg):
+ if colorset in colorsets:
+ return _snack.setcolor(colorsets[colorset], fg, bg)
+ else:
+ # assume colorset is an integer for the custom color set
+ return _snack.setcolor(colorset, fg, bg)
+
def reflow(text, width, flexDown = 5, flexUp = 5):
""" returns a tuple of the wrapped text, the actual width, and the actual height
"""
self.item = 0
Grid.__init__(self, len(buttonlist), 1)
for blist in buttonlist:
- if (type(blist) == types.StringType):
+ if isinstance(blist, str if sys.version >= '3' else basestring):
title = blist
- value = string.lower(blist)
+ value = blist.lower()
elif len(blist) == 2:
(title, value) = blist
else:
self.item = self.item + 1
def buttonPressed(self, result):
- if self.hotkeys.has_key(result):
+ if result in self.hotkeys:
return self.hotkeys[result]
for (button, value) in self.list:
if result == button:
- return value
+ return value
return None
self.form_created = 0
args = list(args)
args[:0] = [self]
- apply(Grid.__init__, tuple(args))
+ Grid.__init__(*tuple(args))
def add(self, widget, col, row, padding = (0, 0, 0, 0),
anchorLeft = 0, anchorTop = 0, anchorRight = 0,
"""
def __init__(self, screen, title, *args):
myargs = (self, screen, title, None) + args
- apply(GridFormHelp.__init__, myargs)
+ GridFormHelp.__init__(*myargs)
class CheckboxTree(Widget):
""" CheckboxTree combo widget,
l = Listbox(height, scroll = scroll, returnExit = 1)
count = 0
for item in items:
- if (type(item) == types.TupleType):
+ if type(item) == tuple:
(text, key) = item
else:
text = item
count = 0
entryList = []
for n in prompts:
- if (type(n) == types.TupleType):
+ if type(n) == tuple:
(n, e) = n
- e = Entry(entryWidth, e)
+ if isinstance(e, str if sys.version >= '3' else basestring):
+ e = Entry(entryWidth, e)
else:
e = Entry(entryWidth)
def clear(self):
self.listbox.clear()
+
+def customColorset(x):
+ return 30 + x