diff options
Diffstat (limited to 'Swift')
| -rw-r--r-- | Swift/QtUI/QtFormWidget.cpp | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/Swift/QtUI/QtFormWidget.cpp b/Swift/QtUI/QtFormWidget.cpp index 117696d..874c8a1 100644 --- a/Swift/QtUI/QtFormWidget.cpp +++ b/Swift/QtUI/QtFormWidget.cpp @@ -26,80 +26,87 @@ QtFormWidget::QtFormWidget(Form::ref form, QWidget* parent) : QWidget(parent), f QGridLayout* thisLayout = new QGridLayout(this); int row = 0; if (!form->getTitle().empty()) { QLabel* instructions = new QLabel(("<b>" + form->getTitle() + "</b>").c_str(), this); thisLayout->addWidget(instructions, row++, 0, 1, 2); } if (!form->getInstructions().empty()) { QLabel* instructions = new QLabel(form->getInstructions().c_str(), this); thisLayout->addWidget(instructions, row++, 0, 1, 2); } QScrollArea* scrollArea = new QScrollArea(this); thisLayout->addWidget(scrollArea); QWidget* scroll = new QWidget(this); QGridLayout* layout = new QGridLayout(scroll); foreach (boost::shared_ptr<FormField> field, form->getFields()) { QWidget* widget = createWidget(field); if (widget) { layout->addWidget(new QLabel(field->getLabel().c_str(), this), row, 0); layout->addWidget(widget, row++, 1); } } scrollArea->setWidget(scroll); scrollArea->setWidgetResizable(true); setEditable(form->getType() != Form::CancelType && form->getType() != Form::ResultType); } QtFormWidget::~QtFormWidget() { } QListWidget* QtFormWidget::createList(FormField::ref field) { QListWidget* listWidget = new QListWidget(this); listWidget->setSortingEnabled(false); listWidget->setSelectionMode(field->getType() == FormField::ListMultiType ? QAbstractItemView::MultiSelection : QAbstractItemView::SingleSelection); std::vector<bool> selected; - foreach (FormField::Option option, field->getOptions()) { - listWidget->addItem(option.label.c_str()); - if (field->getType() == FormField::ListSingleType) { - selected.push_back(!field->getValues().empty() && option.value == field->getValues()[0]); + /* if this is an editable form, use the 'options' list, otherwise use the 'values' list */ + if (form_->getType() != Form::FormType) { + foreach (const std::string& value, field->getValues()) { + listWidget->addItem(P2QSTRING(value)); + selected.push_back(false); } - else if (field->getType() == FormField::ListMultiType) { - std::string text = option.value; - selected.push_back(std::find(field->getValues().begin(), field->getValues().end(), text) != field->getValues().end()); + } else { + foreach (FormField::Option option, field->getOptions()) { + listWidget->addItem(option.label.c_str()); + if (field->getType() == FormField::ListSingleType) { + selected.push_back(!field->getValues().empty() && option.value == field->getValues()[0]); + } + else if (field->getType() == FormField::ListMultiType) { + std::string text = option.value; + selected.push_back(std::find(field->getValues().begin(), field->getValues().end(), text) != field->getValues().end()); + } } - } for (int i = 0; i < listWidget->count(); i++) { QListWidgetItem* item = listWidget->item(i); item->setSelected(selected[i]); } return listWidget; } QWidget* QtFormWidget::createWidget(FormField::ref field) { QWidget* widget = NULL; if (field->getType() == FormField::BooleanType) { QCheckBox* checkWidget = new QCheckBox(this); checkWidget->setCheckState(field->getBoolValue() ? Qt::Checked : Qt::Unchecked); widget = checkWidget; } if (field->getType() == FormField::FixedType) { QString value = field->getFixedValue().c_str(); widget = new QLabel(value, this); } if (field->getType() == FormField::ListSingleType) { widget = createList(field); } if (field->getType() == FormField::TextMultiType) { QString value = field->getTextMultiValue().c_str(); QTextEdit* textWidget = new QTextEdit(this); textWidget->setPlainText(value); widget = textWidget; } if (field->getType() == FormField::TextPrivateType) { QString value = field->getTextPrivateValue().c_str(); QLineEdit* lineWidget = new QLineEdit(value, this); lineWidget->setEchoMode(QLineEdit::Password); widget = lineWidget; } if (field->getType() == FormField::TextSingleType) { |
Swift