History

Moving to QML based dialogs

Bradley Austin Davis committed 10 years ago

Commit 0a990861 parent c1d45b04 files · +38 −160Browse files

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

Unified · Split

interface/src/scripting/WindowScriptingInterface.cpp+29−138
@@ -9,20 +9,15 @@ · 8 unmodified lines
99 // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
1010 //
1111
12−#include <QDir>
13−#include <QDialogButtonBox>
14−#include <QFileDialog>
15−#include <QInputDialog>
12+#include <QtCore/QDir>
1613 #include <QMessageBox>
1714 #include <QScriptValue>
18−#include <QScrollArea>
1915
2016 #include "Application.h"
2117 #include "DomainHandler.h"
2218 #include "MainWindow.h"
2319 #include "Menu.h"
2420 #include "OffscreenUi.h"
25−#include "ui/ModelsBrowser.h"
2621 #include "WebWindowClass.h"
2722
2823 #include "WindowScriptingInterface.h"
@@ -81,131 +76,31 @@ QScriptValue WindowScriptingInterface::getCursorPositionY() { · 52 unmodified lines
8176 return QCursor::pos().y();
8277 }
8378
84−QScriptValue WindowScriptingInterface::alert(const QString& message) {
85− QScriptValue retVal;
86− QMetaObject::invokeMethod(this, "showAlert", Qt::BlockingQueuedConnection, Q_RETURN_ARG(QScriptValue, retVal), Q_ARG(const QString&, message));
87− return retVal;
88−}
89−
90−QScriptValue WindowScriptingInterface::confirm(const QString& message) {
91− QScriptValue retVal;
92− QMetaObject::invokeMethod(this, "showConfirm", Qt::BlockingQueuedConnection,
93− Q_RETURN_ARG(QScriptValue, retVal), Q_ARG(const QString&, message));
94− return retVal;
95−}
96−
97−QScriptValue WindowScriptingInterface::prompt(const QString& message, const QString& defaultText) {
98− QScriptValue retVal;
99− QMetaObject::invokeMethod(this, "showPrompt", Qt::BlockingQueuedConnection,
100− Q_RETURN_ARG(QScriptValue, retVal),
101− Q_ARG(const QString&, message), Q_ARG(const QString&, defaultText));
102− return retVal;
103−}
104−
105−QScriptValue WindowScriptingInterface::browse(const QString& title, const QString& directory, const QString& nameFilter) {
106− QScriptValue retVal;
107− QMetaObject::invokeMethod(this, "showBrowse", Qt::BlockingQueuedConnection,
108− Q_RETURN_ARG(QScriptValue, retVal),
109− Q_ARG(const QString&, title), Q_ARG(const QString&, directory), Q_ARG(const QString&, nameFilter));
110− return retVal;
111−}
112−
113−QScriptValue WindowScriptingInterface::save(const QString& title, const QString& directory, const QString& nameFilter) {
114− QScriptValue retVal;
115− QMetaObject::invokeMethod(this, "showBrowse", Qt::BlockingQueuedConnection,
116− Q_RETURN_ARG(QScriptValue, retVal),
117− Q_ARG(const QString&, title), Q_ARG(const QString&, directory), Q_ARG(const QString&, nameFilter),
118− Q_ARG(QFileDialog::AcceptMode, QFileDialog::AcceptSave));
119− return retVal;
120−}
121−
122−QScriptValue WindowScriptingInterface::s3Browse(const QString& nameFilter) {
123− QScriptValue retVal;
124− QMetaObject::invokeMethod(this, "showS3Browse", Qt::BlockingQueuedConnection,
125− Q_RETURN_ARG(QScriptValue, retVal),
126− Q_ARG(const QString&, nameFilter));
127− return retVal;
128−}
129−
130−
13179 /// Display an alert box
13280 /// \param const QString& message message to display
13381 /// \return QScriptValue::UndefinedValue
134−QScriptValue WindowScriptingInterface::showAlert(const QString& message) {
82+void WindowScriptingInterface::alert(const QString& message) {
13583 OffscreenUi::warning("", message);
136− return QScriptValue::UndefinedValue;
13784 }
13885
13986 /// Display a confirmation box with the options 'Yes' and 'No'
14087 /// \param const QString& message message to display
14188 /// \return QScriptValue `true` if 'Yes' was clicked, `false` otherwise
142−QScriptValue WindowScriptingInterface::showConfirm(const QString& message) {
143− bool confirm = false;
144− if (QMessageBox::Yes == OffscreenUi::question("", message)) {
145− confirm = true;
146− }
147− return QScriptValue(confirm);
148−}
149−
150−void WindowScriptingInterface::chooseDirectory() {
151− QPushButton* button = reinterpret_cast<QPushButton*>(sender());
152−
153− QString title = button->property("title").toString();
154− QString path = button->property("path").toString();
155− QRegExp displayAs = button->property("displayAs").toRegExp();
156− QRegExp validateAs = button->property("validateAs").toRegExp();
157− QString errorMessage = button->property("errorMessage").toString();
158−
159− QString directory = QFileDialog::getExistingDirectory(button, title, path);
160− if (directory.isEmpty()) {
161− return;
162− }
163−
164− if (!validateAs.exactMatch(directory)) {
165− OffscreenUi::warning(NULL, "Invalid Directory", errorMessage);
166− return;
167− }
168−
169− button->setProperty("path", directory);
170−
171− displayAs.indexIn(directory);
172− QString buttonText = displayAs.cap(1) != "" ? displayAs.cap(1) : ".";
173− button->setText(buttonText);
174−}
175−
176−void WindowScriptingInterface::inlineButtonClicked() {
177− QPushButton* button = reinterpret_cast<QPushButton*>(sender());
178− QString name = button->property("name").toString();
179− emit inlineButtonClicked(name);
180−}
181−
182−QString WindowScriptingInterface::jsRegExp2QtRegExp(const QString& string) {
183− // Converts string representation of RegExp from JavaScript format to Qt format.
184− return string.mid(1, string.length() - 2) // No enclosing slashes.
185− .replace("\\/", "/"); // No escaping of forward slash.
89+QScriptValue WindowScriptingInterface::confirm(const QString& message) {
90+ return QScriptValue((QMessageBox::Yes == OffscreenUi::question("", message)));
18691 }
18792
18893 /// Display a prompt with a text box
18994 /// \param const QString& message message to display
19095 /// \param const QString& defaultText default text in the text box
19196 /// \return QScriptValue string text value in text box if the dialog was accepted, `null` otherwise.
192−QScriptValue WindowScriptingInterface::showPrompt(const QString& message, const QString& defaultText) {
97+QScriptValue WindowScriptingInterface::prompt(const QString& message, const QString& defaultText) {
19398 bool ok = false;
19499 QString result = OffscreenUi::getText(nullptr, "", message, QLineEdit::Normal, defaultText, &ok);
195− if (!ok) {
196− return QScriptValue::NullValue;
197− }
198− return QScriptValue(result);
100+ return ok ? QScriptValue(result) : QScriptValue::NullValue;
199101 }
200102
201−/// Display a file dialog. If `directory` is an invalid file or directory the browser will start at the current
202−/// working directory.
203−/// \param const QString& title title of the window
204−/// \param const QString& directory directory to start the file browser at
205−/// \param const QString& nameFilter filter to filter filenames by - see `QFileDialog`
206−/// \return QScriptValue file path as a string if one was selected, otherwise `QScriptValue::NullValue`
207−QScriptValue WindowScriptingInterface::showBrowse(const QString& title, const QString& directory, const QString& nameFilter,
208− QFileDialog::AcceptMode acceptMode) {
103+QString fixupPathForMac(const QString& directory) {
209104 // On OS X `directory` does not work as expected unless a file is included in the path, so we append a bogus
210105 // filename if the directory is valid.
211106 QString path = "";
@@ -214,35 +109,31 @@ QScriptValue WindowScriptingInterface::showBrowse(const QString& title, const QS · 2 unmodified lines
214109 fileInfo.setFile(directory, "__HIFI_INVALID_FILE__");
215110 path = fileInfo.filePath();
216111 }
217−
218− QFileDialog fileDialog(qApp->getWindow(), title, path, nameFilter);
219− fileDialog.setAcceptMode(acceptMode);
220− QUrl fileUrl(directory);
221− if (acceptMode == QFileDialog::AcceptSave) {
222− // TODO -- Setting this breaks the dialog on Linux. Does it help something on other platforms?
223− // fileDialog.setFileMode(QFileDialog::Directory);
224− fileDialog.selectFile(fileUrl.fileName());
225− }
226− if (fileDialog.exec()) {
227− return QScriptValue(fileDialog.selectedFiles().first());
228− }
229− return QScriptValue::NullValue;
112+ return path;
230113 }
231114
232−/// Display a browse window for S3 models
233−/// \param const QString& nameFilter filter to filter filenames
115+/// Display an open file dialog. If `directory` is an invalid file or directory the browser will start at the current
116+/// working directory.
117+/// \param const QString& title title of the window
118+/// \param const QString& directory directory to start the file browser at
119+/// \param const QString& nameFilter filter to filter filenames by - see `QFileDialog`
234120 /// \return QScriptValue file path as a string if one was selected, otherwise `QScriptValue::NullValue`
235−QScriptValue WindowScriptingInterface::showS3Browse(const QString& nameFilter) {
236− ModelsBrowser browser(FSTReader::ENTITY_MODEL);
237− if (nameFilter != "") {
238− browser.setNameFilter(nameFilter);
239− }
240− QEventLoop loop;
241− connect(&browser, &ModelsBrowser::selected, &loop, &QEventLoop::quit);
242− QMetaObject::invokeMethod(&browser, "browse", Qt::QueuedConnection);
243− loop.exec();
244−
245− return browser.getSelectedFile();
121+QScriptValue WindowScriptingInterface::browse(const QString& title, const QString& directory, const QString& nameFilter) {
122+ QString path = fixupPathForMac(directory);
123+ QString result = OffscreenUi::getOpenFileName(nullptr, title, path, nameFilter);
124+ return result.isEmpty() ? QScriptValue::NullValue : QScriptValue(result);
125+}
126+
127+/// Display a save file dialog. If `directory` is an invalid file or directory the browser will start at the current
128+/// working directory.
129+/// \param const QString& title title of the window
130+/// \param const QString& directory directory to start the file browser at
131+/// \param const QString& nameFilter filter to filter filenames by - see `QFileDialog`
132+/// \return QScriptValue file path as a string if one was selected, otherwise `QScriptValue::NullValue`
133+QScriptValue WindowScriptingInterface::save(const QString& title, const QString& directory, const QString& nameFilter) {
134+ QString path = fixupPathForMac(directory);
135+ QString result = OffscreenUi::getSaveFileName(nullptr, title, path, nameFilter);
136+ return result.isEmpty() ? QScriptValue::NullValue : QScriptValue(result);
246137 }
247138
248139 int WindowScriptingInterface::getInnerWidth() {