12 from PyQt6.QtCore import pyqtSlot, Qt |
12 from PyQt6.QtCore import pyqtSlot, Qt |
13 from PyQt6.QtWidgets import ( |
13 from PyQt6.QtWidgets import ( |
14 QDialog, QDialogButtonBox, QAbstractButton, QApplication |
14 QDialog, QDialogButtonBox, QAbstractButton, QApplication |
15 ) |
15 ) |
16 |
16 |
17 from E5Gui import E5MessageBox, E5FileDialog |
17 from E5Gui import EricMessageBox, EricFileDialog |
18 from E5Gui.E5PathPicker import E5PathPickerModes |
18 from E5Gui.EricPathPicker import EricPathPickerModes |
19 from E5Gui.E5Application import e5App |
19 from E5Gui.EricApplication import ericApp |
20 from E5Gui.E5OverrideCursor import E5OverrideCursor |
20 from E5Gui.EricOverrideCursor import EricOverrideCursor |
21 |
21 |
22 from .Ui_PipFreezeDialog import Ui_PipFreezeDialog |
22 from .Ui_PipFreezeDialog import Ui_PipFreezeDialog |
23 |
23 |
24 import Utilities |
24 import Utilities |
25 |
25 |
44 self.__refreshButton = self.buttonBox.addButton( |
44 self.__refreshButton = self.buttonBox.addButton( |
45 self.tr("&Refresh"), QDialogButtonBox.ButtonRole.ActionRole) |
45 self.tr("&Refresh"), QDialogButtonBox.ButtonRole.ActionRole) |
46 |
46 |
47 self.__environmentName = "" |
47 self.__environmentName = "" |
48 |
48 |
49 self.requirementsFilePicker.setMode(E5PathPickerModes.SAVE_FILE_MODE) |
49 self.requirementsFilePicker.setMode(EricPathPickerModes.SAVE_FILE_MODE) |
50 self.requirementsFilePicker.setFilters( |
50 self.requirementsFilePicker.setFilters( |
51 self.tr("Text Files (*.txt);;All Files (*)")) |
51 self.tr("Text Files (*.txt);;All Files (*)")) |
52 |
52 |
53 self.__pip = pip |
53 self.__pip = pip |
54 |
54 |
111 def __refresh(self): |
111 def __refresh(self): |
112 """ |
112 """ |
113 Private slot to refresh the displayed list. |
113 Private slot to refresh the displayed list. |
114 """ |
114 """ |
115 ok = ( |
115 ok = ( |
116 E5MessageBox.yesNo( |
116 EricMessageBox.yesNo( |
117 self, |
117 self, |
118 self.tr("Generate Requirements"), |
118 self.tr("Generate Requirements"), |
119 self.tr("""The requirements were changed. Do you want""" |
119 self.tr("""The requirements were changed. Do you want""" |
120 """ to overwrite these changes?""")) |
120 """ to overwrite these changes?""")) |
121 if self.__requirementsEdited else |
121 if self.__requirementsEdited else |
147 self.requirementsFilePicker.text()) |
147 self.requirementsFilePicker.text()) |
148 if os.path.exists(fileName): |
148 if os.path.exists(fileName): |
149 args.append("--requirement") |
149 args.append("--requirement") |
150 args.append(fileName) |
150 args.append(fileName) |
151 |
151 |
152 with E5OverrideCursor(): |
152 with EricOverrideCursor(): |
153 success, output = self.__pip.runProcess(args, interpreter) |
153 success, output = self.__pip.runProcess(args, interpreter) |
154 |
154 |
155 if success: |
155 if success: |
156 self.requirementsEdit.setPlainText(output) |
156 self.requirementsEdit.setPlainText(output) |
157 self.__requirementsAvailable = True |
157 self.__requirementsAvailable = True |
172 bool(self.requirementsFilePicker.text()) |
172 bool(self.requirementsFilePicker.text()) |
173 ) |
173 ) |
174 self.saveToButton.setEnabled(self.__requirementsAvailable) |
174 self.saveToButton.setEnabled(self.__requirementsAvailable) |
175 self.copyButton.setEnabled(self.__requirementsAvailable) |
175 self.copyButton.setEnabled(self.__requirementsAvailable) |
176 |
176 |
177 aw = e5App().getObject("ViewManager").activeWindow() |
177 aw = ericApp().getObject("ViewManager").activeWindow() |
178 if aw and self.__requirementsAvailable: |
178 if aw and self.__requirementsAvailable: |
179 self.insertButton.setEnabled(True) |
179 self.insertButton.setEnabled(True) |
180 self.replaceAllButton.setEnabled(True) |
180 self.replaceAllButton.setEnabled(True) |
181 self.replaceSelectionButton.setEnabled( |
181 self.replaceSelectionButton.setEnabled( |
182 aw.hasSelectedText()) |
182 aw.hasSelectedText()) |
191 |
191 |
192 @param fileName name of the file to write to |
192 @param fileName name of the file to write to |
193 @type str |
193 @type str |
194 """ |
194 """ |
195 if os.path.exists(fileName): |
195 if os.path.exists(fileName): |
196 ok = E5MessageBox.warning( |
196 ok = EricMessageBox.warning( |
197 self, |
197 self, |
198 self.tr("Generate Requirements"), |
198 self.tr("Generate Requirements"), |
199 self.tr("""The file <b>{0}</b> already exists. Do you want""" |
199 self.tr("""The file <b>{0}</b> already exists. Do you want""" |
200 """ to overwrite it?""").format(fileName)) |
200 """ to overwrite it?""").format(fileName)) |
201 if not ok: |
201 if not ok: |
203 |
203 |
204 try: |
204 try: |
205 with open(fileName, "w") as f: |
205 with open(fileName, "w") as f: |
206 f.write(self.requirementsEdit.toPlainText()) |
206 f.write(self.requirementsEdit.toPlainText()) |
207 except OSError as err: |
207 except OSError as err: |
208 E5MessageBox.critical( |
208 EricMessageBox.critical( |
209 self, |
209 self, |
210 self.tr("Generate Requirements"), |
210 self.tr("Generate Requirements"), |
211 self.tr("""<p>The requirements could not be written""" |
211 self.tr("""<p>The requirements could not be written""" |
212 """ to <b>{0}</b>.</p><p>Reason: {1}</p>""") |
212 """ to <b>{0}</b>.</p><p>Reason: {1}</p>""") |
213 .format(fileName, str(err))) |
213 .format(fileName, str(err))) |
223 @pyqtSlot() |
223 @pyqtSlot() |
224 def on_saveToButton_clicked(self): |
224 def on_saveToButton_clicked(self): |
225 """ |
225 """ |
226 Private slot to write the requirements text to a new file. |
226 Private slot to write the requirements text to a new file. |
227 """ |
227 """ |
228 fileName, selectedFilter = E5FileDialog.getSaveFileNameAndFilter( |
228 fileName, selectedFilter = EricFileDialog.getSaveFileNameAndFilter( |
229 self, |
229 self, |
230 self.tr("Generate Requirements"), |
230 self.tr("Generate Requirements"), |
231 os.path.expanduser("~"), |
231 os.path.expanduser("~"), |
232 self.tr("Text Files (*.txt);;All Files (*)"), |
232 self.tr("Text Files (*.txt);;All Files (*)"), |
233 None, |
233 None, |
234 E5FileDialog.DontConfirmOverwrite |
234 EricFileDialog.DontConfirmOverwrite |
235 ) |
235 ) |
236 if fileName: |
236 if fileName: |
237 ext = os.path.splitext(fileName)[1] |
237 ext = os.path.splitext(fileName)[1] |
238 if not ext: |
238 if not ext: |
239 ex = selectedFilter.split("(*")[1].split(")")[0] |
239 ex = selectedFilter.split("(*")[1].split(")")[0] |
254 def on_insertButton_clicked(self): |
254 def on_insertButton_clicked(self): |
255 """ |
255 """ |
256 Private slot to insert the requirements text at the cursor position |
256 Private slot to insert the requirements text at the cursor position |
257 of the current editor. |
257 of the current editor. |
258 """ |
258 """ |
259 aw = e5App().getObject("ViewManager").activeWindow() |
259 aw = ericApp().getObject("ViewManager").activeWindow() |
260 if aw: |
260 if aw: |
261 aw.beginUndoAction() |
261 aw.beginUndoAction() |
262 aw.insert(self.requirementsEdit.toPlainText()) |
262 aw.insert(self.requirementsEdit.toPlainText()) |
263 aw.endUndoAction() |
263 aw.endUndoAction() |
264 |
264 |
266 def on_replaceSelectionButton_clicked(self): |
266 def on_replaceSelectionButton_clicked(self): |
267 """ |
267 """ |
268 Private slot to replace the selected text of the current editor |
268 Private slot to replace the selected text of the current editor |
269 with the requirements text. |
269 with the requirements text. |
270 """ |
270 """ |
271 aw = e5App().getObject("ViewManager").activeWindow() |
271 aw = ericApp().getObject("ViewManager").activeWindow() |
272 if aw: |
272 if aw: |
273 aw.beginUndoAction() |
273 aw.beginUndoAction() |
274 aw.replaceSelectedText(self.requirementsEdit.toPlainText()) |
274 aw.replaceSelectedText(self.requirementsEdit.toPlainText()) |
275 aw.endUndoAction() |
275 aw.endUndoAction() |
276 |
276 |