
Ignore-this: 197a121bac23ae72a086535cc612311c darcs-hash:20090906134550-bd074-801938dc1daca12012adb24aeb4bff939ab75728.gz
85 lines
2.9 KiB
Python
Executable file
85 lines
2.9 KiB
Python
Executable file
#!/usr/bin/env python
|
|
#
|
|
# DIALOGWIZARD.PY--
|
|
#
|
|
# Copyright (C) 2009 Antoine Durand-Gasselin
|
|
# Author: Antoine Durand-Gasselin <adg@crans.org>
|
|
#
|
|
|
|
from wizard import Step, PreviousStep, EndScenario
|
|
from itertools import izip
|
|
import dialog, time
|
|
|
|
def really_quit(dico):
|
|
raise EndScenario("game over!", data = dico)
|
|
|
|
class DialogStepGenerator():
|
|
u"""This class defines a step, that will prompt the user for various
|
|
fields."""
|
|
|
|
def __init__(self, backtitle):
|
|
self.d = dialog.Dialog()
|
|
self.d.add_persistent_args(["--backtitle", backtitle])
|
|
|
|
def _check_rc(self, rc):
|
|
if rc == 2: really_quit(dico)
|
|
if rc == 1: raise PreviousStep
|
|
|
|
def _skim_choices(self, choices, dico):
|
|
return [ f for f in choices if f.get('show_cond', lambda x : True)(dico) ]
|
|
|
|
def form_step(self, title, enonce, form, **kw):
|
|
def fn(dico, default):
|
|
sform = self._skim_choices(form, dico)
|
|
for field in sform:
|
|
item = default.get(field['var'], dico.get(field['var'], ''))
|
|
field['item'] = item
|
|
rc, res = self.d.form(enonce, fields = sform, title=title, **kw)
|
|
self._check_rc(rc)
|
|
for field, val in izip (sform, res):
|
|
dico[field['var']] = val
|
|
return dico
|
|
return Step(fn)
|
|
|
|
def select_step(self, title, enonce, var, choix, **kw):
|
|
def fn(dico, default):
|
|
schoix = []
|
|
for c in choix:
|
|
try:
|
|
schoix.append((c[0], c[1]))
|
|
except Exception,e:
|
|
if c.get('show_cond', lambda x : True)(dico):
|
|
schoix.append((c['label'], c['item']))
|
|
print schoix
|
|
rc, res = self.d.menu(enonce, choices = schoix, title = title, **kw)
|
|
self._check_rc(rc)
|
|
dico[var] = res
|
|
return dico
|
|
return Step(fn)
|
|
|
|
def input_step(self, title, enonce, var, **kw):
|
|
def fn(dico, default):
|
|
rc, res = self.d.inputbox(enonce, title = title, init = dico.get(var, ''), **kw)
|
|
self._check_rc(rc)
|
|
dico[var] = res
|
|
return dico
|
|
return Step(fn)
|
|
|
|
def checklist_step(self, title, enonce, liste):
|
|
def fn(dico, default):
|
|
sliste = []
|
|
for c in liste:
|
|
try:
|
|
sliste.append((c[0], c[1], dico.get(c[0], 'off')))
|
|
except Exception,e:
|
|
if c.get('show_cond', lambda x : True)(dico):
|
|
sliste.append((c['var'], c['item'], dico.get(c['var'], 'off')))
|
|
rc, res = self.d.checklist(enonce, title = title, choices = sliste, **kw)
|
|
self._check_rc(rc)
|
|
for tag, item, status in liste:
|
|
if tag in res:
|
|
dico[tag] = 'on'
|
|
else:
|
|
dico[tag] = 'off'
|
|
return dico
|
|
return Step(fn)
|