PluginRefactoringRope.py

changeset 1
9f687137a929
parent 0
e3924615f9a3
child 20
83b71483e198
equal deleted inserted replaced
0:e3924615f9a3 1:9f687137a929
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2011 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing the Rope refactoring plugin.
8 """
9
10 import os
11
12 from PyQt4.QtCore import QObject, QTranslator, SIGNAL
13
14 from E5Gui.E5Application import e5App
15
16 from Preferences.Shortcuts import readShortcuts
17
18 # Start-Of-Header
19 name = "Refactoring Rope Plugin"
20 author = "Detlev Offenbach <detlev@die-offenbachs.de>"
21 autoactivate = True
22 deactivateable = True
23 version = "2.0.0"
24 className = "RefactoringRopePlugin"
25 packageName = "RefactoringRope"
26 internalPackages = "rope"
27 shortDescription = "Refactoring using the Rope library."
28 longDescription = """This plugin implements refactoring functionality""" \
29 """ using the Rope refactoring library."""
30 pyqtApi = 2
31 # End-Of-Header
32
33 error = ""
34
35 class RefactoringRopePlugin(QObject):
36 """
37 Class implementing the Rope refactoring plugin.
38 """
39 def __init__(self, ui):
40 """
41 Constructor
42
43 @param ui reference to the user interface object (UI.UserInterface)
44 """
45 QObject.__init__(self, ui)
46 self.__ui = ui
47 self.__initialize()
48
49 self.__newStyle = ui.versionIsNewer("5.0.99", "20100811")
50
51 self.__translator = None
52 self.__loadTranslator()
53
54 def __initialize(self):
55 """
56 Private slot to (re)initialize the plugin.
57 """
58 self.__object = None
59
60 self.__mainAct = None
61 self.__mainMenu = None
62 self.__projectIsOpen = False
63
64 def activate(self):
65 """
66 Public method to activate this plugin.
67
68 @return tuple of None and activation status (boolean)
69 """
70 from RefactoringRope.Refactoring import Refactoring
71
72 self.__object = Refactoring(self, self.__ui)
73 self.__object.initActions()
74 e5App().registerPluginObject("RefactoringRope", self.__object)
75 try:
76 readShortcuts(pluginName = "RefactoringRope")
77 except TypeError:
78 # backwards comaytibility, ignore
79 pass
80
81 self.__mainMenu = self.__object.initMenu()
82 extrasAct = self.__ui.getMenuBarAction("extras")
83 self.__mainAct = self.__ui.menuBar().insertMenu(
84 extrasAct, self.__mainMenu)
85
86 if e5App().getObject("Project").isOpen():
87 self.__mainAct.setEnabled(True)
88 self.__object.projectOpened()
89 else:
90 self.__mainAct.setEnabled(False)
91
92 if self.__newStyle:
93 e5App().getObject("Project").projectOpened.connect(
94 self.__object.projectOpened)
95 e5App().getObject("Project").projectClosed.connect(
96 self.__object.projectClosed)
97 e5App().getObject("Project").newProject.connect(
98 self.__object.projectOpened)
99
100 e5App().getObject("Project").projectOpened.connect(
101 self.__projectOpened)
102 e5App().getObject("Project").projectClosed.connect(
103 self.__projectClosed)
104 e5App().getObject("Project").newProject.connect(
105 self.__projectOpened)
106 else:
107 self.connect(e5App().getObject("Project"), SIGNAL('projectOpened'),
108 self.__object.projectOpened)
109 self.connect(e5App().getObject("Project"), SIGNAL('projectClosed'),
110 self.__object.projectClosed)
111 self.connect(e5App().getObject("Project"), SIGNAL('newProject'),
112 self.__object.projectOpened)
113
114 self.connect(e5App().getObject("Project"), SIGNAL('projectOpened'),
115 self.__projectOpened)
116 self.connect(e5App().getObject("Project"), SIGNAL('projectClosed'),
117 self.__projectClosed)
118 self.connect(e5App().getObject("Project"), SIGNAL('newProject'),
119 self.__projectOpened)
120
121 return None, True
122
123 def deactivate(self):
124 """
125 Public method to deactivate this plugin.
126 """
127 e5App().unregisterPluginObject("RefactoringRope")
128
129 if self.__newStyle:
130 e5App().getObject("Project").projectOpened.disconnect(
131 self.__object.projectOpened)
132 e5App().getObject("Project").projectClosed.disconnect(
133 self.__object.projectClosed)
134 e5App().getObject("Project").newProject.disconnect(
135 self.__object.projectOpened)
136
137 e5App().getObject("Project").projectOpened.disconnect(
138 self.__projectOpened)
139 e5App().getObject("Project").projectClosed.disconnect(
140 self.__projectClosed)
141 e5App().getObject("Project").newProject.disconnect(
142 self.__projectOpened)
143 else:
144 self.disconnect(e5App().getObject("Project"),
145 SIGNAL('projectOpened'),
146 self.__object.projectOpened)
147 self.disconnect(e5App().getObject("Project"),
148 SIGNAL('projectClosed'),
149 self.__object.projectClosed)
150 self.disconnect(e5App().getObject("Project"),
151 SIGNAL('newProject'),
152 self.__object.projectOpened)
153
154 self.disconnect(e5App().getObject("Project"),
155 SIGNAL('projectOpened'),
156 self.__projectOpened)
157 self.disconnect(e5App().getObject("Project"),
158 SIGNAL('projectClosed'),
159 self.__projectClosed)
160 self.disconnect(e5App().getObject("Project"),
161 SIGNAL('newProject'),
162 self.__projectOpened)
163
164 self.__ui.menuBar().removeAction(self.__mainAct)
165
166 self.__initialize()
167
168 def __loadTranslator(self):
169 """
170 Private method to load the translation file.
171 """
172 if self.__ui is not None:
173 loc = self.__ui.getLocale()
174 if loc and loc != "C":
175 locale_dir = \
176 os.path.join(os.path.dirname(__file__),
177 "RefactoringRope", "i18n")
178 translation = "rope_%s" % loc
179 translator = QTranslator(None)
180 loaded = translator.load(translation, locale_dir)
181 if loaded:
182 self.__translator = translator
183 e5App().installTranslator(self.__translator)
184 else:
185 print("Warning: translation file '{0}' could not"
186 " be loaded.".format(translation))
187 print("Using default.")
188
189 def __projectOpened(self):
190 """
191 Public slot to handle the projectOpened signal.
192 """
193 if e5App().getObject("Project").getProjectLanguage() in ["Python3"]:
194 self.__mainAct.setEnabled(True)
195 self.__projectIsOpen = True
196
197 def __projectClosed(self):
198 """
199 Public slot to handle the projectClosed signal.
200 """
201 self.__mainAct.setEnabled(False)
202 self.__projectIsOpen = False

eric ide

mercurial