121 ) |
121 ) |
122 self.deviceFileTreeWidget.customContextMenuRequested.connect( |
122 self.deviceFileTreeWidget.customContextMenuRequested.connect( |
123 self.__showDeviceContextMenu |
123 self.__showDeviceContextMenu |
124 ) |
124 ) |
125 |
125 |
|
126 ######################################################################## |
|
127 ## Context menu for the local directory tree. |
|
128 ######################################################################## |
|
129 |
126 self.__localMenu = QMenu(self) |
130 self.__localMenu = QMenu(self) |
127 self.__localMenu.addAction( |
131 self.__localMenu.addAction( |
128 self.tr("Change Directory"), self.__changeLocalDirectory |
132 self.tr("Change Directory"), self.__changeLocalDirectory |
129 ) |
133 ) |
130 self.__localMenu.addAction( |
134 self.__localMenu.addAction( |
132 ) |
136 ) |
133 self.__localDelDirTreeAct = self.__localMenu.addAction( |
137 self.__localDelDirTreeAct = self.__localMenu.addAction( |
134 self.tr("Delete Directory Tree"), self.__deleteLocalDirectoryTree |
138 self.tr("Delete Directory Tree"), self.__deleteLocalDirectoryTree |
135 ) |
139 ) |
136 self.__localMenu.addSeparator() |
140 self.__localMenu.addSeparator() |
|
141 self.__localMenu.addAction( |
|
142 self.tr("New File"), self.__newLocalFile |
|
143 ) |
|
144 self.__openLocalFileAct = self.__localMenu.addAction( |
|
145 self.tr("Open File"), self.__openLocalFile |
|
146 ) |
137 self.__localRenameFileAct = self.__localMenu.addAction( |
147 self.__localRenameFileAct = self.__localMenu.addAction( |
138 self.tr("Rename File"), self.__renameLocalFile |
148 self.tr("Rename File"), self.__renameLocalFile |
139 ) |
149 ) |
140 self.__localMenu.addSeparator() |
|
141 self.__localDelFileAct = self.__localMenu.addAction( |
150 self.__localDelFileAct = self.__localMenu.addAction( |
142 self.tr("Delete File"), self.__deleteLocalFile |
151 self.tr("Delete File"), self.__deleteLocalFile |
143 ) |
152 ) |
144 self.__localMenu.addSeparator() |
153 self.__localMenu.addSeparator() |
145 act = self.__localMenu.addAction(self.tr("Show Hidden Files")) |
154 act = self.__localMenu.addAction(self.tr("Show Hidden Files")) |
149 self.__localMenu.addSeparator() |
158 self.__localMenu.addSeparator() |
150 self.__localClearSelectionAct = self.__localMenu.addAction( |
159 self.__localClearSelectionAct = self.__localMenu.addAction( |
151 self.tr("Clear Selection"), self.__clearLocalSelection |
160 self.tr("Clear Selection"), self.__clearLocalSelection |
152 ) |
161 ) |
153 |
162 |
|
163 ######################################################################## |
|
164 ## Context menu for the device directory tree. |
|
165 ######################################################################## |
|
166 |
154 self.__deviceMenu = QMenu(self) |
167 self.__deviceMenu = QMenu(self) |
155 if not isMicrobitDeviceWithMPy: |
168 if not isMicrobitDeviceWithMPy: |
156 self.__deviceMenu.addAction( |
169 self.__deviceMenu.addAction( |
157 self.tr("Change Directory"), self.__changeDeviceDirectory |
170 self.tr("Change Directory"), self.__changeDeviceDirectory |
158 ) |
171 ) |
164 ) |
177 ) |
165 self.__devDelDirTreeAct = self.__deviceMenu.addAction( |
178 self.__devDelDirTreeAct = self.__deviceMenu.addAction( |
166 self.tr("Delete Directory Tree"), self.__deleteDeviceDirectoryTree |
179 self.tr("Delete Directory Tree"), self.__deleteDeviceDirectoryTree |
167 ) |
180 ) |
168 self.__deviceMenu.addSeparator() |
181 self.__deviceMenu.addSeparator() |
|
182 self.__deviceMenu.addAction( |
|
183 self.tr("New File"), self.__newDeviceFile |
|
184 ) |
|
185 self.__openDeviceFileAct = self.__deviceMenu.addAction( |
|
186 self.tr("Open File"), self.__openDeviceFile |
|
187 ) |
169 self.__devRenameFileAct = self.__deviceMenu.addAction( |
188 self.__devRenameFileAct = self.__deviceMenu.addAction( |
170 self.tr("Rename File"), self.__renameDeviceFile |
189 self.tr("Rename File"), self.__renameDeviceFile |
171 ) |
190 ) |
172 self.__deviceMenu.addSeparator() |
|
173 self.__devDelFileAct = self.__deviceMenu.addAction( |
191 self.__devDelFileAct = self.__deviceMenu.addAction( |
174 self.tr("Delete File"), self.__deleteDeviceFile |
192 self.tr("Delete File"), self.__deleteDeviceFile |
175 ) |
193 ) |
176 self.__deviceMenu.addSeparator() |
194 self.__deviceMenu.addSeparator() |
177 act = self.__deviceMenu.addAction(self.tr("Show Hidden Files")) |
195 act = self.__deviceMenu.addAction(self.tr("Show Hidden Files")) |
1362 if not self.__repl.isMicrobit(): |
1381 if not self.__repl.isMicrobit(): |
1363 self.__devDelDirAct.setEnabled(isDir) |
1382 self.__devDelDirAct.setEnabled(isDir) |
1364 self.__devDelDirTreeAct.setEnabled(isDir) |
1383 self.__devDelDirTreeAct.setEnabled(isDir) |
1365 self.__devRenameFileAct.setEnabled(isFile) |
1384 self.__devRenameFileAct.setEnabled(isFile) |
1366 self.__devDelFileAct.setEnabled(isFile) |
1385 self.__devDelFileAct.setEnabled(isFile) |
|
1386 self.__openDeviceFileAct.setEnabled(isFile) |
1367 |
1387 |
1368 self.__deviceMenu.exec(self.deviceFileTreeWidget.mapToGlobal(pos)) |
1388 self.__deviceMenu.exec(self.deviceFileTreeWidget.mapToGlobal(pos)) |
1369 |
1389 |
1370 @pyqtSlot() |
1390 @pyqtSlot() |
1371 def __changeDeviceDirectory(self): |
1391 def __changeDeviceDirectory(self): |
1570 """ |
1590 """ |
1571 Private slot to clear the local selection. |
1591 Private slot to clear the local selection. |
1572 """ |
1592 """ |
1573 for item in self.deviceFileTreeWidget.selectedItems()[:]: |
1593 for item in self.deviceFileTreeWidget.selectedItems()[:]: |
1574 item.setSelected(False) |
1594 item.setSelected(False) |
|
1595 |
|
1596 ############################################################################ |
|
1597 ## Methods for the MicroPython window variant. |
|
1598 ############################################################################ |
|
1599 |
|
1600 @pyqtSlot() |
|
1601 def __newLocalFile(self, localDevice=False): |
|
1602 """ |
|
1603 Private slot to create a new local file. |
|
1604 |
|
1605 @param localDevice flag indicating device access via local file system |
|
1606 @type bool |
|
1607 """ |
|
1608 cwdWidget = self.deviceCwd if localDevice else self.localCwd |
|
1609 fileTreeWidget = ( |
|
1610 self.deviceFileTreeWidget if localDevice else self.localFileTreeWidget |
|
1611 ) |
|
1612 |
|
1613 if fileTreeWidget.selectedItems(): |
|
1614 localItem = fileTreeWidget.selectedItems()[0] |
|
1615 defaultPath = localItem.data(0, Qt.ItemDataRole.UserRole) |
|
1616 if not os.path.isdir(defaultPath): |
|
1617 defaultPath = os.path.dirname(defaultPath) |
|
1618 localItem = localItem.parent() |
|
1619 else: |
|
1620 defaultPath = cwdWidget.text() |
|
1621 localItem = None |
|
1622 |
|
1623 filePath, ok = QInputDialog.getText( |
|
1624 self, |
|
1625 self.tr("New File"), |
|
1626 self.tr("Enter file name:"), |
|
1627 QLineEdit.EchoMode.Normal, |
|
1628 ) |
|
1629 if ok and filePath: |
|
1630 filePath = os.path.join(defaultPath, filePath) |
|
1631 try: |
|
1632 with open(filePath, "w") as f: |
|
1633 f.close() |
|
1634 if localItem: |
|
1635 self.__listLocalFiles(localDevice=localDevice, parentItem=localItem) |
|
1636 else: |
|
1637 self.__listLocalFiles( |
|
1638 dirname=cwdWidget.text(), localDevice=localDevice |
|
1639 ) |
|
1640 except OSError as exc: |
|
1641 EricMessageBox.critical( |
|
1642 self, |
|
1643 self.tr("New File"), |
|
1644 self.tr( |
|
1645 """<p>The file <b>{0}</b> could not be""" |
|
1646 """ created.</p><p>Reason: {1}</p>""" |
|
1647 ).format(filePath, str(exc)), |
|
1648 ) |
|
1649 |
|
1650 @pyqtSlot() |
|
1651 def __openLocalFile(self): |
|
1652 """ |
|
1653 Private slot to open the selected local file in an editor window. |
|
1654 """ |
|
1655 self.on_localFileTreeWidget_itemActivated( |
|
1656 self.localFileTreeWidget.selectedItems()[0], 0 |
|
1657 ) |
|
1658 |
|
1659 @pyqtSlot() |
|
1660 def __newDeviceFile(self): |
|
1661 """ |
|
1662 Private slot to create a new file on the connected device. |
|
1663 """ |
|
1664 # TODO: not implemented yet |
|
1665 if self.__repl.deviceSupportsLocalFileAccess(): |
|
1666 self.__newLocalFile(True) |
|
1667 else: |
|
1668 selectedItems = self.deviceFileTreeWidget.selectedItems() |
|
1669 if selectedItems: |
|
1670 item = selectedItems[0] |
|
1671 defaultPath = ( |
|
1672 item.data(0, Qt.ItemDataRole.UserRole) |
|
1673 if item.text(0).endswith("/") |
|
1674 else os.path.dirname(item.data(0, Qt.ItemDataRole.UserRole)) |
|
1675 ) |
|
1676 else: |
|
1677 defaultPath = self.deviceCwd.text() |
|
1678 fileName, ok = QInputDialog.getText( |
|
1679 self, |
|
1680 self.tr("New File"), |
|
1681 self.tr("Enter file name:"), |
|
1682 QLineEdit.EchoMode.Normal, |
|
1683 defaultPath, |
|
1684 ) |
|
1685 if ok and fileName: |
|
1686 self.__fileManager.writeFile(fileName, "") |
|
1687 |
|
1688 @pyqtSlot() |
|
1689 def __openDeviceFile(self): |
|
1690 """ |
|
1691 Private slot to open the selected device file in an editor window. |
|
1692 """ |
|
1693 self.on_deviceFileTreeWidget_itemActivated( |
|
1694 self.deviceFileTreeWidget.selectedItems()[0], 0 |
|
1695 ) |