History

new windows JS interface

Atlante45 committed 12 years ago

Commit f960b4f1 parent 81282143 files · +114 −11Browse files

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

Unified · Split

interface/src/scripting/WindowScriptingInterface.cpp+80−2
@@ -10,9 +10,11 @@ · 9 unmodified lines
1010 //
1111
1212 #include <QDir>
13+#include <QDialogButtonBox>
1314 #include <QFileDialog>
1415 #include <QInputDialog>
1516 #include <QMessageBox>
17+#include <QScriptValue>
1618
1719 #include "Application.h"
1820 #include "Menu.h"
@@ -24,6 +26,9 @@ WindowScriptingInterface* WindowScriptingInterface::getInstance() { · 5 unmodified lines
2426 return &sharedInstance;
2527 }
2628
29+WindowScriptingInterface::WindowScriptingInterface() {
30+}
31+
2732 QScriptValue WindowScriptingInterface::alert(const QString& message) {
2833 QScriptValue retVal;
2934 QMetaObject::invokeMethod(this, "showAlert", Qt::BlockingQueuedConnection, Q_RETURN_ARG(QScriptValue, retVal), Q_ARG(const QString&, message));
@@ -37,6 +42,14 @@ QScriptValue WindowScriptingInterface::confirm(const QString& message) { · 7 unmodified lines
3742 return retVal;
3843 }
3944
45+QScriptValue WindowScriptingInterface::arrayEdit(const QString& title, QScriptValue array) {
46+ QScriptValue retVal;
47+ QMetaObject::invokeMethod(this, "showArrayEdit", Qt::BlockingQueuedConnection,
48+ Q_RETURN_ARG(QScriptValue, retVal),
49+ Q_ARG(const QString&, title), Q_ARG(QScriptValue, array));
50+ return retVal;
51+}
52+
4053 QScriptValue WindowScriptingInterface::prompt(const QString& message, const QString& defaultText) {
4154 QScriptValue retVal;
4255 QMetaObject::invokeMethod(this, "showPrompt", Qt::BlockingQueuedConnection,
@@ -69,6 +82,71 @@ QScriptValue WindowScriptingInterface::showConfirm(const QString& message) { · 26 unmodified lines
6982 return QScriptValue(response == QMessageBox::Yes);
7083 }
7184
85+/// Display a prompt with an edit box
86+/// \param const QString& title title to display
87+/// \param const QString& defaultText default text in the text box
88+/// \return QScriptValue string text value in text box if the dialog was accepted, `null` otherwise.
89+QScriptValue WindowScriptingInterface::showArrayEdit(const QString& title, QScriptValue array) {
90+ if (array.isArray() && array.property("length").toInt32() > 0) {
91+ QDialog* editDialog = new QDialog(Application::getInstance()->getWindow());
92+ editDialog->setWindowTitle(title);
93+
94+ QVBoxLayout* layout = new QVBoxLayout();
95+ editDialog->setLayout(layout);
96+
97+ QScrollArea* area = new QScrollArea();
98+ layout->addWidget(area);
99+ area->setWidgetResizable(true);
100+ QWidget* container = new QWidget();
101+ QFormLayout* arrayLayout = new QFormLayout();
102+ container->setLayout(arrayLayout);
103+ container->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Preferred);
104+ area->setWidget(container);
105+
106+ QVector<QLineEdit*> edits;
107+ for (int i = 0; i < array.property("length").toInt32(); ++i) {
108+ QScriptValue item = array.property(i);
109+ edits.push_back(new QLineEdit(item.property("value").toString()));
110+ arrayLayout->addRow(item.property("label").toString(),
111+ edits.back());
112+ }
113+ QDialogButtonBox* buttons = new QDialogButtonBox(QDialogButtonBox::Ok);
114+ connect(buttons, SIGNAL(accepted()), editDialog, SLOT(accept()));
115+ layout->addWidget(buttons);
116+
117+ editDialog->setMinimumSize(600, 600);
118+
119+ if (editDialog->exec() == QDialog::Accepted) {
120+ for (int i = 0; i < array.property("length").toInt32(); ++i) {
121+ QScriptValue item = array.property(i);
122+ QScriptValue value = item.property("value");
123+ bool ok = true;
124+ if (value.isNumber()) {
125+ value = edits.at(i)->text().toDouble(&ok);
126+ } else if (value.isString()) {
127+ value = edits.at(i)->text();
128+ } else if (value.isBool()) {
129+ if (edits.at(i)->text() == "true") {
130+ value = true;
131+ } else if (edits.at(i)->text() == "false") {
132+ value = false;
133+ } else {
134+ ok = false;
135+ }
136+ }
137+ if (ok) {
138+ item.setProperty("value", value);
139+ array.setProperty(i, item);
140+ }
141+ }
142+ }
143+
144+ delete editDialog;
145+ }
146+
147+ return array;
148+}
149+
72150 /// Display a prompt with a text box
73151 /// \param const QString& message message to display
74152 /// \param const QString& defaultText default text in the text box
@@ -79,11 +157,11 @@ QScriptValue WindowScriptingInterface::showPrompt(const QString& message, const · 4 unmodified lines
79157 promptDialog.setLabelText(message);
80158 promptDialog.setTextValue(defaultText);
81159 promptDialog.setFixedSize(600, 200);
82−
160+
83161 if (promptDialog.exec() == QDialog::Accepted) {
84162 return QScriptValue(promptDialog.textValue());
85163 }
86−
164+
87165 return QScriptValue::NullValue;
88166 }
89167