From 8e0141b8e9394bfb487b6cf61f9c44423ff00cd5 Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Thu, 19 Mar 2015 08:48:13 -0700 Subject: [PATCH 1/7] first cut at fst drag/drop support --- interface/src/Application.cpp | 57 ++++++++++++++++++++++++++++++++ interface/src/Application.h | 2 ++ interface/src/GLCanvas.cpp | 3 +- interface/src/ui/DataWebPage.cpp | 5 ++- 4 files changed, 65 insertions(+), 2 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 147162384b..9c0f30c413 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -893,6 +893,8 @@ bool Application::event(QEvent* event) { emit svoImportRequested(url.url()); } else if (url.path().toLower().endsWith(JS_EXTENSION)) { askToLoadScript(url.toString()); + //} else if (url.path().toLower().endsWith(FST_EXTENSION)) { + // askToSetAvatarUrl(url.toString()); } } return false; @@ -1487,6 +1489,9 @@ void Application::dropEvent(QDropEvent *event) { } else if (lower.endsWith(JS_EXTENSION)) { askToLoadScript(url.url()); atLeastOneFileAccepted = true; + } else if (lower.endsWith(FST_EXTENSION)) { + askToSetAvatarUrl(url.url()); + atLeastOneFileAccepted = true; } } @@ -3596,6 +3601,58 @@ void Application::registerScriptEngineWithApplicationServices(ScriptEngine* scri workerThread->start(); } +void Application::askToSetAvatarUrl(const QString& url) { + QUrl realUrl(url); + if (realUrl.isLocalFile()) { + QString message = "You can not use local files for avatar components."; + + QMessageBox msgBox; + msgBox.setText(message); + msgBox.setStandardButtons(QMessageBox::Ok); + msgBox.setIcon(QMessageBox::Warning); + msgBox.exec(); + return; + } + + QString message = "Would you like to use this model for part of avatar:\n" + url; + QMessageBox msgBox; + + msgBox.setIcon(QMessageBox::Question); + msgBox.setWindowTitle("Set Avatar"); + msgBox.setText(message); + + QPushButton* headButton = msgBox.addButton(tr("Head"), QMessageBox::ActionRole); + QPushButton* bodyButton = msgBox.addButton(tr("Body"), QMessageBox::ActionRole); + QPushButton* bodyAndHeadButton = msgBox.addButton(tr("Body + Head"), QMessageBox::ActionRole); + QPushButton* cancelButton = msgBox.addButton(QMessageBox::Cancel); + + msgBox.exec(); + + if (msgBox.clickedButton() == headButton) { + qDebug() << "Chose to use for head: " << url; + //MyAvatar* myAvatar = DependencyManager::get()->getMyAvatar(); + _myAvatar->setFaceModelURL(url); + UserActivityLogger::getInstance().changedModel("head", url); + _myAvatar->sendIdentityPacket(); + } else if (msgBox.clickedButton() == bodyButton) { + qDebug() << "Chose to use for body: " << url; + //MyAvatar* myAvatar = DependencyManager::get()->getMyAvatar(); + _myAvatar->setSkeletonModelURL(url); + UserActivityLogger::getInstance().changedModel("skeleton", url); + _myAvatar->sendIdentityPacket(); + } else if (msgBox.clickedButton() == bodyAndHeadButton) { + qDebug() << "Chose to use for body + head: " << url; + //MyAvatar* myAvatar = DependencyManager::get()->getMyAvatar(); + _myAvatar->setFaceModelURL(QString()); + _myAvatar->setSkeletonModelURL(url); + UserActivityLogger::getInstance().changedModel("skeleton", url); + _myAvatar->sendIdentityPacket(); + } else { + qDebug() << "Declined to use the avatar: " << url; + } +} + + void Application::askToLoadScript(const QString& scriptFilenameOrURL) { QMessageBox::StandardButton reply; QString message = "Would you like to run this script:\n" + scriptFilenameOrURL; diff --git a/interface/src/Application.h b/interface/src/Application.h index 49fdde5fb2..3eaaeb6f6b 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -96,6 +96,7 @@ static const float NODE_KILLED_BLUE = 0.0f; static const QString SNAPSHOT_EXTENSION = ".jpg"; static const QString SVO_EXTENSION = ".svo"; static const QString JS_EXTENSION = ".js"; +static const QString FST_EXTENSION = ".fst"; static const float BILLBOARD_FIELD_OF_VIEW = 30.0f; // degrees static const float BILLBOARD_DISTANCE = 5.56f; // meters @@ -341,6 +342,7 @@ public slots: void loadDialog(); void loadScriptURLDialog(); void toggleLogDialog(); + void askToSetAvatarUrl(const QString& url); void askToLoadScript(const QString& scriptFilenameOrURL); ScriptEngine* loadScript(const QString& scriptFilename = QString(), bool isUserLoaded = true, bool loadScriptFromEditor = false, bool activateMainWindow = false); diff --git a/interface/src/GLCanvas.cpp b/interface/src/GLCanvas.cpp index c615083335..3e39841fd4 100644 --- a/interface/src/GLCanvas.cpp +++ b/interface/src/GLCanvas.cpp @@ -171,7 +171,8 @@ void GLCanvas::dragEnterEvent(QDragEnterEvent* event) { const QMimeData* mimeData = event->mimeData(); foreach (QUrl url, mimeData->urls()) { auto lower = url.path().toLower(); - if (lower.endsWith(SNAPSHOT_EXTENSION) || lower.endsWith(SVO_EXTENSION) || lower.endsWith(JS_EXTENSION)) { + if (lower.endsWith(SNAPSHOT_EXTENSION) || lower.endsWith(SVO_EXTENSION) + || lower.endsWith(JS_EXTENSION) || lower.endsWith(FST_EXTENSION)) { event->acceptProposedAction(); break; } diff --git a/interface/src/ui/DataWebPage.cpp b/interface/src/ui/DataWebPage.cpp index c24e34fb64..2c41fad7d5 100644 --- a/interface/src/ui/DataWebPage.cpp +++ b/interface/src/ui/DataWebPage.cpp @@ -32,7 +32,6 @@ void DataWebPage::javaScriptConsoleMessage(const QString& message, int lineNumbe } bool DataWebPage::acceptNavigationRequest(QWebFrame* frame, const QNetworkRequest& request, QWebPage::NavigationType type) { - if (!request.url().toString().startsWith(HIFI_URL_SCHEME)) { if (request.url().path().toLower().endsWith(SVO_EXTENSION)) { Application::getInstance()->importSVOFromURL(request.url()); @@ -40,6 +39,10 @@ bool DataWebPage::acceptNavigationRequest(QWebFrame* frame, const QNetworkReques } else if (request.url().path().toLower().endsWith(JS_EXTENSION)) { Application::getInstance()->askToLoadScript(request.url().toString()); return false; + } else if (request.url().path().toLower().endsWith(FST_EXTENSION)) { + + Application::getInstance()->askToSetAvatarUrl(request.url().toString()); + return false; } return true; } else { From 3c41ecd09137951d19339e6dd65b83ff34b48e41 Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Thu, 19 Mar 2015 11:29:41 -0700 Subject: [PATCH 2/7] cleanup accepted files implementation --- interface/src/Application.cpp | 99 ++++++++++++++++++++++++-------- interface/src/Application.h | 14 ++++- interface/src/GLCanvas.cpp | 4 +- interface/src/ui/DataWebPage.cpp | 15 ++--- 4 files changed, 93 insertions(+), 39 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 9c0f30c413..01f4315142 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -873,8 +873,10 @@ void Application::controlledBroadcastToNodes(const QByteArray& packet, const Nod } } -void Application::importSVOFromURL(QUrl url) { +bool Application::importSVOFromURL(const QString& urlString) { + QUrl url(urlString); emit svoImportRequested(url.url()); + return true; // assume it's accepted } bool Application::event(QEvent* event) { @@ -887,14 +889,9 @@ bool Application::event(QEvent* event) { QUrl url = fileEvent->url(); if (!url.isEmpty()) { - if (url.scheme() == HIFI_URL_SCHEME) { - DependencyManager::get()->handleLookupString(fileEvent->url().toString()); - } else if (url.path().toLower().endsWith(SVO_EXTENSION)) { - emit svoImportRequested(url.url()); - } else if (url.path().toLower().endsWith(JS_EXTENSION)) { - askToLoadScript(url.toString()); - //} else if (url.path().toLower().endsWith(FST_EXTENSION)) { - // askToSetAvatarUrl(url.toString()); + QString urlString = url.toString(); + if (canAcceptURL(urlString)) { + return acceptURL(urlString); } } return false; @@ -1482,17 +1479,16 @@ void Application::dropEvent(QDropEvent *event) { msgBox.setStandardButtons(QMessageBox::Ok); msgBox.exec(); } - } else if (lower.endsWith(SVO_EXTENSION)) { - emit svoImportRequested(url.url()); - event->acceptProposedAction(); - atLeastOneFileAccepted = true; - } else if (lower.endsWith(JS_EXTENSION)) { - askToLoadScript(url.url()); - atLeastOneFileAccepted = true; - } else if (lower.endsWith(FST_EXTENSION)) { - askToSetAvatarUrl(url.url()); - atLeastOneFileAccepted = true; - } + } else { + QString urlString = url.toString(); + if (canAcceptURL(urlString)) { + if (acceptURL(urlString)) { + atLeastOneFileAccepted = true; + break; + } + } + + } } if (atLeastOneFileAccepted) { @@ -3601,7 +3597,61 @@ void Application::registerScriptEngineWithApplicationServices(ScriptEngine* scri workerThread->start(); } -void Application::askToSetAvatarUrl(const QString& url) { +void Application::initializeAcceptedFiles() { + if (_acceptedExtensions.size() == 0) { + qDebug() << "Application::initializeAcceptedFiles()"; + _acceptedExtensions[SVO_EXTENSION] = &Application::importSVOFromURL; + _acceptedExtensions[JS_EXTENSION] = &Application::askToLoadScript; + _acceptedExtensions[FST_EXTENSION] = &Application::askToSetAvatarUrl; + } +} + +bool Application::canAcceptURL(const QString& urlString) { + qDebug() << "Application::canAcceptURL() urlString:" << urlString; + initializeAcceptedFiles(); + + QUrl url(urlString); + if (urlString.startsWith(HIFI_URL_SCHEME)) { + return true; + } + QHashIterator i(_acceptedExtensions); + QString lowerPath = url.path().toLower(); + while (i.hasNext()) { + i.next(); + if (lowerPath.endsWith(i.key())) { + return true; + } + } + return false; +} + +bool Application::acceptURL(const QString& urlString) { + qDebug() << "Application::acceptURL() urlString:" << urlString; + initializeAcceptedFiles(); + + if (urlString.startsWith(HIFI_URL_SCHEME)) { + // this is a hifi URL - have the AddressManager handle it + QMetaObject::invokeMethod(DependencyManager::get().data(), "handleLookupString", + Qt::AutoConnection, Q_ARG(const QString&, urlString)); + return true; + } else { + QUrl url(urlString); + QHashIterator i(_acceptedExtensions); + QString lowerPath = url.path().toLower(); + while (i.hasNext()) { + i.next(); + if (lowerPath.endsWith(i.key())) { + AcceptURLMethod method = i.value(); + (this->*method)(urlString); + return true; + } + } + } + return false; +} + + +bool Application::askToSetAvatarUrl(const QString& url) { QUrl realUrl(url); if (realUrl.isLocalFile()) { QString message = "You can not use local files for avatar components."; @@ -3611,7 +3661,7 @@ void Application::askToSetAvatarUrl(const QString& url) { msgBox.setStandardButtons(QMessageBox::Ok); msgBox.setIcon(QMessageBox::Warning); msgBox.exec(); - return; + return false; } QString message = "Would you like to use this model for part of avatar:\n" + url; @@ -3624,7 +3674,7 @@ void Application::askToSetAvatarUrl(const QString& url) { QPushButton* headButton = msgBox.addButton(tr("Head"), QMessageBox::ActionRole); QPushButton* bodyButton = msgBox.addButton(tr("Body"), QMessageBox::ActionRole); QPushButton* bodyAndHeadButton = msgBox.addButton(tr("Body + Head"), QMessageBox::ActionRole); - QPushButton* cancelButton = msgBox.addButton(QMessageBox::Cancel); + msgBox.addButton(QMessageBox::Cancel); msgBox.exec(); @@ -3650,10 +3700,11 @@ void Application::askToSetAvatarUrl(const QString& url) { } else { qDebug() << "Declined to use the avatar: " << url; } + return true; } -void Application::askToLoadScript(const QString& scriptFilenameOrURL) { +bool Application::askToLoadScript(const QString& scriptFilenameOrURL) { QMessageBox::StandardButton reply; QString message = "Would you like to run this script:\n" + scriptFilenameOrURL; reply = QMessageBox::question(getWindow(), "Run Script", message, QMessageBox::Yes|QMessageBox::No); diff --git a/interface/src/Application.h b/interface/src/Application.h index 3eaaeb6f6b..6bfdc7ad3a 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -128,6 +128,8 @@ class Application; #endif #define qApp (static_cast(QCoreApplication::instance())) +typedef bool (Application::* AcceptURLMethod)(const QString &); + class Application : public QApplication, public AbstractViewStateInterface, AbstractScriptingServicesInterface { Q_OBJECT @@ -222,7 +224,7 @@ public: float getFieldOfView() { return _fieldOfView.get(); } void setFieldOfView(float fov) { _fieldOfView.set(fov); } - void importSVOFromURL(QUrl url); + bool importSVOFromURL(const QString& urlString); NodeToOctreeSceneStats* getOcteeSceneStats() { return &_octreeServerSceneStats; } void lockOctreeSceneStats() { _octreeSceneStatsLock.lockForRead(); } @@ -307,6 +309,10 @@ public: QString getScriptsLocation(); void setScriptsLocation(const QString& scriptsLocation); + + void initializeAcceptedFiles(); + bool canAcceptURL(const QString& url); + bool acceptURL(const QString& url); signals: @@ -342,8 +348,8 @@ public slots: void loadDialog(); void loadScriptURLDialog(); void toggleLogDialog(); - void askToSetAvatarUrl(const QString& url); - void askToLoadScript(const QString& scriptFilenameOrURL); + bool askToSetAvatarUrl(const QString& url); + bool askToLoadScript(const QString& scriptFilenameOrURL); ScriptEngine* loadScript(const QString& scriptFilename = QString(), bool isUserLoaded = true, bool loadScriptFromEditor = false, bool activateMainWindow = false); void scriptFinished(const QString& scriptName); @@ -597,6 +603,8 @@ private: QWidget* _fullscreenMenuWidget = new QWidget(); int _menuBarHeight; + + QHash _acceptedExtensions; }; #endif // hifi_Application_h diff --git a/interface/src/GLCanvas.cpp b/interface/src/GLCanvas.cpp index 3e39841fd4..304740e146 100644 --- a/interface/src/GLCanvas.cpp +++ b/interface/src/GLCanvas.cpp @@ -171,8 +171,8 @@ void GLCanvas::dragEnterEvent(QDragEnterEvent* event) { const QMimeData* mimeData = event->mimeData(); foreach (QUrl url, mimeData->urls()) { auto lower = url.path().toLower(); - if (lower.endsWith(SNAPSHOT_EXTENSION) || lower.endsWith(SVO_EXTENSION) - || lower.endsWith(JS_EXTENSION) || lower.endsWith(FST_EXTENSION)) { + auto urlString = url.toString(); + if (lower.endsWith(SNAPSHOT_EXTENSION) || Application::getInstance()->canAcceptURL(urlString)) { event->acceptProposedAction(); break; } diff --git a/interface/src/ui/DataWebPage.cpp b/interface/src/ui/DataWebPage.cpp index 2c41fad7d5..41dd1149cc 100644 --- a/interface/src/ui/DataWebPage.cpp +++ b/interface/src/ui/DataWebPage.cpp @@ -33,16 +33,11 @@ void DataWebPage::javaScriptConsoleMessage(const QString& message, int lineNumbe bool DataWebPage::acceptNavigationRequest(QWebFrame* frame, const QNetworkRequest& request, QWebPage::NavigationType type) { if (!request.url().toString().startsWith(HIFI_URL_SCHEME)) { - if (request.url().path().toLower().endsWith(SVO_EXTENSION)) { - Application::getInstance()->importSVOFromURL(request.url()); - return false; - } else if (request.url().path().toLower().endsWith(JS_EXTENSION)) { - Application::getInstance()->askToLoadScript(request.url().toString()); - return false; - } else if (request.url().path().toLower().endsWith(FST_EXTENSION)) { - - Application::getInstance()->askToSetAvatarUrl(request.url().toString()); - return false; + QString urlString = request.url().toString(); + if (Application::getInstance()->canAcceptURL(urlString)) { + if (Application::getInstance()->acceptURL(urlString)) { + return false; // we handled it, so QWebPage doesn't need to handle it + } } return true; } else { From e6cefa946c2619f44eefeaa4b79542e114a4b997 Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Thu, 19 Mar 2015 11:41:03 -0700 Subject: [PATCH 3/7] more DRYing of code --- interface/src/ui/DataWebPage.cpp | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/interface/src/ui/DataWebPage.cpp b/interface/src/ui/DataWebPage.cpp index 41dd1149cc..ab27509d28 100644 --- a/interface/src/ui/DataWebPage.cpp +++ b/interface/src/ui/DataWebPage.cpp @@ -32,20 +32,13 @@ void DataWebPage::javaScriptConsoleMessage(const QString& message, int lineNumbe } bool DataWebPage::acceptNavigationRequest(QWebFrame* frame, const QNetworkRequest& request, QWebPage::NavigationType type) { - if (!request.url().toString().startsWith(HIFI_URL_SCHEME)) { - QString urlString = request.url().toString(); - if (Application::getInstance()->canAcceptURL(urlString)) { - if (Application::getInstance()->acceptURL(urlString)) { - return false; // we handled it, so QWebPage doesn't need to handle it - } + QString urlString = request.url().toString(); + if (Application::getInstance()->canAcceptURL(urlString)) { + if (Application::getInstance()->acceptURL(urlString)) { + return false; // we handled it, so QWebPage doesn't need to handle it } - return true; - } else { - // this is a hifi URL - have the AddressManager handle it - QMetaObject::invokeMethod(DependencyManager::get().data(), "handleLookupString", - Qt::AutoConnection, Q_ARG(const QString&, request.url().toString())); - return false; } + return true; } QString DataWebPage::userAgentForUrl(const QUrl& url) const { From 5814a141522fc5dcec7d6d6c7cebde560d632617 Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Thu, 19 Mar 2015 11:42:00 -0700 Subject: [PATCH 4/7] removed dead code --- interface/src/Application.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 01f4315142..c7104e065d 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -3680,19 +3680,16 @@ bool Application::askToSetAvatarUrl(const QString& url) { if (msgBox.clickedButton() == headButton) { qDebug() << "Chose to use for head: " << url; - //MyAvatar* myAvatar = DependencyManager::get()->getMyAvatar(); _myAvatar->setFaceModelURL(url); UserActivityLogger::getInstance().changedModel("head", url); _myAvatar->sendIdentityPacket(); } else if (msgBox.clickedButton() == bodyButton) { qDebug() << "Chose to use for body: " << url; - //MyAvatar* myAvatar = DependencyManager::get()->getMyAvatar(); _myAvatar->setSkeletonModelURL(url); UserActivityLogger::getInstance().changedModel("skeleton", url); _myAvatar->sendIdentityPacket(); } else if (msgBox.clickedButton() == bodyAndHeadButton) { qDebug() << "Chose to use for body + head: " << url; - //MyAvatar* myAvatar = DependencyManager::get()->getMyAvatar(); _myAvatar->setFaceModelURL(QString()); _myAvatar->setSkeletonModelURL(url); UserActivityLogger::getInstance().changedModel("skeleton", url); From c5314aceac52a4bd3fa70c745243e94b42629b69 Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Thu, 19 Mar 2015 11:57:57 -0700 Subject: [PATCH 5/7] more DRYing up of code --- interface/src/Application.cpp | 61 +++++++++++++++++------------------ interface/src/Application.h | 1 + interface/src/GLCanvas.cpp | 3 +- 3 files changed, 31 insertions(+), 34 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index c7104e065d..b1528c0ef4 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1452,43 +1452,16 @@ void Application::wheelEvent(QWheelEvent* event) { } void Application::dropEvent(QDropEvent *event) { - QString snapshotPath; const QMimeData *mimeData = event->mimeData(); bool atLeastOneFileAccepted = false; foreach (QUrl url, mimeData->urls()) { - auto lower = url.path().toLower(); - if (lower.endsWith(SNAPSHOT_EXTENSION)) { - snapshotPath = url.toLocalFile(); - - - SnapshotMetaData* snapshotData = Snapshot::parseSnapshotData(snapshotPath); - if (snapshotData) { - if (!snapshotData->getDomain().isEmpty()) { - DependencyManager::get()->getDomainHandler().setHostnameAndPort(snapshotData->getDomain()); - } - - _myAvatar->setPosition(snapshotData->getLocation()); - _myAvatar->setOrientation(snapshotData->getOrientation()); + QString urlString = url.toString(); + if (canAcceptURL(urlString)) { + if (acceptURL(urlString)) { atLeastOneFileAccepted = true; - break; // don't process further files - } else { - QMessageBox msgBox; - msgBox.setText("No location details were found in the file " - + snapshotPath + ", try dragging in an authentic Hifi snapshot."); - - msgBox.setStandardButtons(QMessageBox::Ok); - msgBox.exec(); + break; } - } else { - QString urlString = url.toString(); - if (canAcceptURL(urlString)) { - if (acceptURL(urlString)) { - atLeastOneFileAccepted = true; - break; - } - } - - } + } } if (atLeastOneFileAccepted) { @@ -1496,6 +1469,29 @@ void Application::dropEvent(QDropEvent *event) { } } +bool Application::acceptSnapshot(const QString& urlString) { + QUrl url(urlString); + QString snapshotPath = url.toLocalFile(); + + SnapshotMetaData* snapshotData = Snapshot::parseSnapshotData(snapshotPath); + if (snapshotData) { + if (!snapshotData->getDomain().isEmpty()) { + DependencyManager::get()->getDomainHandler().setHostnameAndPort(snapshotData->getDomain()); + } + + _myAvatar->setPosition(snapshotData->getLocation()); + _myAvatar->setOrientation(snapshotData->getOrientation()); + } else { + QMessageBox msgBox; + msgBox.setText("No location details were found in the file " + + snapshotPath + ", try dragging in an authentic Hifi snapshot."); + + msgBox.setStandardButtons(QMessageBox::Ok); + msgBox.exec(); + } + return true; +} + void Application::sendPingPackets() { QByteArray pingPacket = DependencyManager::get()->constructPingPacket(); controlledBroadcastToNodes(pingPacket, NodeSet() @@ -3600,6 +3596,7 @@ void Application::registerScriptEngineWithApplicationServices(ScriptEngine* scri void Application::initializeAcceptedFiles() { if (_acceptedExtensions.size() == 0) { qDebug() << "Application::initializeAcceptedFiles()"; + _acceptedExtensions[SNAPSHOT_EXTENSION] = &Application::acceptSnapshot; _acceptedExtensions[SVO_EXTENSION] = &Application::importSVOFromURL; _acceptedExtensions[JS_EXTENSION] = &Application::askToLoadScript; _acceptedExtensions[FST_EXTENSION] = &Application::askToSetAvatarUrl; diff --git a/interface/src/Application.h b/interface/src/Application.h index 6bfdc7ad3a..4038b21739 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -348,6 +348,7 @@ public slots: void loadDialog(); void loadScriptURLDialog(); void toggleLogDialog(); + bool acceptSnapshot(const QString& urlString); bool askToSetAvatarUrl(const QString& url); bool askToLoadScript(const QString& scriptFilenameOrURL); ScriptEngine* loadScript(const QString& scriptFilename = QString(), bool isUserLoaded = true, diff --git a/interface/src/GLCanvas.cpp b/interface/src/GLCanvas.cpp index 304740e146..b3c1db7b24 100644 --- a/interface/src/GLCanvas.cpp +++ b/interface/src/GLCanvas.cpp @@ -170,9 +170,8 @@ void GLCanvas::wheelEvent(QWheelEvent* event) { void GLCanvas::dragEnterEvent(QDragEnterEvent* event) { const QMimeData* mimeData = event->mimeData(); foreach (QUrl url, mimeData->urls()) { - auto lower = url.path().toLower(); auto urlString = url.toString(); - if (lower.endsWith(SNAPSHOT_EXTENSION) || Application::getInstance()->canAcceptURL(urlString)) { + if (Application::getInstance()->canAcceptURL(urlString)) { event->acceptProposedAction(); break; } From 26670f9e41de4c2ce197d4b4997ccb0e97b2f991 Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Thu, 19 Mar 2015 12:15:12 -0700 Subject: [PATCH 6/7] remove unneeded debug --- interface/src/Application.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index b1528c0ef4..ee16d11579 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -3595,7 +3595,6 @@ void Application::registerScriptEngineWithApplicationServices(ScriptEngine* scri void Application::initializeAcceptedFiles() { if (_acceptedExtensions.size() == 0) { - qDebug() << "Application::initializeAcceptedFiles()"; _acceptedExtensions[SNAPSHOT_EXTENSION] = &Application::acceptSnapshot; _acceptedExtensions[SVO_EXTENSION] = &Application::importSVOFromURL; _acceptedExtensions[JS_EXTENSION] = &Application::askToLoadScript; @@ -3604,7 +3603,6 @@ void Application::initializeAcceptedFiles() { } bool Application::canAcceptURL(const QString& urlString) { - qDebug() << "Application::canAcceptURL() urlString:" << urlString; initializeAcceptedFiles(); QUrl url(urlString); @@ -3623,7 +3621,6 @@ bool Application::canAcceptURL(const QString& urlString) { } bool Application::acceptURL(const QString& urlString) { - qDebug() << "Application::acceptURL() urlString:" << urlString; initializeAcceptedFiles(); if (urlString.startsWith(HIFI_URL_SCHEME)) { From 24132968fe0d5692d7ed710d6288fea2f13970db Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Thu, 19 Mar 2015 12:41:44 -0700 Subject: [PATCH 7/7] oops --- interface/src/Application.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index ee16d11579..a3cf63ea74 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -3706,6 +3706,7 @@ bool Application::askToLoadScript(const QString& scriptFilenameOrURL) { } else { qDebug() << "Declined to run the script: " << scriptFilenameOrURL; } + return true; } ScriptEngine* Application::loadScript(const QString& scriptFilename, bool isUserLoaded,