12 |
12 |
13 from PyQt6.QtCore import pyqtSlot, QFileInfo, Qt |
13 from PyQt6.QtCore import pyqtSlot, QFileInfo, Qt |
14 from PyQt6.QtGui import QTextCursor |
14 from PyQt6.QtGui import QTextCursor |
15 from PyQt6.QtWidgets import QWidget, QDialogButtonBox |
15 from PyQt6.QtWidgets import QWidget, QDialogButtonBox |
16 |
16 |
17 from E5Gui import E5MessageBox, E5FileDialog |
17 from E5Gui import EricMessageBox, EricFileDialog |
18 from E5Gui.E5Application import e5App |
18 from E5Gui.EricApplication import ericApp |
19 |
19 |
20 from .Ui_GitDiffDialog import Ui_GitDiffDialog |
20 from .Ui_GitDiffDialog import Ui_GitDiffDialog |
21 |
21 |
22 from .GitDiffHighlighter import GitDiffHighlighter |
22 from .GitDiffHighlighter import GitDiffHighlighter |
23 from .GitDiffGenerator import GitDiffGenerator |
23 from .GitDiffGenerator import GitDiffGenerator |
51 self.buttonBox.button( |
51 self.buttonBox.button( |
52 QDialogButtonBox.StandardButton.Close).setDefault(True) |
52 QDialogButtonBox.StandardButton.Close).setDefault(True) |
53 |
53 |
54 try: |
54 try: |
55 # insert the search widget if it is available |
55 # insert the search widget if it is available |
56 from E5Gui.E5TextEditSearchWidget import E5TextEditSearchWidget |
56 from E5Gui.EricTextEditSearchWidget import EricTextEditSearchWidget |
57 self.searchWidget = E5TextEditSearchWidget(self.contentsGroup) |
57 self.searchWidget = EricTextEditSearchWidget(self.contentsGroup) |
58 self.searchWidget.setFocusPolicy(Qt.FocusPolicy.WheelFocus) |
58 self.searchWidget.setFocusPolicy(Qt.FocusPolicy.WheelFocus) |
59 self.searchWidget.setObjectName("searchWidget") |
59 self.searchWidget.setObjectName("searchWidget") |
60 self.contentsGroup.layout().insertWidget(1, self.searchWidget) |
60 self.contentsGroup.layout().insertWidget(1, self.searchWidget) |
61 self.searchWidget.attachTextEdit(self.contents) |
61 self.searchWidget.attachTextEdit(self.contents) |
62 |
62 |
63 self.searchWidget2 = E5TextEditSearchWidget(self.contentsGroup) |
63 self.searchWidget2 = EricTextEditSearchWidget(self.contentsGroup) |
64 self.searchWidget2.setFocusPolicy(Qt.FocusPolicy.WheelFocus) |
64 self.searchWidget2.setFocusPolicy(Qt.FocusPolicy.WheelFocus) |
65 self.searchWidget2.setObjectName("searchWidget2") |
65 self.searchWidget2.setObjectName("searchWidget2") |
66 self.contentsGroup.layout().addWidget(self.searchWidget2) |
66 self.contentsGroup.layout().addWidget(self.searchWidget2) |
67 self.searchWidget2.attachTextEdit(self.contents2) |
67 self.searchWidget2.attachTextEdit(self.contents2) |
68 |
68 |
168 self.tr("Difference ({0})").format(msg)) |
168 self.tr("Difference ({0})").format(msg)) |
169 |
169 |
170 procStarted = self.__diffGenerator.start( |
170 procStarted = self.__diffGenerator.start( |
171 fn, versions=versions, diffMode=diffMode, stashName=stashName) |
171 fn, versions=versions, diffMode=diffMode, stashName=stashName) |
172 if not procStarted: |
172 if not procStarted: |
173 E5MessageBox.critical( |
173 EricMessageBox.critical( |
174 self, |
174 self, |
175 self.tr('Process Generation Error'), |
175 self.tr('Process Generation Error'), |
176 self.tr( |
176 self.tr( |
177 'The process {0} could not be started. ' |
177 'The process {0} could not be started. ' |
178 'Ensure, that it is in the search path.' |
178 'Ensure, that it is in the search path.' |
316 else: |
316 else: |
317 fname = dname |
317 fname = dname |
318 else: |
318 else: |
319 fname = self.vcs.splitPath(self.__filename)[0] |
319 fname = self.vcs.splitPath(self.__filename)[0] |
320 |
320 |
321 fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter( |
321 fname, selectedFilter = EricFileDialog.getSaveFileNameAndFilter( |
322 self, |
322 self, |
323 self.tr("Save Diff"), |
323 self.tr("Save Diff"), |
324 fname, |
324 fname, |
325 self.tr("Patch Files (*.diff)"), |
325 self.tr("Patch Files (*.diff)"), |
326 None, |
326 None, |
327 E5FileDialog.DontConfirmOverwrite) |
327 EricFileDialog.DontConfirmOverwrite) |
328 |
328 |
329 if not fname: |
329 if not fname: |
330 return # user aborted |
330 return # user aborted |
331 |
331 |
332 ext = QFileInfo(fname).suffix() |
332 ext = QFileInfo(fname).suffix() |
333 if not ext: |
333 if not ext: |
334 ex = selectedFilter.split("(*")[1].split(")")[0] |
334 ex = selectedFilter.split("(*")[1].split(")")[0] |
335 if ex: |
335 if ex: |
336 fname += ex |
336 fname += ex |
337 if QFileInfo(fname).exists(): |
337 if QFileInfo(fname).exists(): |
338 res = E5MessageBox.yesNo( |
338 res = EricMessageBox.yesNo( |
339 self, |
339 self, |
340 self.tr("Save Diff"), |
340 self.tr("Save Diff"), |
341 self.tr("<p>The patch file <b>{0}</b> already exists." |
341 self.tr("<p>The patch file <b>{0}</b> already exists." |
342 " Overwrite it?</p>").format(fname), |
342 " Overwrite it?</p>").format(fname), |
343 icon=E5MessageBox.Warning) |
343 icon=EricMessageBox.Warning) |
344 if not res: |
344 if not res: |
345 return |
345 return |
346 fname = Utilities.toNativeSeparators(fname) |
346 fname = Utilities.toNativeSeparators(fname) |
347 |
347 |
348 eol = e5App().getObject("Project").getEolString() |
348 eol = ericApp().getObject("Project").getEolString() |
349 try: |
349 try: |
350 with open(fname, "w", encoding="utf-8", newline="") as f: |
350 with open(fname, "w", encoding="utf-8", newline="") as f: |
351 f.write(eol.join(self.contents2.toPlainText().splitlines())) |
351 f.write(eol.join(self.contents2.toPlainText().splitlines())) |
352 f.write(eol) |
352 f.write(eol) |
353 except OSError as why: |
353 except OSError as why: |
354 E5MessageBox.critical( |
354 EricMessageBox.critical( |
355 self, self.tr('Save Diff'), |
355 self, self.tr('Save Diff'), |
356 self.tr( |
356 self.tr( |
357 '<p>The patch file <b>{0}</b> could not be saved.' |
357 '<p>The patch file <b>{0}</b> could not be saved.' |
358 '<br>Reason: {1}</p>') |
358 '<br>Reason: {1}</p>') |
359 .format(fname, str(why))) |
359 .format(fname, str(why))) |