--- a/ProjectFlask/FlaskBabelExtension/PyBabelProjectExtension.py Mon Nov 23 17:35:10 2020 +0100 +++ b/ProjectFlask/FlaskBabelExtension/PyBabelProjectExtension.py Mon Nov 23 18:11:28 2020 +0100 @@ -11,10 +11,11 @@ import re from PyQt5.QtCore import pyqtSlot, QObject, QProcess -from PyQt5.QtWidgets import QDialog +from PyQt5.QtWidgets import QDialog, QMenu from E5Gui import E5MessageBox from E5Gui.E5Application import e5App +from E5Gui.E5Action import E5Action from .PyBabelCommandDialog import PyBabelCommandDialog @@ -46,6 +47,43 @@ self.__hooksInstalled = False + def initActions(self): + """ + Public method to define the Flask actions. + """ + self.actions = [] + + self.pybabelConfigAct = E5Action( + self.tr('Configure PyBabel'), + self.tr('Configure Py&Babel'), + 0, 0, + self, 'flask_config_pybabel') + self.pybabelConfigAct.setStatusTip(self.tr( + 'Shows a dialog to edit the configuration for pybabel')) + self.pybabelConfigAct.setWhatsThis(self.tr( + """<b>Configure PyBabel</b>""" + """<p>Shows a dialog to edit the configuration for pybabel.</p>""" + )) + self.pybabelConfigAct.triggered.connect( + self.__configurePyBabel) + self.actions.append(self.pybabelConfigAct) + + # TODO: add action to install flask-babel + + def initMenu(self): + """ + Public method to initialize the Flask menu. + + @return the menu generated + @rtype QMenu + """ + menu = QMenu(self.tr("Translations")) + menu.setTearOffEnabled(True) + + menu.addAction(self.pybabelConfigAct) + + return menu + def registerOpenHook(self): """ Public method to register the open hook to open a translations file @@ -129,8 +167,12 @@ """ Public method to determine the availability of flask-babel. """ - self.__project.setCapability("pybabel", self.flaskBabelAvailable()) + available = self.flaskBabelAvailable() + self.__project.setCapability("pybabel", available) + self.pybabelConfigAct.setEnabled(available) + # TODO: disable install action, if flask-babel is available + ################################################################## ## slots and methods below implement general functionality ################################################################## @@ -171,9 +213,9 @@ return False @pyqtSlot() - def configurePyBabel(self): + def __configurePyBabel(self): """ - Public slot to show a dialog to edit the pybabel configuration. + Private slot to show a dialog to edit the pybabel configuration. """ from .PyBabelConfigDialog import PyBabelConfigDialog @@ -226,7 +268,7 @@ @return flag indicating successful configuration file creation @rtype bool """ - _, app = self.getApplication() + _, app = self.__project.getApplication() if app.endswith(".py"): template = ( "[python: {0}]\n"