src/eric7/MicroPython/MicroPythonFileManagerWidget.py

branch
eric7
changeset 10515
6e790462348a
parent 10512
b7292f2691f9
child 10518
1682f3203ae5
--- a/src/eric7/MicroPython/MicroPythonFileManagerWidget.py	Fri Jan 19 09:50:47 2024 +0100
+++ b/src/eric7/MicroPython/MicroPythonFileManagerWidget.py	Sat Jan 20 12:36:40 2024 +0100
@@ -131,6 +131,10 @@
             self.tr("Delete Directory Tree"), self.__deleteLocalDirectoryTree
         )
         self.__localMenu.addSeparator()
+        self.__localRenameFileAct = self.__localMenu.addAction(
+            self.tr("Rename File"), self.__renameLocalFile
+        )
+        self.__localMenu.addSeparator()
         self.__localDelFileAct = self.__localMenu.addAction(
             self.tr("Delete File"), self.__deleteLocalFile
         )
@@ -155,6 +159,10 @@
                 self.tr("Delete Directory Tree"), self.__deleteDeviceDirectoryTree
             )
             self.__deviceMenu.addSeparator()
+        self.__devRenameFileAct = self.__deviceMenu.addAction(
+            self.tr("Rename File"), self.__renameDeviceFile
+        )
+        self.__deviceMenu.addSeparator()
         self.__devDelFileAct = self.__deviceMenu.addAction(
             self.tr("Delete File"), self.__deleteDeviceFile
         )
@@ -842,6 +850,7 @@
             isDir = False
             isFile = False
         self.__localDelDirTreeAct.setEnabled(isDir)
+        self.__localRenameFileAct.setEnabled(isFile)
         self.__localDelFileAct.setEnabled(isFile)
 
         self.__localMenu.exec(self.localFileTreeWidget.mapToGlobal(pos))
@@ -977,6 +986,51 @@
                         ).format(filename, str(exc)),
                     )
 
+    @pyqtSlot()
+    def __renameLocalFile(self, localDevice=False):
+        """
+        Private slot to rename a file on the device.
+
+        @param localDevice flag indicating device access via local file system
+            (defaults to False)
+        @type bool (optional)
+        """
+        if localDevice:
+            cwdWidget = self.deviceCwd
+            fileTreeWidget = self.deviceFileTreeWidget
+        else:
+            cwdWidget = self.localCwd
+            fileTreeWidget = self.localFileTreeWidget
+
+        if bool(len(fileTreeWidget.selectedItems())):
+            name = fileTreeWidget.selectedItems()[0].text(0)
+            filename = os.path.join(cwdWidget.text(), name)
+            newname, ok = QInputDialog.getText(
+                self,
+                self.tr("Rename File"),
+                self.tr("Enter the new path for the file"),
+                QLineEdit.EchoMode.Normal,
+                filename,
+            )
+            if ok and newname:
+                try:
+                    os.rename(filename, newname)
+                except OSError as exc:
+                    EricMessageBox.critical(
+                        self,
+                        self.tr("Rename File"),
+                        self.tr(
+                            """<p>The file <b>{0}</b> could not be"""
+                            """ renamed to <b>{1}</b>.</p><p>Reason: {2}</p>"""
+                        ).format(filename, newname, str(exc)),
+                    )
+
+                # reload the directory listing
+                if localDevice:
+                    self.on_deviceReloadButton_clicked()
+                else:
+                    self.on_localReloadButton_clicked()
+
     @pyqtSlot(bool)
     def __localHiddenChanged(self, checked):
         """
@@ -1011,6 +1065,7 @@
         if not self.__repl.isMicrobit():
             self.__devDelDirAct.setEnabled(isDir)
             self.__devDelDirTreeAct.setEnabled(isDir)
+        self.__devRenameFileAct.setEnabled(isFile)
         self.__devDelFileAct.setEnabled(isFile)
 
         self.__deviceMenu.exec(self.deviceFileTreeWidget.mapToGlobal(pos))
@@ -1137,6 +1192,36 @@
                 if dlg.exec() == QDialog.DialogCode.Accepted:
                     self.__fileManager.delete(filename)
 
+    @pyqtSlot()
+    def __renameDeviceFile(self):
+        """
+        Private slot to rename a file on the device.
+        """
+        if self.__repl.deviceSupportsLocalFileAccess():
+            self.__renameLocalFile(True)
+        else:
+            if bool(len(self.deviceFileTreeWidget.selectedItems())):
+                name = self.deviceFileTreeWidget.selectedItems()[0].text(0)
+                dirname = self.deviceCwd.text()
+                if dirname:
+                    if dirname != "/":
+                        filename = dirname + "/" + name
+                    else:
+                        filename = "/" + name
+                else:
+                    filename = name
+                newname, ok = QInputDialog.getText(
+                    self,
+                    self.tr("Rename File"),
+                    self.tr("Enter the new path for the file"),
+                    QLineEdit.EchoMode.Normal,
+                    filename,
+                )
+                if ok and newname:
+                    success = self.__fileManager.rename(filename, newname)
+                    if success:
+                        self.on_deviceReloadButton_clicked()
+
     @pyqtSlot(bool)
     def __deviceHiddenChanged(self, checked):
         """

eric ide

mercurial