Wed, 01 Jan 2014 14:47:56 +0100
Updated copyright for 2014.
# -*- coding: utf-8 -*- # Copyright (c) 2010 - 2014 Detlev Offenbach <detlev@die-offenbachs.de> # """ Module implementing the History dialog. """ from PyQt4.QtCore import Qt, pyqtSlot from PyQt4.QtGui 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.trUtf8("&Undo"), QDialogButtonBox.AcceptRole) self.description.setText(self.trUtf8("Undoable Changes")) title = self.trUtf8("Undo History") else: self.__actionButton = self.buttonBox.addButton( self.trUtf8("&Redo"), QDialogButtonBox.AcceptRole) self.description.setText(self.trUtf8("Redoable Changes")) title = self.trUtf8("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.trUtf8("Undo refactorings"), self.trUtf8("""Shall all refactorings up to <b>{0}</b>""" """ be undone?""") .format(Utilities.html_encode(str(change)))) else: res = E5MessageBox.yesNo( None, self.trUtf8("Redo refactorings"), self.trUtf8("""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()