RefactoringRope/RenameDialog.py

Sat, 12 Apr 2014 19:47:46 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 12 Apr 2014 19:47:46 +0200
changeset 74
0973b175e2ad
parent 62
1077db8d0589
child 76
936b2a98fe4e
permissions
-rw-r--r--

Fixed a window sizing issue.

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

# Copyright (c) 2010 - 2014 Detlev Offenbach <detlev@die-offenbachs.de>
#

"""
Module implementing the Rename dialog.
"""

from PyQt4.QtCore import pyqtSlot
from PyQt4.QtGui import QDialogButtonBox, QAbstractButton

from E5Gui.E5Application import e5App
from E5Gui import E5MessageBox

from Ui_RenameDialog import Ui_RenameDialog
from RefactoringDialogBase import RefactoringDialogBase


class RenameDialog(RefactoringDialogBase, Ui_RenameDialog):
    """
    Class implementing the Rename dialog.
    """
    def __init__(self, refactoring, title, renamer, resource=None,
                 parent=None):
        """
        Constructor
        
        @param refactoring reference to the main refactoring object
            (Refactoring)
        @param title title of the dialog (string)
        @param renamer reference to the renamer object
            (rope.refactor.rename.Rename)
        @param resource reference to a resource object, if the action is to
            be applied to the local file only (rope.base.resources.File)
        @param parent reference to the parent widget (QWidget)
        """
        RefactoringDialogBase.__init__(self, refactoring, title, parent)
        self.setupUi(self)
        
        self.__renamer = renamer
        if resource is not None:
            self.__resources = [resource]
        else:
            self.__resources = None
        
        self.__okButton = self.buttonBox.button(QDialogButtonBox.Ok)
        self.__okButton.setEnabled(False)
        self.__previewButton = self.buttonBox.addButton(
            self.trUtf8("Preview"), QDialogButtonBox.ActionRole)
        self.__previewButton.setDefault(True)
        
        msh = self.minimumSizeHint()
        self.resize(max(self.width(), msh.width()), msh.height())
    
    @pyqtSlot(str)
    def on_newNameEdit_textChanged(self, text):
        """
        Private slot to react to changes of the new name.
        
        @param text text entered into the edit (string)
        """
        self.__okButton.setEnabled(text != "")
    
    @pyqtSlot(QAbstractButton)
    def on_buttonBox_clicked(self, button):
        """
        Private slot to act on the button pressed.
        
        @param button reference to the button pressed (QAbstractButton)
        """
        if button == self.__previewButton:
            self.previewChanges()
        elif button == self.__okButton:
            self.applyChanges()
    
    def __confirmUnsure(self, occurrence):
        """
        Private method to confirm unsure occurrences.
        
        @parameter occurrence reference to the occurrence object
            (rope.refactor.occurrences.Occurrence)
        @return flag indicating an occurrence (boolean)
        """
        if self.ignoreButton.isChecked():
            return False
        if self.matchButton.isChecked():
            return True
        
        filename = occurrence.resource.real_path
        start, end = occurrence.get_primary_range()
        
        vm = e5App().getObject("ViewManager")
        
        # display the file and select the match
        vm.openSourceFile(filename)
        aw = vm.activeWindow()
        cline, cindex = aw.getCursorPosition()
        sline, sindex = aw.lineIndexFromPosition(start)
        eline, eindex = aw.lineIndexFromPosition(end)
        aw.ensureLineVisible(sline)
        aw.gotoLine(sline)
        aw.setSelection(sline, sindex, eline, eindex)
        ans = E5MessageBox.yesNo(
            self,
            self.trUtf8("Rename"),
            self.trUtf8("""<p>Is the highlighted code a match?</p>"""),
            yesDefault=True)
        aw.setCursorPosition(cline, cindex)
        aw.ensureCursorVisible()
        
        return ans
    
    def _calculateChanges(self, handle):
        """
        Protected method to calculate the changes.
        
        @param handle reference to the task handle
            (rope.base.taskhandle.TaskHandle)
        @return reference to the Changes object (rope.base.change.ChangeSet)
        """
        try:
            changes = self.__renamer.get_changes(
                self.newNameEdit.text(),
                resources=self.__resources,
                in_hierarchy=self.allCheckBox.isChecked(),
                unsure=self.__confirmUnsure,
                docs=self.stringsCheckBox.isChecked(),
                task_handle=handle)
            return changes
        except Exception as err:
            self._refactoring.handleRopeError(err, self._title, handle)
            return None

eric ide

mercurial