RefactoringRope/InlineArgumentDefaultDialog.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 Inline Argument Default dialog.
8 """
9
10 from PyQt4.QtCore import pyqtSlot, Qt
11 from PyQt4.QtGui import QDialogButtonBox, QListWidgetItem, QAbstractButton
12
13 import rope.refactor.change_signature
14
15 from Ui_InlineArgumentDefaultDialog import Ui_InlineArgumentDefaultDialog
16 from RefactoringDialogBase import RefactoringDialogBase
17
18 class InlineArgumentDefaultDialog(RefactoringDialogBase,
19 Ui_InlineArgumentDefaultDialog):
20 """
21 Class implementing the Inline Argument Default dialog.
22 """
23 NameRole = Qt.UserRole
24
25 def __init__(self, refactoring, title, changer, parent=None):
26 """
27 Constructor
28
29 @param refactoring reference to the main refactoring object
30 (Refactoring)
31 @param title title of the dialog (string)
32 @param changer reference to the signature changer object
33 (rope.refactor.change_signature.ChangeSignature)
34 @param parent reference to the parent widget (QWidget)
35 """
36 RefactoringDialogBase.__init__(self, refactoring, title, parent)
37 self.setupUi(self)
38
39 self.__signature = changer
40 self.__definition_info = self.__signature.get_args()
41
42 self.__okButton = self.buttonBox.button(QDialogButtonBox.Ok)
43 self.__okButton.setEnabled(False)
44 self.__previewButton = self.buttonBox.addButton(
45 self.trUtf8("Preview"), QDialogButtonBox.ActionRole)
46 self.__previewButton.setDefault(True)
47 self.__previewButton.setEnabled(False)
48
49 # populate the parameters list
50 for arg, default in self.__definition_info:
51 if default is not None:
52 itm = QListWidgetItem("{0} = {1}".format(arg, default),
53 self.parameterList)
54 itm.setData(InlineArgumentDefaultDialog.NameRole, arg)
55
56 @pyqtSlot()
57 def on_parameterList_itemSelectionChanged(self):
58 """
59 Private slot called, when the selection changes.
60 """
61 self.__okButton.setEnabled(
62 len(self.parameterList.selectedItems()) > 0)
63 self.__previewButton.setEnabled(
64 len(self.parameterList.selectedItems()) > 0)
65
66 @pyqtSlot(QAbstractButton)
67 def on_buttonBox_clicked(self, button):
68 """
69 Private slot to act on the button pressed.
70
71 @param button reference to the button pressed (QAbstractButton)
72 """
73 if button == self.__previewButton:
74 self.previewChanges()
75 elif button == self.__okButton:
76 self.applyChanges()
77
78 def __getParameterIndex(self, definition_info, name):
79 """
80 Private method to calculate the index of the given paramter.
81
82 @param definition_info object containing the method definition
83 @param name parameter name (string)
84 @return index of the parameter (integer)
85 """
86 for index, pair in enumerate(definition_info):
87 if pair[0] == name:
88 return index
89
90 def _calculateChanges(self, handle):
91 """
92 Protected method to calculate the changes.
93
94 @param handle reference to the task handle
95 (rope.base.taskhandle.TaskHandle)
96 @return reference to the Changes object (rope.base.change.ChangeSet)
97 """
98 items = self.parameterList.selectedItems()
99 if len(items) > 0:
100 itm = items[0]
101 name = itm.data(InlineArgumentDefaultDialog.NameRole)
102 index = self.__getParameterIndex(self.__definition_info, name)
103 try:
104 inliner = \
105 rope.refactor.change_signature.ArgumentDefaultInliner(
106 index)
107 changes = self.__signature.get_changes([inliner],
108 task_handle=handle)
109 return changes
110 except Exception as err:
111 self._refactoring.handleRopeError(err, self._title, handle)
112 return None

eric ide

mercurial