src/eric7/MicroPython/Devices/CircuitPythonUpdater/RequirementsDialog.py

Sat, 31 Aug 2024 17:19:33 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 31 Aug 2024 17:19:33 +0200
branch
eric7
changeset 10900
4139f17d07ad
parent 10439
21c28b0f9e41
child 11090
f5f5f5803935
permissions
-rw-r--r--

MicroPython
- Adapted the CircuitPython library management to later versions of circup.

9740
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
10439
21c28b0f9e41 Updated copyright for 2024.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9756
diff changeset
3 # Copyright (c) 2023 - 2024 Detlev Offenbach <detlev@die-offenbachs.de>
9740
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing a dialog to generate a requirements file.
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 import os
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 import circup
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14 from PyQt6.QtCore import pyqtSlot
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15 from PyQt6.QtGui import QGuiApplication
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16 from PyQt6.QtWidgets import QAbstractButton, QDialog, QDialogButtonBox
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 from eric7.EricWidgets import EricFileDialog, EricMessageBox
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 from eric7.EricWidgets.EricApplication import ericApp
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 from eric7.EricWidgets.EricPathPicker import EricPathPickerModes
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 from eric7.SystemUtilities import FileSystemUtilities
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 from .Ui_RequirementsDialog import Ui_RequirementsDialog
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 class RequirementsDialog(QDialog, Ui_RequirementsDialog):
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 Class implementing a dialog to generate a requirements file.
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 def __init__(self, devicePath, parent=None):
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 Constructor
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 @param devicePath path to the connected board
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 @type str
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 @param parent reference to the parent widget (defaults to None)
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 @type QWidget (optional)
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 super().__init__(parent)
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 self.setupUi(self)
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 self.__title = self.tr("Generate Requirements")
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 self.__refreshButton = self.buttonBox.addButton(
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 self.tr("&Refresh"), QDialogButtonBox.ButtonRole.ActionRole
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 )
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 self.requirementsFilePicker.setMode(EricPathPickerModes.SAVE_FILE_MODE)
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 self.requirementsFilePicker.setFilters(
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 self.tr("Text Files (*.txt);;All Files (*)")
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 )
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 self.__devicePath = devicePath
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 self.__requirementsEdited = False
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 self.__requirementsAvailable = False
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 self.__generateRequirements()
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 def __updateButtons(self):
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 Private method to set the state of the various buttons.
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 self.saveButton.setEnabled(
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 self.__requirementsAvailable
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 and bool(self.requirementsFilePicker.text())
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 and os.path.isabs(self.requirementsFilePicker.text())
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 )
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 self.saveToButton.setEnabled(self.__requirementsAvailable)
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 self.copyButton.setEnabled(self.__requirementsAvailable)
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 aw = ericApp().getObject("ViewManager").activeWindow()
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 if aw and self.__requirementsAvailable:
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 self.insertButton.setEnabled(True)
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 self.replaceAllButton.setEnabled(True)
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 self.replaceSelectionButton.setEnabled(aw.hasSelectedText())
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 else:
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 self.insertButton.setEnabled(False)
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 self.replaceAllButton.setEnabled(False)
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 self.replaceSelectionButton.setEnabled(False)
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 @pyqtSlot(str)
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 def on_requirementsFilePicker_textChanged(self, txt):
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 Private slot handling a change of the requirements file name.
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 @param txt name of the requirements file
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 @type str
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 self.__updateButtons()
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 @pyqtSlot()
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 def on_requirementsEdit_textChanged(self):
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 Private slot handling changes of the requirements text.
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 self.__requirementsEdited = True
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 @pyqtSlot(QAbstractButton)
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 def on_buttonBox_clicked(self, button):
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 Private slot called by a button of the button box clicked.
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 @param button button that was clicked
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 @type QAbstractButton
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 if button == self.buttonBox.button(QDialogButtonBox.StandardButton.Close):
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 self.close()
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 elif button == self.__refreshButton:
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 self.__generateRequirements()
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 def __generateRequirements(self):
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 Private slot to generate the requirements specifiers list.
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 ok = (
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 EricMessageBox.yesNo(
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 self,
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 self.__title,
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 self.tr(
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 """The requirements were changed. Do you want"""
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 """ to overwrite these changes?"""
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 ),
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 )
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 if self.__requirementsEdited
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 else True
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 )
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 if ok:
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 self.requirementsEdit.clear()
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 self.__requirementsAvailable = False
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 if not bool(self.requirementsFilePicker.text()):
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134 self.requirementsFilePicker.setText("requirements.txt")
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 fileName = FileSystemUtilities.toNativeSeparators(
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 self.requirementsFilePicker.text()
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138 )
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139 if fileName and not os.path.isabs(fileName):
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140 fileName = ""
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
141
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142 modules = circup.find_modules(self.__devicePath, circup.get_bundles_list())
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143 specifiers = []
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 if modules:
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145 for module in modules:
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146 specifiers.append(
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147 "{0}=={1}".format(module.name, module.device_version)
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148 )
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150 if specifiers:
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151 self.requirementsEdit.setPlainText("\n".join(specifiers) + "\n")
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152 self.__requirementsAvailable = True
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153 else:
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 self.requirementsEdit.setPlainText(
9741
901caff48307 Updated translations.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9740
diff changeset
155 self.tr("No package specifiers generated.")
9740
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156 )
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158 self.__updateButtons()
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 self.__requirementsEdited = False
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162 def __writeToFile(self, fileName):
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 Private method to write the requirements text to a file.
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166 @param fileName name of the file to write to
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167 @type str
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169 if os.path.exists(fileName):
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
170 ok = EricMessageBox.warning(
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
171 self,
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
172 self.__title,
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173 self.tr(
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
174 """The file <b>{0}</b> already exists. Do you want"""
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
175 """ to overwrite it?"""
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176 ).format(fileName),
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177 )
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
178 if not ok:
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179 return
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
180
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
181 txt = self.requirementsEdit.toPlainText()
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
182 try:
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
183 with open(fileName, "w") as f:
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
184 f.write(txt)
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
185 except OSError as err:
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186 EricMessageBox.critical(
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187 self,
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
188 self.__title,
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
189 self.tr(
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
190 """<p>The requirements could not be written"""
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
191 """ to <b>{0}</b>.</p><p>Reason: {1}</p>"""
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
192 ).format(fileName, str(err)),
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
193 )
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
194
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
195 @pyqtSlot()
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
196 def on_saveButton_clicked(self):
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
197 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
198 Private slot to save the requirements text to the requirements file.
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
199 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
200 fileName = self.requirementsFilePicker.text()
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
201 self.__writeToFile(fileName)
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
202
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
203 @pyqtSlot()
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
204 def on_saveToButton_clicked(self):
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
205 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
206 Private slot to write the requirements text to a new file.
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
207 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
208 fileName, selectedFilter = EricFileDialog.getSaveFileNameAndFilter(
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
209 self,
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
210 self.__title,
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
211 os.path.expanduser("~"),
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
212 self.tr("Text Files (*.txt);;All Files (*)"),
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
213 None,
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
214 EricFileDialog.DontConfirmOverwrite,
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
215 )
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
216 if fileName:
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
217 ext = os.path.splitext(fileName)[1]
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
218 if not ext:
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
219 ex = selectedFilter.split("(*")[1].split(")")[0]
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
220 if ex:
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
221 fileName += ex
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
222 self.__writeToFile(fileName)
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
223
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
224 @pyqtSlot()
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
225 def on_copyButton_clicked(self):
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
226 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
227 Private slot to copy the requirements text to the clipboard.
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
228 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
229 txt = self.requirementsEdit.toPlainText()
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
230 cb = QGuiApplication.clipboard()
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
231 cb.setText(txt)
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
232
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
233 @pyqtSlot()
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
234 def on_insertButton_clicked(self):
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
235 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
236 Private slot to insert the requirements text at the cursor position
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
237 of the current editor.
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
238 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
239 aw = ericApp().getObject("ViewManager").activeWindow()
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
240 if aw:
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
241 aw.beginUndoAction()
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
242 aw.insert(self.requirementsEdit.toPlainText())
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
243 aw.endUndoAction()
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
244
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
245 @pyqtSlot()
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
246 def on_replaceSelectionButton_clicked(self):
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
247 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
248 Private slot to replace the selected text of the current editor
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
249 with the requirements text.
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
250 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
251 aw = ericApp().getObject("ViewManager").activeWindow()
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
252 if aw:
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
253 aw.beginUndoAction()
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
254 aw.replaceSelectedText(self.requirementsEdit.toPlainText())
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
255 aw.endUndoAction()
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
256
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
257 @pyqtSlot()
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
258 def on_replaceAllButton_clicked(self):
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
259 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
260 Private slot to replace the text of the current editor with the
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
261 requirements text.
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
262 """
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
263 aw = ericApp().getObject("ViewManager").activeWindow()
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
264 if aw:
90072e10ae9b MicroPython
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
265 aw.setText(self.requirementsEdit.toPlainText())

eric ide

mercurial