RefactoringRope/HistoryDialog.py

Fri, 25 Oct 2013 19:33:36 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Fri, 25 Oct 2013 19:33:36 +0200
changeset 55
d501156be247
parent 48
de33dc93a3ac
child 62
1077db8d0589
permissions
-rw-r--r--

Fixed code style issues.

# -*- coding: utf-8 -*-

# Copyright (c) 2010 - 2013 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()

eric ide

mercurial