Sat, 31 Dec 2016 13:51:04 +0100
Updated copyright for 2017.
# -*- coding: utf-8 -*- # Copyright (c) 2010 - 2017 Detlev Offenbach <detlev@die-offenbachs.de> # """ Module implementing the History dialog. """ from __future__ import unicode_literals from PyQt5.QtCore import Qt, pyqtSlot from PyQt5.QtWidgets import QDialogButtonBox, QListWidgetItem, QApplication from E5Gui.E5Application import e5App from E5Gui import E5MessageBox from PreviewDialogBase import PreviewDialogBase import Utilities class HistoryDialog(PreviewDialogBase): """ Class implementing the History dialog. """ ChangeIDRole = Qt.UserRole def __init__(self, refactoring, changes, isUndo, parent=None): """ Constructor @param refactoring reference to the main refactoring object (Refactoring) @param changes list of ChangeSet objects (list of rope.base.change.ChangeSet) @param isUndo flag indicating an undo history dialog (boolean) @param parent reference to the parent widget (QWidget) """ PreviewDialogBase.__init__(self, parent) self.__refactoring = refactoring self.__isUndo = isUndo if self.__isUndo: self.__actionButton = self.buttonBox.addButton( self.tr("&Undo"), QDialogButtonBox.AcceptRole) self.description.setText(self.tr("Undoable Changes")) title = self.tr("Undo History") else: self.__actionButton = self.buttonBox.addButton( self.tr("&Redo"), QDialogButtonBox.AcceptRole) self.description.setText(self.tr("Redoable Changes")) title = self.tr("Redo History") self.buttonBox.addButton(QDialogButtonBox.Close) self.setWindowTitle(title) # populate the list self.__changes = {} for change in changes: self.__changes[id(change)] = change itm = QListWidgetItem(str(change), self.changesList) itm.setData(HistoryDialog.ChangeIDRole, id(change)) if self.changesList.count() > 0: self.changesList.item(0).setSelected(True) @pyqtSlot(QListWidgetItem, QListWidgetItem) def on_changesList_currentItemChanged(self, current, previous): """ Private slot called when a change is selected. @param current reference to the new current item (QListWidgetItem) @param previous reference to the old current item (QListWidgetItem) """ if current is None: return self.previewEdit.clear() id = current.data(HistoryDialog.ChangeIDRole) change = self.__changes[id] for line in change.get_description().splitlines(True): try: format = self.formats[line[0]] except (IndexError, KeyError): format = self.formats[' '] self._appendText(line, format) def accept(self): """ Public slot to undo the selected set of changes. """ id = self.changesList.currentItem()\ .data(HistoryDialog.ChangeIDRole) change = self.__changes[id] if self.__isUndo: res = E5MessageBox.yesNo( None, self.tr("Undo refactorings"), self.tr("""Shall all refactorings up to <b>{0}</b>""" """ be undone?""") .format(Utilities.html_encode(str(change)))) else: res = E5MessageBox.yesNo( None, self.tr("Redo refactorings"), self.tr("""Shall all refactorings up to <b>{0}</b>""" """ be redone?""") .format(Utilities.html_encode(str(change)))) if res: if not self.__refactoring.confirmAllBuffersSaved(): return from ProgressHandle import ProgressHandle handle = ProgressHandle(change.description, False, self) handle.show() QApplication.processEvents() if self.__isUndo: self.__refactoring.getProject().history.undo( change, task_handle=handle) else: self.__refactoring.getProject().history.redo( change, task_handle=handle) handle.reset() self.__refactoring.refreshEditors(change) p = e5App().getObject("Project") if p.isDirty(): p.saveProject() PreviewDialogBase.accept(self) else: self.reject()