History

Merge branch 'master' of git://github.com/highfidelity/hifi into 19783

Ryan Huffman committed 12 years ago

Commit d777e4b2 parents ade1903 f5dbc54238 files · +12133 −3304Browse files

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

Unified · Split

interface/src/scripting/WindowScriptingInterface.cpp+108−3
@@ -10,12 +10,15 @@ · 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"
21+#include "ui/ModelsBrowser.h"
1922
2023 #include "WindowScriptingInterface.h"
2124
@@ -24,6 +27,9 @@ WindowScriptingInterface* WindowScriptingInterface::getInstance() { · 2 unmodified lines
2427 return &sharedInstance;
2528 }
2629
30+WindowScriptingInterface::WindowScriptingInterface() {
31+}
32+
2733 QScriptValue WindowScriptingInterface::alert(const QString& message) {
2834 QScriptValue retVal;
2935 QMetaObject::invokeMethod(this, "showAlert", Qt::BlockingQueuedConnection, Q_RETURN_ARG(QScriptValue, retVal), Q_ARG(const QString&, message));
@@ -37,6 +43,14 @@ QScriptValue WindowScriptingInterface::confirm(const QString& message) { · 7 unmodified lines
3743 return retVal;
3844 }
3945
46+QScriptValue WindowScriptingInterface::form(const QString& title, QScriptValue form) {
47+ QScriptValue retVal;
48+ QMetaObject::invokeMethod(this, "showForm", Qt::BlockingQueuedConnection,
49+ Q_RETURN_ARG(QScriptValue, retVal),
50+ Q_ARG(const QString&, title), Q_ARG(QScriptValue, form));
51+ return retVal;
52+}
53+
4054 QScriptValue WindowScriptingInterface::prompt(const QString& message, const QString& defaultText) {
4155 QScriptValue retVal;
4256 QMetaObject::invokeMethod(this, "showPrompt", Qt::BlockingQueuedConnection,
@@ -62,6 +76,14 @@ QScriptValue WindowScriptingInterface::save(const QString& title, const QString& · 19 unmodified lines
6276 return retVal;
6377 }
6478
79+QScriptValue WindowScriptingInterface::s3Browse(const QString& nameFilter) {
80+ QScriptValue retVal;
81+ QMetaObject::invokeMethod(this, "showS3Browse", Qt::BlockingQueuedConnection,
82+ Q_RETURN_ARG(QScriptValue, retVal),
83+ Q_ARG(const QString&, nameFilter));
84+ return retVal;
85+}
86+
6587 /// Display an alert box
6688 /// \param const QString& message message to display
6789 /// \return QScriptValue::UndefinedValue
@@ -78,6 +100,73 @@ QScriptValue WindowScriptingInterface::showConfirm(const QString& message) { · 10 unmodified lines
78100 return QScriptValue(response == QMessageBox::Yes);
79101 }
80102
103+/// Display a form layout with an edit box
104+/// \param const QString& title title to display
105+/// \param const QScriptValue form to display (array containing labels and values)
106+/// \return QScriptValue result form (unchanged is dialog canceled)
107+QScriptValue WindowScriptingInterface::showForm(const QString& title, QScriptValue form) {
108+ if (form.isArray() && form.property("length").toInt32() > 0) {
109+ QDialog* editDialog = new QDialog(Application::getInstance()->getWindow());
110+ editDialog->setWindowTitle(title);
111+
112+ QVBoxLayout* layout = new QVBoxLayout();
113+ editDialog->setLayout(layout);
114+
115+ QScrollArea* area = new QScrollArea();
116+ layout->addWidget(area);
117+ area->setWidgetResizable(true);
118+ QWidget* container = new QWidget();
119+ QFormLayout* formLayout = new QFormLayout();
120+ container->setLayout(formLayout);
121+ container->sizePolicy().setHorizontalStretch(1);
122+ formLayout->setRowWrapPolicy(QFormLayout::DontWrapRows);
123+ formLayout->setFieldGrowthPolicy(QFormLayout::ExpandingFieldsGrow);
124+ formLayout->setFormAlignment(Qt::AlignHCenter | Qt::AlignTop);
125+ formLayout->setLabelAlignment(Qt::AlignLeft);
126+
127+ area->setWidget(container);
128+
129+ QVector<QLineEdit*> edits;
130+ for (int i = 0; i < form.property("length").toInt32(); ++i) {
131+ QScriptValue item = form.property(i);
132+ edits.push_back(new QLineEdit(item.property("value").toString()));
133+ formLayout->addRow(item.property("label").toString(), edits.back());
134+ }
135+ QDialogButtonBox* buttons = new QDialogButtonBox(QDialogButtonBox::Ok);
136+ connect(buttons, SIGNAL(accepted()), editDialog, SLOT(accept()));
137+ layout->addWidget(buttons);
138+
139+ if (editDialog->exec() == QDialog::Accepted) {
140+ for (int i = 0; i < form.property("length").toInt32(); ++i) {
141+ QScriptValue item = form.property(i);
142+ QScriptValue value = item.property("value");
143+ bool ok = true;
144+ if (value.isNumber()) {
145+ value = edits.at(i)->text().toDouble(&ok);
146+ } else if (value.isString()) {
147+ value = edits.at(i)->text();
148+ } else if (value.isBool()) {
149+ if (edits.at(i)->text() == "true") {
150+ value = true;
151+ } else if (edits.at(i)->text() == "false") {
152+ value = false;
153+ } else {
154+ ok = false;
155+ }
156+ }
157+ if (ok) {
158+ item.setProperty("value", value);
159+ form.setProperty(i, item);
160+ }
161+ }
162+ }
163+
164+ delete editDialog;
165+ }
166+
167+ return form;
168+}
169+
81170 /// Display a prompt with a text box
82171 /// \param const QString& message message to display
83172 /// \param const QString& defaultText default text in the text box
@@ -88,11 +177,11 @@ QScriptValue WindowScriptingInterface::showPrompt(const QString& message, const · 4 unmodified lines
88177 promptDialog.setLabelText(message);
89178 promptDialog.setTextValue(defaultText);
90179 promptDialog.setFixedSize(600, 200);
91−
180+
92181 if (promptDialog.exec() == QDialog::Accepted) {
93182 return QScriptValue(promptDialog.textValue());
94183 }
95−
184+
96185 return QScriptValue::NullValue;
97186 }
98187
@@ -113,7 +202,7 @@ QScriptValue WindowScriptingInterface::showBrowse(const QString& title, const QS · 14 unmodified lines
113202 fileInfo.setFile(directory, "__HIFI_INVALID_FILE__");
114203 path = fileInfo.filePath();
115204 }
116−
205+
117206 QFileDialog fileDialog(Application::getInstance()->getWindow(), title, path, nameFilter);
118207 // fileDialog.setFileMode(QFileDialog::ExistingFile);
119208 fileDialog.setAcceptMode(acceptMode);
@@ -131,6 +220,22 @@ QScriptValue WindowScriptingInterface::showBrowse(const QString& title, const QS · 11 unmodified lines
131220 return QScriptValue::NullValue;
132221 }
133222
223+/// Display a browse window for S3 models
224+/// \param const QString& nameFilter filter to filter filenames
225+/// \return QScriptValue file path as a string if one was selected, otherwise `QScriptValue::NullValue`
226+QScriptValue WindowScriptingInterface::showS3Browse(const QString& nameFilter) {
227+ ModelsBrowser browser(ENTITY_MODEL);
228+ if (nameFilter != "") {
229+ browser.setNameFilter(nameFilter);
230+ }
231+ QEventLoop loop;
232+ connect(&browser, &ModelsBrowser::selected, &loop, &QEventLoop::quit);
233+ QMetaObject::invokeMethod(&browser, "browse", Qt::QueuedConnection);
234+ loop.exec();
235+
236+ return browser.getSelectedFile();
237+}
238+
134239 int WindowScriptingInterface::getInnerWidth() {
135240 return Application::getInstance()->getWindow()->geometry().width();
136241 }