From 4a90ec303c7293d58981e8ee3b24c5c1bcb459f0 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Tue, 15 Mar 2016 11:22:42 -0700 Subject: [PATCH 1/3] Fix drag&drop --- interface/resources/qml/AssetServer.qml | 40 ++++++++++--------- interface/src/Application.cpp | 3 +- interface/src/Application.h | 2 + .../AssetMappingsScriptingInterface.h | 1 + 4 files changed, 26 insertions(+), 20 deletions(-) diff --git a/interface/resources/qml/AssetServer.qml b/interface/resources/qml/AssetServer.qml index d1b38eccc6..3e8942c206 100644 --- a/interface/resources/qml/AssetServer.qml +++ b/interface/resources/qml/AssetServer.qml @@ -45,6 +45,7 @@ Window { } Component.onCompleted: { + ApplicationInterface.uploadRequest.connect(uploadClicked); assetMappingsModel.errorGettingMappings.connect(handleGetMappingsError); reload(); } @@ -245,24 +246,14 @@ Window { Timer { id: timer } - function uploadClicked() { + function uploadClicked(fileUrl) { if (uploadOpen) { return; } uploadOpen = true; - var fileUrl = ""; - - var browser = desktop.fileDialog({ - selectDirectory: false, - dir: currentDirectory - }); - browser.canceled.connect(function() { - uploadOpen = false; - }); - browser.selectedFile.connect(function(url){ + function doUpload(url) { var fileUrl = fileDialogHelper.urlToPath(url); - currentDirectory = browser.dir; var path = assetProxyModel.data(treeView.selection.currentIndex, 0x100); var directory = path ? path.slice(0, path.lastIndexOf('/') + 1) : "/"; @@ -299,8 +290,24 @@ Window { uploadButton.enabled = true; uploadOpen = false; } - }) - }); + }); + } + + if (fileUrl) { + doUpload(fileUrl); + } else { + var browser = desktop.fileDialog({ + selectDirectory: false, + dir: currentDirectory + }); + browser.canceled.connect(function() { + uploadOpen = false; + }); + browser.selectedFile.connect(function(url) { + currentDirectory = browser.dir; + doUpload(url); + }); + } } function errorMessageBox(message) { @@ -312,10 +319,6 @@ Window { }); } - function itemSelected() { - return treeView.selection.hasSelection() - } - Item { width: pane.contentWidth height: pane.height @@ -457,7 +460,6 @@ Window { height: 30 width: 155 - enabled: fileUrlTextField.text != "" onClicked: uploadClickedTimer.running = true // For some reason trigginer an API that enters diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index d7cae2483b..2e459362ab 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -4457,9 +4457,10 @@ void Application::toggleRunningScriptsWidget() { void Application::toggleAssetServerWidget(QString filePath) { static const QUrl url("AssetServer.qml"); auto urlSetter = [=](QQmlContext* context, QObject* newObject){ - newObject->setProperty("currentFileUrl", filePath); + emit uploadRequest(filePath); }; DependencyManager::get()->show(url, "AssetServer", urlSetter); + emit uploadRequest(filePath); } void Application::packageModel() { diff --git a/interface/src/Application.h b/interface/src/Application.h index c70d3412b7..029590966c 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -231,6 +231,8 @@ signals: void beforeAboutToQuit(); void activeDisplayPluginChanged(); + void uploadRequest(QString path); + public slots: QVector pasteEntities(float x, float y, float z); bool exportEntities(const QString& filename, const QVector& entityIDs); diff --git a/interface/src/scripting/AssetMappingsScriptingInterface.h b/interface/src/scripting/AssetMappingsScriptingInterface.h index 8e5d09cbd1..5b5170f7bb 100644 --- a/interface/src/scripting/AssetMappingsScriptingInterface.h +++ b/interface/src/scripting/AssetMappingsScriptingInterface.h @@ -30,6 +30,7 @@ public: bool isKnownMapping(QString path) const { return _pathToItemMap.contains(path); } bool isKnownFolder(QString path) const; +signals: void errorGettingMappings(QString errorString); private: From 4265ddbd0e5b1c3af3a6330b094ff6735e16c091 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Tue, 15 Mar 2016 11:42:48 -0700 Subject: [PATCH 2/3] Can't drop fbx if you can't rez --- interface/src/Application.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 2e459362ab..3e9c4f5a5a 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -4455,6 +4455,10 @@ void Application::toggleRunningScriptsWidget() { } void Application::toggleAssetServerWidget(QString filePath) { + if (!DependencyManager::get()->getThisNodeCanRez()) { + return; + } + static const QUrl url("AssetServer.qml"); auto urlSetter = [=](QQmlContext* context, QObject* newObject){ emit uploadRequest(filePath); From 03efde5b3c169ed17f028e436016b719496f855e Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Tue, 15 Mar 2016 13:53:13 -0700 Subject: [PATCH 3/3] Change text in case of drag and drop. --- interface/resources/qml/AssetServer.qml | 8 ++++---- interface/src/Application.cpp | 10 ++++++---- .../src/scripting/AssetMappingsScriptingInterface.cpp | 11 ++++++++--- .../src/scripting/AssetMappingsScriptingInterface.h | 2 +- 4 files changed, 19 insertions(+), 12 deletions(-) diff --git a/interface/resources/qml/AssetServer.qml b/interface/resources/qml/AssetServer.qml index 3e8942c206..37291480b2 100644 --- a/interface/resources/qml/AssetServer.qml +++ b/interface/resources/qml/AssetServer.qml @@ -252,7 +252,7 @@ Window { } uploadOpen = true; - function doUpload(url) { + function doUpload(url, dropping) { var fileUrl = fileDialogHelper.urlToPath(url); var path = assetProxyModel.data(treeView.selection.currentIndex, 0x100); @@ -290,11 +290,11 @@ Window { uploadButton.enabled = true; uploadOpen = false; } - }); + }, dropping); } if (fileUrl) { - doUpload(fileUrl); + doUpload(fileUrl, true); } else { var browser = desktop.fileDialog({ selectDirectory: false, @@ -305,7 +305,7 @@ Window { }); browser.selectedFile.connect(function(url) { currentDirectory = browser.dir; - doUpload(url); + doUpload(url, false); }); } } diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 3e9c4f5a5a..fda5a0e72d 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -4460,11 +4460,13 @@ void Application::toggleAssetServerWidget(QString filePath) { } static const QUrl url("AssetServer.qml"); - auto urlSetter = [=](QQmlContext* context, QObject* newObject){ - emit uploadRequest(filePath); + auto startUpload = [=](QQmlContext* context, QObject* newObject){ + if (!filePath.isEmpty()) { + emit uploadRequest(filePath); + } }; - DependencyManager::get()->show(url, "AssetServer", urlSetter); - emit uploadRequest(filePath); + DependencyManager::get()->show(url, "AssetServer", startUpload); + startUpload(nullptr, nullptr); } void Application::packageModel() { diff --git a/interface/src/scripting/AssetMappingsScriptingInterface.cpp b/interface/src/scripting/AssetMappingsScriptingInterface.cpp index b721d3c286..3c95eb007a 100644 --- a/interface/src/scripting/AssetMappingsScriptingInterface.cpp +++ b/interface/src/scripting/AssetMappingsScriptingInterface.cpp @@ -59,13 +59,18 @@ void AssetMappingsScriptingInterface::getMapping(QString path, QJSValue callback request->start(); } -void AssetMappingsScriptingInterface::uploadFile(QString path, QString mapping, QJSValue startedCallback, QJSValue completedCallback) { +void AssetMappingsScriptingInterface::uploadFile(QString path, QString mapping, QJSValue startedCallback, QJSValue completedCallback, bool dropEvent) { static const QString helpText = - "Upload your asset to a specific folder by entering the full path. Specifying " + "Upload your asset to a specific folder by entering the full path. Specifying\n" "a new folder name will automatically create that folder for you."; + static const QString dropHelpText = + "This file will be added to your Asset Server.\n" + "Use the field below to place your file in a specific folder or to rename it.\n" + "Specifying a new folder name will automatically create that folder for you."; auto offscreenUi = DependencyManager::get(); - auto result = offscreenUi->inputDialog(OffscreenUi::ICON_INFORMATION, "Specify Asset Path", helpText, mapping); + auto result = offscreenUi->inputDialog(OffscreenUi::ICON_INFORMATION, "Specify Asset Path", + dropEvent ? dropHelpText : helpText, mapping); if (!result.isValid()) { completedCallback.call({ -1 }); diff --git a/interface/src/scripting/AssetMappingsScriptingInterface.h b/interface/src/scripting/AssetMappingsScriptingInterface.h index 5b5170f7bb..831b30513a 100644 --- a/interface/src/scripting/AssetMappingsScriptingInterface.h +++ b/interface/src/scripting/AssetMappingsScriptingInterface.h @@ -54,7 +54,7 @@ public: Q_INVOKABLE void setMapping(QString path, QString hash, QJSValue callback = QJSValue()); Q_INVOKABLE void getMapping(QString path, QJSValue callback = QJSValue()); - Q_INVOKABLE void uploadFile(QString path, QString mapping, QJSValue startedCallback = QJSValue(), QJSValue completedCallback = QJSValue()); + Q_INVOKABLE void uploadFile(QString path, QString mapping, QJSValue startedCallback = QJSValue(), QJSValue completedCallback = QJSValue(), bool dropEvent = false); Q_INVOKABLE void deleteMappings(QStringList paths, QJSValue callback); Q_INVOKABLE void deleteMapping(QString path, QJSValue callback) { deleteMappings(QStringList(path), callback = QJSValue()); } Q_INVOKABLE void getAllMappings(QJSValue callback = QJSValue());