RefactoringRope/RenameDialog.py

Sat, 29 Jan 2011 15:10:40 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 29 Jan 2011 15:10:40 +0100
changeset 3
3be1b4662b48
child 9
8cee612bcc28
permissions
-rw-r--r--

Added the 'rename' refactorings.

3
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 # Copyright (c) 2011 Detlev Offenbach <detlev@die-offenbachs.de>
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing the Rename dialog.
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 from PyQt4.QtCore import pyqtSlot
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 from PyQt4.QtGui import QDialogButtonBox, QAbstractButton, QMessageBox
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13 from E5Gui.E5Application import e5App
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14 from E5Gui import E5MessageBox
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16 from Ui_RenameDialog import Ui_RenameDialog
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 from RefactoringDialogBase import RefactoringDialogBase
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 class RenameDialog(RefactoringDialogBase, Ui_RenameDialog):
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 """
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 Class implementing the Rename dialog.
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 """
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 def __init__(self, refactoring, title, renamer, resource=None,
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 parent=None):
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 """
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 Constructor
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 @param refactoring reference to the main refactoring object
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 (Refactoring)
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 @param title title of the dialog (string)
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 @param renamer reference to the renamer object
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 (rope.refactor.rename.Rename)
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 @param resource reference to a resource object, if the action is to
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 be applied to the local file only (rope.base.resources.File)
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 @param parent reference to the parent widget (QWidget)
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 """
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 RefactoringDialogBase.__init__(self, refactoring, title, parent)
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 self.setupUi(self)
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 self.__renamer = renamer
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 if resource is not None:
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 self.__resources = [resource]
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 else:
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 self.__resources = None
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 self.__okButton = self.buttonBox.button(QDialogButtonBox.Ok)
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 self.__okButton.setEnabled(False)
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 self.__previewButton = self.buttonBox.addButton(\
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 self.trUtf8("Preview"), QDialogButtonBox.ActionRole)
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 self.__previewButton.setDefault(True)
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 @pyqtSlot(str)
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 def on_newNameEdit_textChanged(self, text):
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 """
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 Private slot to react to changes of the new name.
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 @param text text entered into the edit (QString)
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 """
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 self.__okButton.setEnabled(text != "")
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 @pyqtSlot(QAbstractButton)
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 def on_buttonBox_clicked(self, button):
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 """
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 Private slot to act on the button pressed.
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 @param button reference to the button pressed (QAbstractButton)
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 """
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 if button == self.__previewButton:
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 self.previewChanges()
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 elif button == self.__okButton:
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 self.applyChanges()
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 def __confirmUnsure(self, occurrence):
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 """
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 Private method to confirm unsure occurrences.
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 @parameter occurrence reference to the occurrence object
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 (rope.refactor.occurrences.Occurrence)
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 @return flag indicating an occurrence (boolean)
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 """
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 if self.ignoreButton.isChecked():
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 return False
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 if self.matchButton.isChecked():
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 return True
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 filename = occurrence.resource.real_path
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 start, end = occurrence.get_primary_range()
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91 vm = e5App().getObject("ViewManager")
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 # display the file and select the match
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 vm.openSourceFile(filename)
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 aw = vm.activeWindow()
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 cline, cindex = aw.getCursorPosition()
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 sline, sindex = aw.lineIndexFromPosition(start)
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 eline, eindex = aw.lineIndexFromPosition(end)
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 aw.ensureLineVisible(sline)
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 aw.gotoLine(sline)
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 aw.setSelection(sline, sindex, eline, eindex)
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 ans = E5MessageBox.question(self, self.trUtf8("Rename"),
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 self.trUtf8("<p>Is the highlighted code a match?</p>"),
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 QMessageBox.StandardButtons(\
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 QMessageBox.No | \
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 QMessageBox.Yes),
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 QMessageBox.Yes)
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 aw.setCursorPosition(cline, cindex)
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 aw.ensureCursorVisible()
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 return ans == QMessageBox.Yes
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 def _calculateChanges(self, handle):
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 """
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 Protected method to calculate the changes.
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 @param handle reference to the task handle
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 (rope.base.taskhandle.TaskHandle)
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 @return reference to the Changes object (rope.base.change.ChangeSet)
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 """
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 try:
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 changes = self.__renamer.get_changes(self.newNameEdit.text(),
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 resources=self.__resources,
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 in_hierarchy=self.allCheckBox.isChecked(),
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 unsure=self.__confirmUnsure,
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 docs=self.stringsCheckBox.isChecked(),
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 task_handle=handle)
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 return changes
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 except Exception as err:
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 self._refactoring.handleRopeError(err, self._title, handle)
3be1b4662b48 Added the 'rename' refactorings.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 return None

eric ide

mercurial