History

Add optional Cancel button to JavaScript Window.form()

David Rowe committed 12 years ago

Commit 040254a1 parent 7c6f1ff1 file · +42 −21Browse files

Showing the changes to interface/src/scripting/WindowScriptingInterface.cpp (1 of 1 file). Show all

Unified · Split

interface/src/scripting/WindowScriptingInterface.cpp+42−21
@@ -94,11 +94,14 @@ QScriptValue WindowScriptingInterface::showConfirm(const QString& message) { · 93 unmodified lines
94/// Display a form layout with an edit box94/// Display a form layout with an edit box
95/// \param const QString& title title to display95/// \param const QString& title title to display
96/// \param const QScriptValue form to display (array containing labels and values)96/// \param const QScriptValue form to display (array containing labels and values)
97/// \return QScriptValue result form (unchanged is dialog canceled)97/// \return QScriptValue `true` if 'OK' was clicked, `false` otherwise
98QScriptValue WindowScriptingInterface::showForm(const QString& title, QScriptValue form) {98QScriptValue WindowScriptingInterface::showForm(const QString& title, QScriptValue form) {
99
99 if (form.isArray() && form.property("length").toInt32() > 0) {100 if (form.isArray() && form.property("length").toInt32() > 0) {
100 QDialog* editDialog = new QDialog(Application::getInstance()->getWindow());101 QDialog* editDialog = new QDialog(Application::getInstance()->getWindow());
101 editDialog->setWindowTitle(title);102 editDialog->setWindowTitle(title);
103
104 bool cancelButton = false;
102 105
103 QVBoxLayout* layout = new QVBoxLayout();106 QVBoxLayout* layout = new QVBoxLayout();
104 editDialog->setLayout(layout);107 editDialog->setLayout(layout);
@@ -120,42 +123,60 @@ QScriptValue WindowScriptingInterface::showForm(const QString& title, QScriptVal · 15 unmodified lines
120 QVector<QLineEdit*> edits;123 QVector<QLineEdit*> edits;
121 for (int i = 0; i < form.property("length").toInt32(); ++i) {124 for (int i = 0; i < form.property("length").toInt32(); ++i) {
122 QScriptValue item = form.property(i);125 QScriptValue item = form.property(i);
123 edits.push_back(new QLineEdit(item.property("value").toString()));126
124 formLayout->addRow(item.property("label").toString(), edits.back());127 if (item.property("button").toString() != "") {
128 cancelButton = cancelButton || item.property("button").toString().toLower() == "cancel";
129 } else {
130 edits.push_back(new QLineEdit(item.property("value").toString()));
131 formLayout->addRow(item.property("label").toString(), edits.back());
132 }
125 }133 }
126 QDialogButtonBox* buttons = new QDialogButtonBox(QDialogButtonBox::Ok);134
135 QDialogButtonBox* buttons = new QDialogButtonBox(
136 QDialogButtonBox::Ok
137 | (cancelButton ? QDialogButtonBox::Cancel : QDialogButtonBox::NoButton)
138 );
127 connect(buttons, SIGNAL(accepted()), editDialog, SLOT(accept()));139 connect(buttons, SIGNAL(accepted()), editDialog, SLOT(accept()));
140 connect(buttons, SIGNAL(rejected()), editDialog, SLOT(reject()));
128 layout->addWidget(buttons);141 layout->addWidget(buttons);
129 142
130 if (editDialog->exec() == QDialog::Accepted) {143 int result = editDialog->exec();
144 if (result == QDialog::Accepted) {
145 int j = -1;
131 for (int i = 0; i < form.property("length").toInt32(); ++i) {146 for (int i = 0; i < form.property("length").toInt32(); ++i) {
132 QScriptValue item = form.property(i);147 QScriptValue item = form.property(i);
133 QScriptValue value = item.property("value");148 QScriptValue value = item.property("value");
134 bool ok = true;149 bool ok = true;
135 if (value.isNumber()) {150 qDebug() << "item.property(""button"").toString() = " << item.property("button").toString();
136 value = edits.at(i)->text().toDouble(&ok);151 if (item.property("button").toString() == "") {
137 } else if (value.isString()) {152 j += 1;
138 value = edits.at(i)->text();153 if (value.isNumber()) {
139 } else if (value.isBool()) {154 value = edits.at(j)->text().toDouble(&ok);
140 if (edits.at(i)->text() == "true") {155 } else if (value.isString()) {
141 value = true;156 value = edits.at(j)->text();
142 } else if (edits.at(i)->text() == "false") {157 } else if (value.isBool()) {
143 value = false;158 if (edits.at(j)->text() == "true") {
144 } else {159 value = true;
145 ok = false;160 } else if (edits.at(j)->text() == "false") {
161 value = false;
162 } else {
163 ok = false;
164 }
165 }
166 if (ok) {
167 item.setProperty("value", value);
168 form.setProperty(i, item);
146 }169 }
147 }
148 if (ok) {
149 item.setProperty("value", value);
150 form.setProperty(i, item);
151 }170 }
152 }171 }
153 }172 }
154 173
155 delete editDialog;174 delete editDialog;
175
176 return (result == QDialog::Accepted);
156 }177 }
157 178
158 return form;179 return false;
159}180}
160 181
161/// Display a prompt with a text box182/// Display a prompt with a text box