Browse Source

Drag-and-drop files behave the same as open file menu

CURA-3495
Lipu Fei 8 years ago
parent
commit
5bec46a29c
1 changed files with 43 additions and 63 deletions
  1. 43 63
      resources/qml/Cura.qml

+ 43 - 63
resources/qml/Cura.qml

@@ -259,40 +259,7 @@ UM.MainWindow
                 {
                     if (drop.urls.length > 0)
                     {
-                        // Import models
-                        var imported_model = -1;
-                        for (var i in drop.urls)
-                        {
-                            // There is no endsWith in this version of JS...
-                            if ((drop.urls[i].length <= 12) || (drop.urls[i].substring(drop.urls[i].length-12) !== ".curaprofile")) {
-                                // Drop an object
-                                Printer.readLocalFile(drop.urls[i]);
-                                if (imported_model == -1)
-                                {
-                                    imported_model = i;
-                                }
-                            }
-                        }
-
-                        // Import profiles
-                        var import_result = Cura.ContainerManager.importProfiles(drop.urls);
-                        if (import_result.message !== "") {
-                            messageDialog.text = import_result.message
-                            if (import_result.status == "ok")
-                            {
-                                messageDialog.icon = StandardIcon.Information
-                            }
-                            else
-                            {
-                                messageDialog.icon = StandardIcon.Critical
-                            }
-                            messageDialog.open()
-                        }
-                        if (imported_model != -1)
-                        {
-                            var meshName = backgroundItem.getMeshName(drop.urls[imported_model].toString())
-                            backgroundItem.hasMesh(decodeURIComponent(meshName))
-                        }
+                        handleOpenFileUrls(drop.urls);
                     }
                 }
             }
@@ -753,36 +720,45 @@ UM.MainWindow
 
             CuraApplication.setDefaultPath("dialog_load_path", folder);
 
-            // look for valid project files
-            var projectFileUrlList = [];
-            var hasGcode = false;
-            for (var i in fileUrls)
-            {
-                var endsWithG = /\.g$/;
-                var endsWithGcode = /\.gcode$/;
-                if (endsWithG.test(fileUrls[i]) || endsWithGcode.test(fileUrls[i])) {
-                    hasGcode = true;
-                    continue;
-                }
-                else if (CuraApplication.checkIsValidProjectFile(fileUrls[i])) {
-                    projectFileUrlList.push(fileUrls[i]);
-                }
-            }
+            handleOpenFileUrls(fileUrls);
+        }
+    }
 
-            // show a warning if selected multiple files together with Gcode
-            var hasProjectFile = projectFileUrlList.length > 0;
-            var selectedMultipleFiles = fileUrls.length > 1;
-            if (selectedMultipleFiles && hasGcode) {
-                infoMultipleFilesWithGcodeDialog.selectedMultipleFiles = selectedMultipleFiles;
-                infoMultipleFilesWithGcodeDialog.hasProjectFile = hasProjectFile;
-                infoMultipleFilesWithGcodeDialog.fileUrls = fileUrls;
-                infoMultipleFilesWithGcodeDialog.projectFileUrlList = projectFileUrlList;
-                infoMultipleFilesWithGcodeDialog.open();
+    function handleOpenFileUrls(fileUrls)
+    {
+        // look for valid project files
+        var projectFileUrlList = [];
+        var hasGcode = false;
+        for (var i in fileUrls)
+        {
+            var endsWithG = /\.g$/;
+            var endsWithGcode = /\.gcode$/;
+            if (endsWithG.test(fileUrls[i]) || endsWithGcode.test(fileUrls[i]))
+            {
+                hasGcode = true;
+                continue;
             }
-            else {
-                handleOpenFiles(selectedMultipleFiles, hasProjectFile, fileUrls, projectFileUrlList);
+            else if (CuraApplication.checkIsValidProjectFile(fileUrls[i]))
+            {
+                projectFileUrlList.push(fileUrls[i]);
             }
         }
+
+        // show a warning if selected multiple files together with Gcode
+        var hasProjectFile = projectFileUrlList.length > 0;
+        var selectedMultipleFiles = fileUrls.length > 1;
+        if (selectedMultipleFiles && hasGcode)
+        {
+            infoMultipleFilesWithGcodeDialog.selectedMultipleFiles = selectedMultipleFiles;
+            infoMultipleFilesWithGcodeDialog.hasProjectFile = hasProjectFile;
+            infoMultipleFilesWithGcodeDialog.fileUrls = fileUrls.slice();
+            infoMultipleFilesWithGcodeDialog.projectFileUrlList = projectFileUrlList.slice();
+            infoMultipleFilesWithGcodeDialog.open();
+        }
+        else
+        {
+            handleOpenFiles(selectedMultipleFiles, hasProjectFile, fileUrls, projectFileUrlList);
+        }
     }
 
     function handleOpenFiles(selectedMultipleFiles, hasProjectFile, fileUrls, projectFileUrlList)
@@ -790,7 +766,7 @@ UM.MainWindow
         // we only allow opening one project file
         if (selectedMultipleFiles && hasProjectFile)
         {
-            openFilesIncludingProjectsDialog.fileUrls = fileUrls;
+            openFilesIncludingProjectsDialog.fileUrls = fileUrls.slice();
             openFilesIncludingProjectsDialog.show();
             return;
         }
@@ -802,9 +778,13 @@ UM.MainWindow
             // check preference
             var choice = UM.Preferences.getValue("cura/choice_on_open_project");
             if (choice == "open_as_project")
+            {
                 openFilesIncludingProjectsDialog.loadProjectFile(projectFile);
+            }
             else if (choice == "open_as_model")
-                openFilesIncludingProjectsDialog.loadModelFiles([projectFile]);
+            {
+                openFilesIncludingProjectsDialog.loadModelFiles([projectFile].slice());
+            }
             else    // always ask
             {
                 // ask whether to open as project or as models
@@ -814,7 +794,7 @@ UM.MainWindow
         }
         else
         {
-            openFilesIncludingProjectsDialog.loadModelFiles(fileUrls);
+            openFilesIncludingProjectsDialog.loadModelFiles(fileUrls.slice());
         }
     }