diff options
| author | Kevin Smith <git@kismith.co.uk> | 2012-04-27 16:02:10 (GMT) | 
|---|---|---|
| committer | Kevin Smith <git@kismith.co.uk> | 2012-04-27 16:02:10 (GMT) | 
| commit | 74df18dda93f154339af1137e8676337233b4a61 (patch) | |
| tree | c10364de0d828a2b397bcb46408ff3d7bf66b331 /Swift | |
| parent | 9e57b31133edad6a543da05aca54ee94d589b090 (diff) | |
| download | swift-74df18dda93f154339af1137e8676337233b4a61.zip swift-74df18dda93f154339af1137e8676337233b4a61.tar.bz2 | |
Don't allow editing of AdHoc result forms.
Resolves: #1090
Diffstat (limited to 'Swift')
| -rw-r--r-- | Swift/QtUI/QtAdHocCommandWindow.cpp | 9 | ||||
| -rw-r--r-- | Swift/QtUI/QtAdHocCommandWindow.h | 1 | ||||
| -rw-r--r-- | Swift/QtUI/QtFormWidget.cpp | 30 | ||||
| -rw-r--r-- | Swift/QtUI/QtFormWidget.h | 3 | 
4 files changed, 42 insertions, 1 deletions
| diff --git a/Swift/QtUI/QtAdHocCommandWindow.cpp b/Swift/QtUI/QtAdHocCommandWindow.cpp index b148560..88aa708 100644 --- a/Swift/QtUI/QtAdHocCommandWindow.cpp +++ b/Swift/QtUI/QtAdHocCommandWindow.cpp @@ -15,7 +15,7 @@ const int FormLayoutIndex = 1;  namespace Swift {  QtAdHocCommandWindow::QtAdHocCommandWindow(boost::shared_ptr<OutgoingAdHocCommandSession> command) : command_(command) { - +	someActions_ = false;  	formWidget_ = NULL;  	setAttribute(Qt::WA_DeleteOnClose); @@ -109,16 +109,19 @@ void QtAdHocCommandWindow::setForm(Form::ref form) {  	formWidget_ = new QtFormWidget(form, this);  	layout_->insertWidget(FormLayoutIndex, formWidget_);  	show(); +	formWidget_->setEditable(someActions_);  }  void QtAdHocCommandWindow::setNoForm() {  	delete formWidget_; +	formWidget_ = NULL;  	show();  }  typedef std::pair<Command::Action, QPushButton*> ActionButton;  void QtAdHocCommandWindow::setAvailableActions(Command::ref /*commandResult*/) { +	someActions_ = false;  	foreach (ActionButton pair, actions_) {  		OutgoingAdHocCommandSession::ActionState state = command_->getActionState(pair.first);  		if (state & OutgoingAdHocCommandSession::Present) { @@ -129,11 +132,15 @@ void QtAdHocCommandWindow::setAvailableActions(Command::ref /*commandResult*/) {  		}  		if (state & OutgoingAdHocCommandSession::Enabled) {  			pair.second->setEnabled(true); +			someActions_ = true;  		}  		else {  			pair.second->setEnabled(false);  		}  	} +	if (formWidget_) { +		formWidget_->setEditable(someActions_); +	}  }  } diff --git a/Swift/QtUI/QtAdHocCommandWindow.h b/Swift/QtUI/QtAdHocCommandWindow.h index 42e3b1c..7f824f8 100644 --- a/Swift/QtUI/QtAdHocCommandWindow.h +++ b/Swift/QtUI/QtAdHocCommandWindow.h @@ -44,5 +44,6 @@ namespace Swift {  			QPushButton* cancelButton_;  			std::map<Command::Action, QPushButton*> actions_;  			QBoxLayout* layout_; +			bool someActions_;  	};  } diff --git a/Swift/QtUI/QtFormWidget.cpp b/Swift/QtUI/QtFormWidget.cpp index 2df8d7f..158bc9d 100644 --- a/Swift/QtUI/QtFormWidget.cpp +++ b/Swift/QtUI/QtFormWidget.cpp @@ -241,4 +241,34 @@ Form::ref QtFormWidget::getCompletedForm() {  	return result;  } +template<class T> void QtFormWidget::setEnabled(QWidget* rawWidget, bool editable) { +	T* widget = qobject_cast<T*>(rawWidget); +	if (widget) { +		widget->setEnabled(editable); +	} +} + +template<class T> void QtFormWidget::setEditable(QWidget* rawWidget, bool editable) { +	T* widget = qobject_cast<T*>(rawWidget); +	if (widget) { +		widget->setReadOnly(!editable); +	} +} + +void QtFormWidget::setEditable(bool editable) { +	if (!form_) { +		return; +	} +	foreach (boost::shared_ptr<FormField> field, form_->getFields()) { +		QWidget* widget = NULL; +		if (field) { +			widget = fields_[field->getName()]; +		} +		setEnabled<QCheckBox>(widget, editable); +		setEnabled<QListWidget>(widget, editable); +		setEditable<QTextEdit>(widget, editable); +		setEditable<QLineEdit>(widget, editable); +	} +} +  } diff --git a/Swift/QtUI/QtFormWidget.h b/Swift/QtUI/QtFormWidget.h index 2fb7b98..c7aae73 100644 --- a/Swift/QtUI/QtFormWidget.h +++ b/Swift/QtUI/QtFormWidget.h @@ -21,9 +21,12 @@ class QtFormWidget : public QWidget {  		QtFormWidget(Form::ref form, QWidget* parent = NULL);  		virtual ~QtFormWidget();  		Form::ref getCompletedForm(); +		void setEditable(bool editable);  	private:  		QWidget* createWidget(FormField::ref field);  		QListWidget* createList(FormField::ref field); +		template<class T> void setEnabled(QWidget* rawWidget, bool editable); +		template<class T> void setEditable(QWidget* rawWidget, bool editable);  		std::map<std::string, QWidget*> fields_;  		Form::ref form_;  }; | 
 Swift
 Swift