summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swift/QtUI')
-rw-r--r--Swift/QtUI/QtAdHocCommandWindow.cpp9
-rw-r--r--Swift/QtUI/QtAdHocCommandWindow.h1
-rw-r--r--Swift/QtUI/QtFormWidget.cpp30
-rw-r--r--Swift/QtUI/QtFormWidget.h3
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_;
};