eric6/MicroPython/MicroPythonFileManagerWidget.py

branch
micropython
changeset 7126
376deb7fefe7
parent 7108
4f6133a01c6a
child 7130
6014d37d9683
--- a/eric6/MicroPython/MicroPythonFileManagerWidget.py	Wed Aug 07 16:08:46 2019 +0200
+++ b/eric6/MicroPython/MicroPythonFileManagerWidget.py	Wed Aug 07 16:10:12 2019 +0200
@@ -55,16 +55,24 @@
         super(MicroPythonFileManagerWidget, self).__init__(parent)
         self.setupUi(self)
         
+        self.__repl = parent
+        
         self.syncButton.setIcon(UI.PixmapCache.getIcon("2rightarrow"))
         self.putButton.setIcon(UI.PixmapCache.getIcon("1rightarrow"))
+        self.putAsButton.setIcon(UI.PixmapCache.getIcon("putAs"))
         self.getButton.setIcon(UI.PixmapCache.getIcon("1leftarrow"))
+        self.getAsButton.setIcon(UI.PixmapCache.getIcon("getAs"))
         self.localUpButton.setIcon(UI.PixmapCache.getIcon("1uparrow"))
         self.localReloadButton.setIcon(UI.PixmapCache.getIcon("reload"))
         self.deviceUpButton.setIcon(UI.PixmapCache.getIcon("1uparrow"))
         self.deviceReloadButton.setIcon(UI.PixmapCache.getIcon("reload"))
         
+        self.deviceUpButton.setEnabled(not self.__repl.isMicrobit())
+        
         self.putButton.setEnabled(False)
+        self.putAsButton.setEnabled(False)
         self.getButton.setEnabled(False)
+        self.getAsButton.setEnabled(False)
         
         self.localFileTreeWidget.header().setSortIndicator(
             0, Qt.AscendingOrder)
@@ -109,20 +117,23 @@
             self.tr("Show Time"), self.__showLocalTime)
         
         self.__deviceMenu = QMenu(self)
-        self.__deviceMenu.addAction(
-            self.tr("Change Directory"), self.__changeDeviceDirectory)
-        self.__deviceMenu.addAction(
-            self.tr("Create Directory"), self.__createDeviceDirectory)
-        self.__devDelDirAct = self.__deviceMenu.addAction(
-            self.tr("Delete Directory"), self.__deleteDeviceDirectory)
-        self.__devDelDirTreeAct = self.__deviceMenu.addAction(
-            self.tr("Delete Directory Tree"), self.__deleteDeviceDirectoryTree)
-        self.__deviceMenu.addSeparator()
+        if not self.__repl.isMicrobit():
+            self.__deviceMenu.addAction(
+                self.tr("Change Directory"), self.__changeDeviceDirectory)
+            self.__deviceMenu.addAction(
+                self.tr("Create Directory"), self.__createDeviceDirectory)
+            self.__devDelDirAct = self.__deviceMenu.addAction(
+                self.tr("Delete Directory"), self.__deleteDeviceDirectory)
+            self.__devDelDirTreeAct = self.__deviceMenu.addAction(
+                self.tr("Delete Directory Tree"),
+                self.__deleteDeviceDirectoryTree)
+            self.__deviceMenu.addSeparator()
         self.__devDelFileAct = self.__deviceMenu.addAction(
             self.tr("Delete File"), self.__deleteDeviceFile)
-        self.__deviceMenu.addSeparator()
-        self.__deviceMenu.addAction(
-            self.tr("Show Filesystem Info"), self.__showFileSystemInfo)
+        if not parent.isMicrobit():
+            self.__deviceMenu.addSeparator()
+            self.__deviceMenu.addAction(
+                self.tr("Show Filesystem Info"), self.__showFileSystemInfo)
     
     def start(self):
         """
@@ -251,6 +262,7 @@
                 self.localFileTreeWidget.selectedItems()[0].text(0)
                 .endswith("/"))
         self.putButton.setEnabled(enable)
+        self.putAsButton.setEnabled(enable)
     
     @pyqtSlot()
     def on_localUpButton_clicked(self):
@@ -298,6 +310,7 @@
                 self.deviceFileTreeWidget.selectedItems()[0].text(0)
                 .endswith("/"))
         self.getButton.setEnabled(enable)
+        self.getAsButton.setEnabled(enable)
     
     @pyqtSlot()
     def on_deviceUpButton_clicked(self):
@@ -338,19 +351,35 @@
         return False
     
     @pyqtSlot()
-    def on_putButton_clicked(self):
+    def on_putButton_clicked(self, putAs=False):
         """
         Private slot to copy the selected file to the connected device.
+        
+        @param putAs flag indicating to give it a new name
+        @type bool
         """
         selectedItems = self.localFileTreeWidget.selectedItems()
         if selectedItems:
             filename = selectedItems[0].text(0).strip()
             if not filename.endswith("/"):
                 # it is really a file
-                if self.__isFileInList(filename, self.deviceFileTreeWidget):
+                if putAs:
+                    deviceFilename, ok = QInputDialog.getText(
+                        self,
+                        self.tr("Put File As"),
+                        self.tr("Enter a new name for the file"),
+                        QLineEdit.Normal,
+                        filename)
+                    if not ok or not filename:
+                        return
+                else:
+                    deviceFilename = filename
+                
+                if self.__isFileInList(deviceFilename,
+                                       self.deviceFileTreeWidget):
                     # ask for overwrite permission
                     action, resultFilename = confirmOverwrite(
-                        filename, self.tr("Copy File to Device"),
+                        deviceFilename, self.tr("Copy File to Device"),
                         self.tr("The given file exists already"
                                 " (Enter file name only)."),
                         False, self)
@@ -358,49 +387,79 @@
                         return
                     elif action == "rename":
                         deviceFilename = os.path.basename(resultFilename)
-                    else:
-                        deviceFilename = filename
-                else:
-                    deviceFilename = filename
                 
+                deviceCwd = self.deviceCwd.text()
+                if deviceCwd:
+                    deviceFilename = deviceCwd + "/" + deviceFilename
                 self.__fileManager.put(
                     os.path.join(self.localCwd.text(), filename),
-                    os.path.join(self.deviceCwd.text(), deviceFilename)
+                    deviceFilename
                 )
     
     @pyqtSlot()
-    def on_getButton_clicked(self):
+    def on_putAsButton_clicked(self):
+        """
+        Private slot to copy the selected file to the connected device
+        with a different name.
+        """
+        self.on_putButton_clicked(putAs=True)
+    
+    @pyqtSlot()
+    def on_getButton_clicked(self, getAs=False):
         """
         Private slot to copy the selected file from the connected device.
+        
+        @param getAs flag indicating to give it a new name
+        @type bool
         """
         selectedItems = self.deviceFileTreeWidget.selectedItems()
         if selectedItems:
             filename = selectedItems[0].text(0).strip()
             if not filename.endswith("/"):
                 # it is really a file
-                if self.__isFileInList(filename, self.localFileTreeWidget):
+                if getAs:
+                    localFilename, ok = QInputDialog.getText(
+                        self,
+                        self.tr("Get File As"),
+                        self.tr("Enter a new name for the file"),
+                        QLineEdit.Normal,
+                        filename)
+                    if not ok or not filename:
+                        return
+                else:
+                    localFilename = filename
+                
+                if self.__isFileInList(localFilename,
+                                       self.localFileTreeWidget):
                     # ask for overwrite permission
                     action, resultFilename = confirmOverwrite(
-                        filename, self.tr("Copy File from Device"),
+                        localFilename, self.tr("Copy File from Device"),
                         self.tr("The given file exists already."),
                         True, self)
                     if action == "cancel":
                         return
                     elif action == "rename":
                         localFilename = resultFilename
-                    else:
-                        localFilename = filename
-                else:
-                    localFilename = filename
                 
+                deviceCwd = self.deviceCwd.text()
+                if deviceCwd:
+                    filename = deviceCwd + "/" + filename
                 if not os.path.isabs(localFilename):
                     localFilename = os.path.join(self.localCwd.text(),
                                                  localFilename)
                 self.__fileManager.get(
-                    os.path.join(self.deviceCwd.text(), filename),
+                    filename,
                     localFilename
                 )
     
+    @pyqtSlot()
+    def on_getAsButton_clicked(self):
+        """
+        Private slot to copy the selected file from the connected device
+        with a different name.
+        """
+        self.on_getButton_clicked(getAs=True)
+    
     @pyqtSlot(str, str)
     def __handleGetDone(self, deviceFile, localFile):
         """
@@ -630,8 +689,9 @@
         else:
             isDir = False
             isFile = False
-        self.__devDelDirAct.setEnabled(isDir)
-        self.__devDelDirTreeAct.setEnabled(isDir)
+        if not self.__repl.isMicrobit():
+            self.__devDelDirAct.setEnabled(isDir)
+            self.__devDelDirTreeAct.setEnabled(isDir)
         self.__devDelFileAct.setEnabled(isFile)
         
         self.__deviceMenu.exec_(self.deviceFileTreeWidget.mapToGlobal(pos))
@@ -710,7 +770,11 @@
         """
         if bool(len(self.deviceFileTreeWidget.selectedItems())):
             name = self.deviceFileTreeWidget.selectedItems()[0].text(0)
-            filename = self.deviceCwd.text() + "/" + name
+            dirname = self.deviceCwd.text()
+            if dirname:
+                filename = dirname + "/" + name
+            else:
+                filename = name
             dlg = DeleteFilesConfirmationDialog(
                 self,
                 self.tr("Delete File"),

eric ide

mercurial