44 |
44 |
45 def apiFiles(language): |
45 def apiFiles(language): |
46 """ |
46 """ |
47 Module function to return the API files made available by this plugin. |
47 Module function to return the API files made available by this plugin. |
48 |
48 |
49 @param language language to get APIs for (string) |
49 @param language language to get APIs for |
50 @return list of API filenames (list of string) |
50 @type str |
|
51 @return list of API filenames |
|
52 @rtype list of str |
51 """ |
53 """ |
52 if language in ["Python3"]: |
54 if language in ["Python3"]: |
53 apisDir = os.path.join(os.path.dirname(__file__), |
55 apisDir = os.path.join(os.path.dirname(__file__), |
54 "ProjectFlask", "APIs") |
56 "ProjectFlask", "APIs") |
55 apis = glob.glob(os.path.join(apisDir, '*.api')) |
57 apis = glob.glob(os.path.join(apisDir, '*.api')) |
61 def createFlaskPage(configDlg): |
63 def createFlaskPage(configDlg): |
62 """ |
64 """ |
63 Module function to create the Flask configuration page. |
65 Module function to create the Flask configuration page. |
64 |
66 |
65 @param configDlg reference to the configuration dialog |
67 @param configDlg reference to the configuration dialog |
|
68 @type ConfigurationWidget |
66 @return reference to the configuration page |
69 @return reference to the configuration page |
|
70 @rtype FlaskPage |
67 """ |
71 """ |
68 global flaskPluginObject |
72 global flaskPluginObject |
69 from ProjectFlask.ConfigurationPage.FlaskPage import FlaskPage |
73 from ProjectFlask.ConfigurationPage.FlaskPage import FlaskPage |
70 page = FlaskPage(flaskPluginObject) |
74 page = FlaskPage(flaskPluginObject) |
71 return page |
75 return page |
76 Module function returning data as required by the configuration dialog. |
80 Module function returning data as required by the configuration dialog. |
77 |
81 |
78 @return dictionary containing the relevant data |
82 @return dictionary containing the relevant data |
79 @rtype dict |
83 @rtype dict |
80 """ |
84 """ |
81 try: |
85 usesDarkPalette = ericApp().usesDarkPalette() |
82 usesDarkPalette = e5App().usesDarkPalette() |
|
83 except AttributeError: |
|
84 from PyQt5.QtGui import QPalette |
|
85 palette = e5App().palette() |
|
86 lightness = palette.color(QPalette.Window).lightness() |
|
87 usesDarkPalette = lightness <= 128 |
|
88 iconSuffix = "dark" if usesDarkPalette else "light" |
86 iconSuffix = "dark" if usesDarkPalette else "light" |
89 |
87 |
90 return { |
88 return { |
91 "flaskPage": [ |
89 "flaskPage": [ |
92 QCoreApplication.translate("ProjectFlaskPlugin", "Flask"), |
90 QCoreApplication.translate("ProjectFlaskPlugin", "Flask"), |
157 |
155 |
158 self.__mainMenu = None |
156 self.__mainMenu = None |
159 self.__mainAct = None |
157 self.__mainAct = None |
160 self.__separatorAct = None |
158 self.__separatorAct = None |
161 |
159 |
162 self.__e5project = e5App().getObject("Project") |
160 self.__ericProject = ericApp().getObject("Project") |
163 |
161 |
164 self.__supportedVariants = [] |
162 self.__supportedVariants = [] |
165 |
163 |
166 def activate(self): |
164 def activate(self): |
167 """ |
165 """ |
168 Public method to activate this plugin. |
166 Public method to activate this plugin. |
169 |
167 |
170 @return tuple of None and activation status |
168 @return tuple of None and activation status |
171 @rtype bool |
169 @rtype tuple of (None, bool) |
172 """ |
170 """ |
173 global flaskPluginObject |
171 global flaskPluginObject |
174 flaskPluginObject = self |
172 flaskPluginObject = self |
175 |
173 |
176 try: |
174 usesDarkPalette = ericApp().usesDarkPalette() |
177 usesDarkPalette = e5App().usesDarkPalette() |
|
178 except AttributeError: |
|
179 from PyQt5.QtGui import QPalette |
|
180 palette = e5App().palette() |
|
181 lightness = palette.color(QPalette.Window).lightness() |
|
182 usesDarkPalette = lightness <= 128 |
|
183 iconSuffix = "dark" if usesDarkPalette else "light" |
175 iconSuffix = "dark" if usesDarkPalette else "light" |
184 |
176 |
185 self.__object = Project(self, iconSuffix, self.__ui) |
177 self.__object = Project(self, iconSuffix, self.__ui) |
186 self.__object.initActions() |
178 self.__object.initActions() |
187 e5App().registerPluginObject("ProjectFlask", self.__object) |
179 ericApp().registerPluginObject("ProjectFlask", self.__object) |
188 |
180 |
189 self.__mainMenu = self.__object.initMenu() |
181 self.__mainMenu = self.__object.initMenu() |
190 |
182 |
191 self.__supportedVariants = self.__object.supportedPythonVariants() |
183 self.__supportedVariants = self.__object.supportedPythonVariants() |
192 |
184 |
193 if self.__supportedVariants: |
185 if self.__supportedVariants: |
194 self.__e5project.registerProjectType( |
186 self.__ericProject.registerProjectType( |
195 "Flask", self.tr("Flask"), |
187 "Flask", self.tr("Flask"), |
196 self.fileTypesCallback, |
188 self.fileTypesCallback, |
197 lexerAssociationCallback=self.lexerAssociationCallback, |
189 lexerAssociationCallback=self.lexerAssociationCallback, |
198 binaryTranslationsCallback=self.binaryTranslationsCallback, |
190 binaryTranslationsCallback=self.binaryTranslationsCallback, |
199 progLanguages=self.__supportedVariants[:]) |
191 progLanguages=self.__supportedVariants[:]) |
206 "Flask", |
198 "Flask", |
207 SourcesBrowserFlag | FormsBrowserFlag | |
199 SourcesBrowserFlag | FormsBrowserFlag | |
208 TranslationsBrowserFlag | OthersBrowserFlag, |
200 TranslationsBrowserFlag | OthersBrowserFlag, |
209 ) |
201 ) |
210 |
202 |
211 if self.__e5project.isOpen(): |
203 if self.__ericProject.isOpen(): |
212 self.__projectOpened() |
204 self.__projectOpened() |
213 self.__object.projectOpenedHooks() |
205 self.__object.projectOpenedHooks() |
214 |
206 |
215 e5App().getObject("Project").projectOpened.connect( |
207 ericApp().getObject("Project").projectOpened.connect( |
216 self.__projectOpened) |
208 self.__projectOpened) |
217 e5App().getObject("Project").projectClosed.connect( |
209 ericApp().getObject("Project").projectClosed.connect( |
218 self.__projectClosed) |
210 self.__projectClosed) |
219 e5App().getObject("Project").newProject.connect( |
211 ericApp().getObject("Project").newProject.connect( |
220 self.__projectOpened) |
212 self.__projectOpened) |
221 |
213 |
222 e5App().getObject("Project").projectOpenedHooks.connect( |
214 ericApp().getObject("Project").projectOpenedHooks.connect( |
223 self.__object.projectOpenedHooks) |
215 self.__object.projectOpenedHooks) |
224 e5App().getObject("Project").projectClosedHooks.connect( |
216 ericApp().getObject("Project").projectClosedHooks.connect( |
225 self.__object.projectClosedHooks) |
217 self.__object.projectClosedHooks) |
226 e5App().getObject("Project").newProjectHooks.connect( |
218 ericApp().getObject("Project").newProjectHooks.connect( |
227 self.__object.projectOpenedHooks) |
219 self.__object.projectOpenedHooks) |
228 |
220 |
229 return None, True |
221 return None, True |
230 |
222 |
231 def deactivate(self): |
223 def deactivate(self): |
232 """ |
224 """ |
233 Public method to deactivate this plugin. |
225 Public method to deactivate this plugin. |
234 """ |
226 """ |
235 e5App().unregisterPluginObject("ProjectFlask") |
227 ericApp().unregisterPluginObject("ProjectFlask") |
236 |
228 |
237 e5App().getObject("Project").projectOpened.disconnect( |
229 ericApp().getObject("Project").projectOpened.disconnect( |
238 self.__projectOpened) |
230 self.__projectOpened) |
239 e5App().getObject("Project").projectClosed.disconnect( |
231 ericApp().getObject("Project").projectClosed.disconnect( |
240 self.__projectClosed) |
232 self.__projectClosed) |
241 e5App().getObject("Project").newProject.disconnect( |
233 ericApp().getObject("Project").newProject.disconnect( |
242 self.__projectOpened) |
234 self.__projectOpened) |
243 |
235 |
244 e5App().getObject("Project").projectOpenedHooks.disconnect( |
236 ericApp().getObject("Project").projectOpenedHooks.disconnect( |
245 self.__object.projectOpenedHooks) |
237 self.__object.projectOpenedHooks) |
246 e5App().getObject("Project").projectClosedHooks.disconnect( |
238 ericApp().getObject("Project").projectClosedHooks.disconnect( |
247 self.__object.projectClosedHooks) |
239 self.__object.projectClosedHooks) |
248 e5App().getObject("Project").newProjectHooks.disconnect( |
240 ericApp().getObject("Project").newProjectHooks.disconnect( |
249 self.__object.projectOpenedHooks) |
241 self.__object.projectOpenedHooks) |
250 |
242 |
251 self.__e5project.unregisterProjectType("Flask") |
243 self.__ericProject.unregisterProjectType("Flask") |
252 |
244 |
253 self.__object.projectClosedHooks() |
245 self.__object.projectClosedHooks() |
254 self.__projectClosed() |
246 self.__projectClosed() |
255 |
247 |
256 self.__initialize() |
248 self.__initialize() |
267 translation = "flask_{0}".format(loc) |
259 translation = "flask_{0}".format(loc) |
268 translator = QTranslator(None) |
260 translator = QTranslator(None) |
269 loaded = translator.load(translation, locale_dir) |
261 loaded = translator.load(translation, locale_dir) |
270 if loaded: |
262 if loaded: |
271 self.__translator = translator |
263 self.__translator = translator |
272 e5App().installTranslator(self.__translator) |
264 ericApp().installTranslator(self.__translator) |
273 else: |
265 else: |
274 print("Warning: translation file '{0}' could not be" |
266 print("Warning: translation file '{0}' could not be" |
275 " loaded.".format(translation)) |
267 " loaded.".format(translation)) |
276 print("Using default.") |
268 print("Using default.") |
277 |
269 |
278 def __projectOpened(self): |
270 def __projectOpened(self): |
279 """ |
271 """ |
280 Private slot to handle the projectOpened signal. |
272 Private slot to handle the projectOpened signal. |
281 """ |
273 """ |
282 if self.__e5project.getProjectType() == "Flask": |
274 if self.__ericProject.getProjectType() == "Flask": |
283 projectToolsMenu = self.__ui.getMenu("project_tools") |
275 projectToolsMenu = self.__ui.getMenu("project_tools") |
284 if projectToolsMenu is not None: |
276 insertBeforeAct = projectToolsMenu.actions()[0] |
285 insertBeforeAct = projectToolsMenu.actions()[0] |
277 self.__mainAct = projectToolsMenu.insertMenu( |
286 self.__mainAct = projectToolsMenu.insertMenu( |
278 insertBeforeAct, self.__mainMenu) |
287 insertBeforeAct, self.__mainMenu) |
279 self.__separatorAct = projectToolsMenu.insertSeparator( |
288 self.__separatorAct = projectToolsMenu.insertSeparator( |
280 insertBeforeAct) |
289 insertBeforeAct) |
|
290 else: |
|
291 projectAct = self.__ui.getMenuBarAction("project") |
|
292 actions = self.__ui.menuBar().actions() |
|
293 insertBeforeAct = actions[actions.index(projectAct) + 1] |
|
294 self.__mainAct = self.__ui.menuBar().insertMenu( |
|
295 insertBeforeAct, self.__mainMenu) |
|
296 |
281 |
297 def __projectClosed(self): |
282 def __projectClosed(self): |
298 """ |
283 """ |
299 Private slot to handle the projectClosed signal. |
284 Private slot to handle the projectClosed signal. |
300 """ |
285 """ |
301 if self.__mainAct is not None: |
286 if self.__mainAct is not None: |
302 projectToolsMenu = self.__ui.getMenu("project_tools") |
287 projectToolsMenu = self.__ui.getMenu("project_tools") |
303 if projectToolsMenu is not None: |
288 projectToolsMenu.removeAction(self.__separatorAct) |
304 projectToolsMenu.removeAction(self.__separatorAct) |
289 projectToolsMenu.removeAction(self.__mainAct) |
305 projectToolsMenu.removeAction(self.__mainAct) |
290 self.__mainAct = None |
306 self.__mainAct = None |
291 self.__separatorAct = None |
307 self.__separatorAct = None |
|
308 else: |
|
309 self.__ui.menuBar().removeAction(self.__mainAct) |
|
310 self.__mainAct = None |
|
311 self.__object.projectClosed() |
292 self.__object.projectClosed() |
312 |
293 |
313 def fileTypesCallback(self): |
294 def fileTypesCallback(self): |
314 """ |
295 """ |
315 Public method get the filetype associations of the Django project type. |
296 Public method get the filetype associations of the Django project type. |
409 Private method to re-register the project type. |
390 Private method to re-register the project type. |
410 """ |
391 """ |
411 supportedVariants = self.__object.supportedPythonVariants() |
392 supportedVariants = self.__object.supportedPythonVariants() |
412 if supportedVariants != self.__supportedVariants: |
393 if supportedVariants != self.__supportedVariants: |
413 # step 1: unregister |
394 # step 1: unregister |
414 self.__e5project.unregisterProjectType("Flask") |
395 self.__ericProject.unregisterProjectType("Flask") |
415 |
396 |
416 # step 2: register again with new language settings |
397 # step 2: register again with new language settings |
417 self.__supportedVariants = supportedVariants |
398 self.__supportedVariants = supportedVariants |
418 if self.__supportedVariants: |
399 if self.__supportedVariants: |
419 self.__e5project.registerProjectType( |
400 self.__ericProject.registerProjectType( |
420 "Flask", |
401 "Flask", |
421 self.tr("Flask"), self.fileTypesCallback, |
402 self.tr("Flask"), self.fileTypesCallback, |
422 lexerAssociationCallback=self.lexerAssociationCallback, |
403 lexerAssociationCallback=self.lexerAssociationCallback, |
423 binaryTranslationsCallback=self.binaryTranslationsCallback, |
404 binaryTranslationsCallback=self.binaryTranslationsCallback, |
424 progLanguages=self.__supportedVariants[:]) |
405 progLanguages=self.__supportedVariants[:]) |