+ self.info = "%s: %s" % (self.display_name, self.display(w[self.name]))
+
+ return self.NEXT
+
+
+class WizardFormPage(WizardPage):
+ """Represents a Form in a wizard"""
+
+ def __init__(self, name, display_name, text, fields, **kargs):
+ super(WizardFormPage, self).__init__(name, display_name, text, **kargs)
+ self.fields = fields
+
+ def run(self, session, title):
+ d = session['dialog']
+ w = session['wizard']
+
+ field_lenght = len(self.fields())
+ form_height = field_lenght if field_lenght < PAGE_HEIGHT - 4 \
+ else PAGET_HEIGHT - 4
+
+ (code, output) = d.form(
+ self.text, width=PAGE_WIDTH, height=PAGE_HEIGHT,
+ form_height=form_height, ok_label="Next", cancel="Back",
+ fields=self.fields(), title=title)
+
+ if code in (d.DIALOG_CANCEL, d.DIALOG_ESC):
+ return self.PREV
+
+ w[self.name] = self.validate(output)
+ self.default = output
+ self.info = "%s: %s" % (self.display_name, self.display(w[self.name]))
+
+ return self.NEXT
+
+
+class WizardMenuPage(WizardPageWthChoices):
+ """Represents a menu dialog with available choices in a wizard"""
+
+ def run(self, session, title):
+ d = session['dialog']
+ w = session['wizard']
+
+ extra_button = 1 if self.extra else 0
+
+ choices = self.choices()
+
+ if len(choices) == 0:
+ assert self.fallback, "Zero choices and no fallback"
+ if self.fallback():
+ raise WizardReloadPage
+ else:
+ return self.PREV
+
+ default_item = self.default if self.default else choices[0][0]
+
+ (code, choice) = d.menu(
+ self.text, width=PAGE_WIDTH, ok_label="Next", cancel="Back",
+ title=title, choices=choices, height=PAGE_HEIGHT,
+ default_item=default_item, extra_label=self.extra_label,
+ extra_button=extra_button)
+
+ if code in (d.DIALOG_CANCEL, d.DIALOG_ESC):
+ return self.PREV
+ elif code == d.DIALOG_EXTRA:
+ self.extra()
+ raise WizardReloadPage
+
+ self.default = choice
+ w[self.name] = self.validate(choice)
+ self.info = "%s: %s" % (self.display_name, self.display(w[self.name]))