13 typedef QMap<QString, QString> ErrorDict;
14 class ValidationError {
19 ValidationError(QString _msg): msg(_msg) {}
21 QString getMsg() { return msg; }
26 class Widget : public QObject {
29 Widget(QObject *parent=0): QObject(parent) {}
33 virtual QString render(QString name, QVariant value) const = 0;
35 virtual QVariant valueFromDatadict(const QueryDict &data, const FilesDict &, QString name) const {
36 return QVariant(data.value(name, ""));
40 class TextInput : public Widget {
42 TextInput(QObject *parent=0): Widget(parent) {}
44 virtual QString render(QString name, QVariant value) const;
48 typedef QPair<QString, QString> SelectOption;
49 class Select : public Widget {
51 QList<SelectOption> choices;
55 Select(bool _show_empty_row=true, QObject *parent=0): Widget(parent), show_empty_row(_show_empty_row) {}
57 Select(const QList<SelectOption> &_choices, bool _show_empty_row=true, QObject *parent=0): Widget(parent), choices(_choices), show_empty_row(_show_empty_row) {}
59 void addOption(const SelectOption &option) {
60 choices.append(option);
63 virtual QString render(QString name, QVariant value) const;
65 virtual const QList<SelectOption> &getChoicesRef() const { return choices; }
68 class CheckboxInput : public Widget {
70 CheckboxInput(QObject *parent=0): Widget(parent) {}
72 virtual QString render(QString name, QVariant value) const;
74 virtual QVariant valueFromDatadict(const QueryDict &data, const FilesDict &files, QString name) const;
77 class FileInput : public Widget {
79 FileInput(QObject *parent=0): Widget(parent) {}
81 virtual QString render(QString name, QVariant value) const;
83 virtual QVariant valueFromDatadict(const QueryDict &data, const FilesDict &files, QString name) const;
88 class Field : public QObject {
97 Field(QString _label, bool _required, QVariant _initial, QObject *parent=0)
98 : QObject(parent), label(_label), required(_required), initial(_initial) {}
102 virtual QString render(const QueryDict &data, QString field_template="%1") const;
104 virtual QVariant clean(QVariant value) const;
106 virtual QString getLabel() const { return label; }
108 virtual bool isRequired() const { return required; }
110 virtual QVariant getInitial() const { return initial; }
112 virtual Widget *getWidgetPtr() { return widget; }
115 class CharField : public Field {
117 CharField(QString _label, bool _required, QVariant _initial="", QObject *parent=0);
121 class IntegerField : public Field {
123 IntegerField(QString _label, bool _required, QVariant _initial="", QObject *parent=0);
125 virtual QVariant clean(QVariant value) const;
128 class FloatField : public Field {
130 FloatField(QString _label, bool _required, QVariant _initial="", QObject *parent=0);
132 virtual QVariant clean(QVariant value) const;
135 class ChoiceField : public Field {
137 const QList<SelectOption> &choices;
140 ChoiceField(QString _label, const QList<SelectOption> &_choices, bool _required, QVariant _initial="", QObject *parent=0);
142 virtual QVariant clean(QVariant value) const;
145 class BooleanField : public Field {
147 BooleanField(QString _label, bool _required, QVariant _initial=false, QObject *parent=0);
149 virtual QVariant clean(QVariant value) const;
152 class FileField : public Field {
154 FileField(QString _label, bool _required, QObject *parent=0);
156 virtual QVariant clean(QVariant value) const;
161 class Form : public QObject {
168 QVariantMap cleaned_data;
171 Form(QObject *parent=0): QObject(parent), is_bound(false) {}
175 void bindData(const QueryDict &_data) {
180 void bindFiles(const FilesDict &_files) {
185 bool isBound() const { return is_bound; }
187 void addField(QString name, Field *field);
189 void setError(QString field_name, QString msg);
195 QString renderField(QString field_name, QString field_template="<p>\n\t%1\n\t%2\n\t%3\n</p>\n", QString label_template="<label for=\"%1\">%2</label>\n", QString error_template="<span class=\"errors\">%1</span>\n") const;
197 QList<QString> fieldNames() const;
199 const QVariantMap &getCleanedDataRef() const { return cleaned_data; }
201 Field *operator[](QString field_name) const;