RefactoringRope/RestructureDialog.py

changeset 11
562f9758d2e1
child 20
83b71483e198
equal deleted inserted replaced
10:0fdfae822ca7 11:562f9758d2e1
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2011 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing the Restructure dialog.
8 """
9
10 from PyQt4.QtCore import pyqtSlot
11 from PyQt4.QtGui import QDialogButtonBox, QAbstractButton
12
13 import rope.refactor.restructure
14
15 from Ui_RestructureDialog import Ui_RestructureDialog
16 from RefactoringDialogBase import RefactoringDialogBase
17
18 class RestructureDialog(RefactoringDialogBase, Ui_RestructureDialog):
19 """
20 Class implementing the Restructure dialog.
21 """
22 history = None
23
24 def __init__(self, refactoring, title, parent = None):
25 """
26 Constructor
27
28 @param refactoring reference to the main refactoring object
29 (Refactoring)
30 @param title title of the dialog (string)
31 @param parent reference to the parent widget (QWidget)
32 """
33 RefactoringDialogBase.__init__(self, refactoring, title, parent)
34 self.setupUi(self)
35
36 self.__okButton = self.buttonBox.button(QDialogButtonBox.Ok)
37 self.__okButton.setEnabled(False)
38 self.__previewButton = self.buttonBox.addButton(
39 self.trUtf8("Preview"), QDialogButtonBox.ActionRole)
40 self.__previewButton.setDefault(True)
41
42 self.__loadData()
43
44 def __updateUI(self):
45 """
46 Private slot to update the UI.
47 """
48 self.__okButton.setEnabled(self.patternEdit.toPlainText() != "" and \
49 self.goalEdit.toPlainText() != "")
50
51 @pyqtSlot()
52 def on_patternEdit_textChanged(self):
53 """
54 Private slot to react to changes of the pattern.
55 """
56 self.__updateUI()
57
58 @pyqtSlot()
59 def on_goalEdit_textChanged(self):
60 """
61 Private slot to react to changes of the goal.
62 """
63 self.__updateUI()
64
65 @pyqtSlot(QAbstractButton)
66 def on_buttonBox_clicked(self, button):
67 """
68 Private slot to act on the button pressed.
69
70 @param button reference to the button pressed (QAbstractButton)
71 """
72 if button == self.__previewButton:
73 self.previewChanges()
74 elif button == self.__okButton:
75 self.applyChanges()
76
77 def _calculateChanges(self, handle):
78 """
79 Protected method to calculate the changes.
80
81 @param handle reference to the task handle
82 (rope.base.taskhandle.TaskHandle)
83 @return reference to the Changes object (rope.base.change.ChangeSet)
84 """
85 self.__saveData()
86 pattern = self.patternEdit.toPlainText()
87 goal = self.goalEdit.toPlainText()
88 imports = [line for line in self.importsEdit.toPlainText().splitlines()
89 if line.strip()]
90
91 args = {}
92 checks = self.argsEdit.toPlainText().splitlines()
93 for check in checks:
94 if ':' in check:
95 splitted = check.split(':', 1)
96 name = splitted[0].strip()
97 value = splitted[1].strip()
98 args[name] = value
99
100 self._refactoring.getProject().validate(
101 self._refactoring.getProject().root)
102 try:
103 restructuring = rope.refactor.restructure.Restructure(
104 self._refactoring.getProject(), pattern, goal,
105 args=args, imports=imports)
106 changes = restructuring.get_changes(task_handle=handle)
107 except Exception as err:
108 self._refactoring.handleRopeError(err, self._title)
109 return None
110
111 return changes
112
113 def __saveData(self):
114 """
115 Private slot to save the data for later reuse.
116 """
117 data = {'pattern' : self.patternEdit.toPlainText(),
118 'goal' : self.goalEdit.toPlainText(),
119 'checks' : self.argsEdit.toPlainText(),
120 'imports' : self.importsEdit.toPlainText()
121 }
122 RestructureDialog.history = data
123
124 def __loadData(self):
125 """
126 Private slot to load the history data into the dialog.
127 """
128 if RestructureDialog.history is not None:
129 data = RestructureDialog.history
130 self.patternEdit.setPlainText(data['pattern'])
131 self.goalEdit.setPlainText(data['goal'])
132 self.argsEdit.setPlainText(data['checks'])
133 self.importsEdit.setPlainText(data['imports'])

eric ide

mercurial