129 ) |
129 ) |
130 self.__localDelDirTreeAct = self.__localMenu.addAction( |
130 self.__localDelDirTreeAct = self.__localMenu.addAction( |
131 self.tr("Delete Directory Tree"), self.__deleteLocalDirectoryTree |
131 self.tr("Delete Directory Tree"), self.__deleteLocalDirectoryTree |
132 ) |
132 ) |
133 self.__localMenu.addSeparator() |
133 self.__localMenu.addSeparator() |
|
134 self.__localRenameFileAct = self.__localMenu.addAction( |
|
135 self.tr("Rename File"), self.__renameLocalFile |
|
136 ) |
|
137 self.__localMenu.addSeparator() |
134 self.__localDelFileAct = self.__localMenu.addAction( |
138 self.__localDelFileAct = self.__localMenu.addAction( |
135 self.tr("Delete File"), self.__deleteLocalFile |
139 self.tr("Delete File"), self.__deleteLocalFile |
136 ) |
140 ) |
137 self.__localMenu.addSeparator() |
141 self.__localMenu.addSeparator() |
138 act = self.__localMenu.addAction(self.tr("Show Hidden Files")) |
142 act = self.__localMenu.addAction(self.tr("Show Hidden Files")) |
153 ) |
157 ) |
154 self.__devDelDirTreeAct = self.__deviceMenu.addAction( |
158 self.__devDelDirTreeAct = self.__deviceMenu.addAction( |
155 self.tr("Delete Directory Tree"), self.__deleteDeviceDirectoryTree |
159 self.tr("Delete Directory Tree"), self.__deleteDeviceDirectoryTree |
156 ) |
160 ) |
157 self.__deviceMenu.addSeparator() |
161 self.__deviceMenu.addSeparator() |
|
162 self.__devRenameFileAct = self.__deviceMenu.addAction( |
|
163 self.tr("Rename File"), self.__renameDeviceFile |
|
164 ) |
|
165 self.__deviceMenu.addSeparator() |
158 self.__devDelFileAct = self.__deviceMenu.addAction( |
166 self.__devDelFileAct = self.__deviceMenu.addAction( |
159 self.tr("Delete File"), self.__deleteDeviceFile |
167 self.tr("Delete File"), self.__deleteDeviceFile |
160 ) |
168 ) |
161 self.__deviceMenu.addSeparator() |
169 self.__deviceMenu.addSeparator() |
162 act = self.__deviceMenu.addAction(self.tr("Show Hidden Files")) |
170 act = self.__deviceMenu.addAction(self.tr("Show Hidden Files")) |
975 """<p>The file <b>{0}</b> could not be""" |
984 """<p>The file <b>{0}</b> could not be""" |
976 """ deleted.</p><p>Reason: {1}</p>""" |
985 """ deleted.</p><p>Reason: {1}</p>""" |
977 ).format(filename, str(exc)), |
986 ).format(filename, str(exc)), |
978 ) |
987 ) |
979 |
988 |
|
989 @pyqtSlot() |
|
990 def __renameLocalFile(self, localDevice=False): |
|
991 """ |
|
992 Private slot to rename a file on the device. |
|
993 |
|
994 @param localDevice flag indicating device access via local file system |
|
995 (defaults to False) |
|
996 @type bool (optional) |
|
997 """ |
|
998 if localDevice: |
|
999 cwdWidget = self.deviceCwd |
|
1000 fileTreeWidget = self.deviceFileTreeWidget |
|
1001 else: |
|
1002 cwdWidget = self.localCwd |
|
1003 fileTreeWidget = self.localFileTreeWidget |
|
1004 |
|
1005 if bool(len(fileTreeWidget.selectedItems())): |
|
1006 name = fileTreeWidget.selectedItems()[0].text(0) |
|
1007 filename = os.path.join(cwdWidget.text(), name) |
|
1008 newname, ok = QInputDialog.getText( |
|
1009 self, |
|
1010 self.tr("Rename File"), |
|
1011 self.tr("Enter the new path for the file"), |
|
1012 QLineEdit.EchoMode.Normal, |
|
1013 filename, |
|
1014 ) |
|
1015 if ok and newname: |
|
1016 try: |
|
1017 os.rename(filename, newname) |
|
1018 except OSError as exc: |
|
1019 EricMessageBox.critical( |
|
1020 self, |
|
1021 self.tr("Rename File"), |
|
1022 self.tr( |
|
1023 """<p>The file <b>{0}</b> could not be""" |
|
1024 """ renamed to <b>{1}</b>.</p><p>Reason: {2}</p>""" |
|
1025 ).format(filename, newname, str(exc)), |
|
1026 ) |
|
1027 |
|
1028 # reload the directory listing |
|
1029 if localDevice: |
|
1030 self.on_deviceReloadButton_clicked() |
|
1031 else: |
|
1032 self.on_localReloadButton_clicked() |
|
1033 |
980 @pyqtSlot(bool) |
1034 @pyqtSlot(bool) |
981 def __localHiddenChanged(self, checked): |
1035 def __localHiddenChanged(self, checked): |
982 """ |
1036 """ |
983 Private slot handling a change of the local show hidden menu entry. |
1037 Private slot handling a change of the local show hidden menu entry. |
984 |
1038 |
1009 isDir = False |
1063 isDir = False |
1010 isFile = False |
1064 isFile = False |
1011 if not self.__repl.isMicrobit(): |
1065 if not self.__repl.isMicrobit(): |
1012 self.__devDelDirAct.setEnabled(isDir) |
1066 self.__devDelDirAct.setEnabled(isDir) |
1013 self.__devDelDirTreeAct.setEnabled(isDir) |
1067 self.__devDelDirTreeAct.setEnabled(isDir) |
|
1068 self.__devRenameFileAct.setEnabled(isFile) |
1014 self.__devDelFileAct.setEnabled(isFile) |
1069 self.__devDelFileAct.setEnabled(isFile) |
1015 |
1070 |
1016 self.__deviceMenu.exec(self.deviceFileTreeWidget.mapToGlobal(pos)) |
1071 self.__deviceMenu.exec(self.deviceFileTreeWidget.mapToGlobal(pos)) |
1017 |
1072 |
1018 @pyqtSlot() |
1073 @pyqtSlot() |
1135 [filename], |
1190 [filename], |
1136 ) |
1191 ) |
1137 if dlg.exec() == QDialog.DialogCode.Accepted: |
1192 if dlg.exec() == QDialog.DialogCode.Accepted: |
1138 self.__fileManager.delete(filename) |
1193 self.__fileManager.delete(filename) |
1139 |
1194 |
|
1195 @pyqtSlot() |
|
1196 def __renameDeviceFile(self): |
|
1197 """ |
|
1198 Private slot to rename a file on the device. |
|
1199 """ |
|
1200 if self.__repl.deviceSupportsLocalFileAccess(): |
|
1201 self.__renameLocalFile(True) |
|
1202 else: |
|
1203 if bool(len(self.deviceFileTreeWidget.selectedItems())): |
|
1204 name = self.deviceFileTreeWidget.selectedItems()[0].text(0) |
|
1205 dirname = self.deviceCwd.text() |
|
1206 if dirname: |
|
1207 if dirname != "/": |
|
1208 filename = dirname + "/" + name |
|
1209 else: |
|
1210 filename = "/" + name |
|
1211 else: |
|
1212 filename = name |
|
1213 newname, ok = QInputDialog.getText( |
|
1214 self, |
|
1215 self.tr("Rename File"), |
|
1216 self.tr("Enter the new path for the file"), |
|
1217 QLineEdit.EchoMode.Normal, |
|
1218 filename, |
|
1219 ) |
|
1220 if ok and newname: |
|
1221 success = self.__fileManager.rename(filename, newname) |
|
1222 if success: |
|
1223 self.on_deviceReloadButton_clicked() |
|
1224 |
1140 @pyqtSlot(bool) |
1225 @pyqtSlot(bool) |
1141 def __deviceHiddenChanged(self, checked): |
1226 def __deviceHiddenChanged(self, checked): |
1142 """ |
1227 """ |
1143 Private slot handling a change of the device show hidden menu entry. |
1228 Private slot handling a change of the device show hidden menu entry. |
1144 |
1229 |