diff options
Diffstat (limited to 'Swift/QtUI/QtFormWidget.cpp')
| -rw-r--r-- | Swift/QtUI/QtFormWidget.cpp | 55 | 
1 files changed, 38 insertions, 17 deletions
| diff --git a/Swift/QtUI/QtFormWidget.cpp b/Swift/QtUI/QtFormWidget.cpp index 874c8a1..b4840e9 100644 --- a/Swift/QtUI/QtFormWidget.cpp +++ b/Swift/QtUI/QtFormWidget.cpp @@ -1,3 +1,3 @@  /* - * Copyright (c) 2010-2013 Kevin Smith + * Copyright (c) 2010-2014 Kevin Smith   * Licensed under the GNU General Public License v3. @@ -39,7 +39,23 @@ QtFormWidget::QtFormWidget(Form::ref form, QWidget* parent) : QWidget(parent), f  	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); +	const std::vector<Form::FormItem> items = form->getItems(); +	if (items.empty()) { /* single item forms */ +		foreach (FormField::ref field, form->getFields()) { +			QWidget* widget = createWidget(field, field->getType(), 0); +			if (widget) { +				layout->addWidget(new QLabel(field->getLabel().c_str(), this), row, 0); +				layout->addWidget(widget, row++, 1); +			} +		} +	} else { /* multi-item forms */ +		const Form::FormItem& headers = form->getFields(); +		for (size_t i = 0; i < items.size(); ++i) { +			const Form::FormItem& item = items[i]; +			assert(item.size() == headers.size()); +			for (size_t j = 0; j < item.size(); ++j) { +				QWidget* widget = createWidget(item[j], headers[j]->getType(), i); +				if (widget) { +					layout->addWidget(new QLabel(item[j]->getLabel().c_str(), this), row, 0); +					layout->addWidget(widget, row++, 1); +				} +			}  		} @@ -85,5 +101,5 @@ QListWidget* QtFormWidget::createList(FormField::ref field) { -QWidget* QtFormWidget::createWidget(FormField::ref field) { +QWidget* QtFormWidget::createWidget(FormField::ref field, const FormField::Type type, const size_t index) {  	QWidget* widget = NULL; -	if (field->getType() == FormField::BooleanType) { +	if (type == FormField::BooleanType) {  		QCheckBox* checkWidget = new QCheckBox(this); @@ -92,3 +108,3 @@ QWidget* QtFormWidget::createWidget(FormField::ref field) {  	} -	if (field->getType() == FormField::FixedType) { +	if (type == FormField::FixedType) {  		QString value = field->getFixedValue().c_str(); @@ -96,6 +112,6 @@ QWidget* QtFormWidget::createWidget(FormField::ref field) {  	} -	if (field->getType() == FormField::ListSingleType) { +	if (type == FormField::ListSingleType) {  		widget = createList(field);  	} -	if (field->getType() == FormField::TextMultiType) { +	if (type == FormField::TextMultiType) {  		QString value = field->getTextMultiValue().c_str(); @@ -105,3 +121,3 @@ QWidget* QtFormWidget::createWidget(FormField::ref field) {  	} -	if (field->getType() == FormField::TextPrivateType) { +	if (type == FormField::TextPrivateType) {  		QString value = field->getTextPrivateValue().c_str(); @@ -111,3 +127,3 @@ QWidget* QtFormWidget::createWidget(FormField::ref field) {  	} -	if (field->getType() == FormField::TextSingleType) { +	if (type == FormField::TextSingleType) {  		QString value = field->getTextSingleValue().c_str(); @@ -115,3 +131,3 @@ QWidget* QtFormWidget::createWidget(FormField::ref field) {  	} -	if (field->getType() == FormField::JIDSingleType) { +	if (type == FormField::JIDSingleType) {  		QString value = field->getJIDSingleValue().toString().c_str(); @@ -119,3 +135,3 @@ QWidget* QtFormWidget::createWidget(FormField::ref field) {  	} -	if (field->getType() == FormField::JIDMultiType) { +	if (type == FormField::JIDMultiType) {  		QString text = boost::join(field->getValues(), "\n").c_str(); @@ -125,6 +141,11 @@ QWidget* QtFormWidget::createWidget(FormField::ref field) {  	} -	if (field->getType() == FormField::ListMultiType) { +	if (type == FormField::ListMultiType) {  		widget = createList(field);  	} -	fields_[field->getName()] = widget; +	std::string indexString; +	if (index) { +		/* for multi-item forms we need to distinguish between the different rows */ +		indexString = boost::lexical_cast<std::string>(index); +	} +	fields_[field->getName() + indexString] = widget;  	return widget; | 
 Swift
 Swift