Index: gc_lang/fr/oxt/AppLauncher.py ================================================================== --- gc_lang/fr/oxt/AppLauncher.py +++ gc_lang/fr/oxt/AppLauncher.py @@ -13,10 +13,11 @@ import helpers xDesktop = None +xLEDialog = None # dialog for Lexicon Editor class AppLauncher (unohelper.Base, XJobExecutor): def __init__ (self, ctx): self.ctx = ctx @@ -26,50 +27,57 @@ sLocale = xSettings.getByName("ooLocale") # Note: look at ooSetupSystemLocale value? self.sLang = sLocale[0:2] # XJobExecutor def trigger (self, sCmd): + global xLEDialog try: if sCmd == "About": import About - xDialog = About.AboutGrammalecte(self.ctx) - xDialog.run(self.sLang) + xAboutDialog = About.AboutGrammalecte(self.ctx) + xAboutDialog.run(self.sLang) elif sCmd.startswith("CJ"): import Conjugueur - xDialog = Conjugueur.Conjugueur(self.ctx) + xConjDialog = Conjugueur.Conjugueur(self.ctx) if sCmd[2:3] == "/": - xDialog.run(sCmd[3:]) + xConjDialog.run(sCmd[3:]) else: - xDialog.run() + xConjDialog.run() elif sCmd == "TF": import TextFormatter - xDialog = TextFormatter.TextFormatter(self.ctx) - xDialog.run(self.sLang) + xTFDialog = TextFormatter.TextFormatter(self.ctx) + xTFDialog.run(self.sLang) elif sCmd == "DI": import DictOptions - xDialog = DictOptions.DictOptions(self.ctx) - xDialog.run(self.sLang) - elif sCmd == "LE": + xDODialog = DictOptions.DictOptions(self.ctx) + xDODialog.run(self.sLang) + elif sCmd.startswith("LE"): import LexiconEditor - xDialog = LexiconEditor.LexiconEditor(self.ctx) - xDialog.run(self.sLang) + if not xLEDialog or xLEDialog.bClosed: + xLEDialog = LexiconEditor.LexiconEditor(self.ctx) + if sCmd[2:3] == "/": + xLEDialog.run(self.sLang, sCmd[3:]) + else: + xLEDialog.run(self.sLang) + elif sCmd[2:3] == "/": + xLEDialog.newEntry(sCmd[3:]) elif sCmd == "MA": import Author - xDialog = Author.Author(self.ctx) - xDialog.run(self.sLang) + xAuthorDialog = Author.Author(self.ctx) + xAuthorDialog.run(self.sLang) elif sCmd == "OP": import Options - xDialog = Options.GC_Options(self.ctx) - xDialog.run(self.sLang) + xGCDialog = Options.GC_Options(self.ctx) + xGCDialog.run(self.sLang) elif sCmd == "EN": import Enumerator - xDialog = Enumerator.Enumerator(self.ctx) - xDialog.run(self.sLang) + xEnumDialog = Enumerator.Enumerator(self.ctx) + xEnumDialog.run(self.sLang) elif sCmd == "GO": import GraphicOptions - xDialog = GraphicOptions.GraphicOptions(self.ctx) - xDialog.run(self.sLang) + xGODialog = GraphicOptions.GraphicOptions(self.ctx) + xGODialog.run(self.sLang) elif sCmd.startswith("FA/"): findAll(sCmd[6:], (sCmd[3:4] == "y"), (sCmd[4:5] == "y")) # elif sCmd.startswith("URL/"): # # Call from context menu to launch URL? # # http://opengrok.libreoffice.org/xref/core/sw/source/ui/lingu/olmenu.cxx#785 Index: gc_lang/fr/oxt/ContextMenu/ContextMenu.py ================================================================== --- gc_lang/fr/oxt/ContextMenu/ContextMenu.py +++ gc_lang/fr/oxt/ContextMenu/ContextMenu.py @@ -25,63 +25,70 @@ def notifyContextMenuExecute (self, xEvent): sWord = self._getWord() try: lWordAndMorph = oSpellChecker.analyze(sWord) - if not lWordAndMorph: - return uno.Enum("com.sun.star.ui.ContextMenuInterceptorAction", "IGNORED") # don’t work on AOO, have to import the value - #return IGNORED + # if not lWordAndMorph: + # return uno.Enum("com.sun.star.ui.ContextMenuInterceptorAction", "IGNORED") # don’t work on AOO, have to import the value + # #return IGNORED xContextMenu = xEvent.ActionTriggerContainer if xContextMenu: # entries index i = xContextMenu.Count nUnoConstantLine = uno.getConstantByName("com.sun.star.ui.ActionTriggerSeparatorType.LINE") - # word analysis - i = self._addItemToContextMenu(xContextMenu, i, "ActionTriggerSeparator", SeparatorType=nUnoConstantLine) - for sWord, lMorph in lWordAndMorph: - if len(lMorph) == 1: - sMorph, sReadableMorph = lMorph[0] - i = self._addItemToContextMenu(xContextMenu, i, "ActionTrigger", Text=sWord + " : " + sReadableMorph, CommandURL="service:net.grammalecte.AppLauncher?None") - elif len(lMorph) >= 1: - # submenu - xSubMenuContainer = xContextMenu.createInstance("com.sun.star.ui.ActionTriggerContainer") - for j, (sMorph, sReadableMorph) in enumerate(lMorph): - self._addItemToContextMenu(xSubMenuContainer, j, "ActionTrigger", Text=sReadableMorph, CommandURL="service:net.grammalecte.AppLauncher?None") - # create root menu entry - i = self._addItemToContextMenu(xContextMenu, i, "ActionTrigger", Text=sWord, SubContainer=xSubMenuContainer) - else: - i = self._addItemToContextMenu(xContextMenu, i, "ActionTrigger", Text=sWord + " : [erreur] aucun résultat trouvé.") - - # Links to Conjugueur - aVerb = { sMorph[1:sMorph.find("/")] for sMorph in oSpellChecker.getMorph(sWord) if ":V" in sMorph } - if aVerb: - i = self._addItemToContextMenu(xContextMenu, i, "ActionTriggerSeparator", SeparatorType=nUnoConstantLine) - for sVerb in aVerb: - i = self._addItemToContextMenu(xContextMenu, i, "ActionTrigger", Text="Conjuguer “{}”…".format(sVerb), \ - CommandURL="service:net.grammalecte.AppLauncher?CJ/"+sVerb) - - # Search - xDoc = xDesktop.getCurrentComponent() - xViewCursor = xDoc.CurrentController.ViewCursor - if not xViewCursor.isCollapsed(): - sSelec = xViewCursor.getString() - if sSelec.count(" ") <= 2: - i = self._addItemToContextMenu(xContextMenu, i, "ActionTriggerSeparator", SeparatorType=nUnoConstantLine) - # submenu - xSubMenuContainer = xContextMenu.createInstance("com.sun.star.ui.ActionTriggerContainer") - self._addItemToContextMenu(xSubMenuContainer, 0, "ActionTrigger", Text="insensible à la casse", - CommandURL="service:net.grammalecte.AppLauncher?FA/nn/"+sSelec) - self._addItemToContextMenu(xSubMenuContainer, 1, "ActionTrigger", Text="casse préservée", - CommandURL="service:net.grammalecte.AppLauncher?FA/yn/"+sSelec) - self._addItemToContextMenu(xSubMenuContainer, 2, "ActionTrigger", Text="mot(s) entier(s)", - CommandURL="service:net.grammalecte.AppLauncher?FA/ny/"+sSelec) - self._addItemToContextMenu(xSubMenuContainer, 3, "ActionTrigger", Text="casse préservée + mot(s) entier(s)", - CommandURL="service:net.grammalecte.AppLauncher?FA/yy/"+sSelec) - # create root menu entry - i = self._addItemToContextMenu(xContextMenu, i, "ActionTrigger", Text="Rechercher “{}”".format(sSelec), - SubContainer=xSubMenuContainer) + if lWordAndMorph: + # word analysis + i = self._addItemToContextMenu(xContextMenu, i, "ActionTriggerSeparator", SeparatorType=nUnoConstantLine) + for sWord, lMorph in lWordAndMorph: + if len(lMorph) == 1: + sMorph, sReadableMorph = lMorph[0] + i = self._addItemToContextMenu(xContextMenu, i, "ActionTrigger", Text=sWord + " : " + sReadableMorph, CommandURL="service:net.grammalecte.AppLauncher?None") + elif len(lMorph) >= 1: + # submenu + xSubMenuContainer = xContextMenu.createInstance("com.sun.star.ui.ActionTriggerContainer") + for j, (sMorph, sReadableMorph) in enumerate(lMorph): + self._addItemToContextMenu(xSubMenuContainer, j, "ActionTrigger", Text=sReadableMorph, CommandURL="service:net.grammalecte.AppLauncher?None") + # create root menu entry + i = self._addItemToContextMenu(xContextMenu, i, "ActionTrigger", Text=sWord, SubContainer=xSubMenuContainer) + else: + i = self._addItemToContextMenu(xContextMenu, i, "ActionTrigger", Text=sWord + " : [erreur] aucun résultat trouvé.") + + # Links to Conjugueur + aVerb = { sMorph[1:sMorph.find("/")] for sMorph in oSpellChecker.getMorph(sWord) if ":V" in sMorph } + if aVerb: + i = self._addItemToContextMenu(xContextMenu, i, "ActionTriggerSeparator", SeparatorType=nUnoConstantLine) + for sVerb in aVerb: + i = self._addItemToContextMenu(xContextMenu, i, "ActionTrigger", Text="Conjuguer “{}”…".format(sVerb), \ + CommandURL="service:net.grammalecte.AppLauncher?CJ/"+sVerb) + + # Search + xDoc = xDesktop.getCurrentComponent() + xViewCursor = xDoc.CurrentController.ViewCursor + if not xViewCursor.isCollapsed(): + sSelec = xViewCursor.getString() + if sSelec.count(" ") <= 2: + i = self._addItemToContextMenu(xContextMenu, i, "ActionTriggerSeparator", SeparatorType=nUnoConstantLine) + # submenu + xSubMenuContainer = xContextMenu.createInstance("com.sun.star.ui.ActionTriggerContainer") + self._addItemToContextMenu(xSubMenuContainer, 0, "ActionTrigger", Text="insensible à la casse", + CommandURL="service:net.grammalecte.AppLauncher?FA/nn/"+sSelec) + self._addItemToContextMenu(xSubMenuContainer, 1, "ActionTrigger", Text="casse préservée", + CommandURL="service:net.grammalecte.AppLauncher?FA/yn/"+sSelec) + self._addItemToContextMenu(xSubMenuContainer, 2, "ActionTrigger", Text="mot(s) entier(s)", + CommandURL="service:net.grammalecte.AppLauncher?FA/ny/"+sSelec) + self._addItemToContextMenu(xSubMenuContainer, 3, "ActionTrigger", Text="casse préservée + mot(s) entier(s)", + CommandURL="service:net.grammalecte.AppLauncher?FA/yy/"+sSelec) + # create root menu entry + i = self._addItemToContextMenu(xContextMenu, i, "ActionTrigger", Text="Rechercher “{}”".format(sSelec), + SubContainer=xSubMenuContainer) + else: + # Link to Lexicon Editor + i = self._addItemToContextMenu(xContextMenu, i, "ActionTriggerSeparator", SeparatorType=nUnoConstantLine) + i = self._addItemToContextMenu(xContextMenu, i, "ActionTrigger", Text="Éditeur lexical…", \ + CommandURL="service:net.grammalecte.AppLauncher?LE/"+sWord) + # The controller should execute the modified context menu and stop notifying other interceptors. return uno.Enum("com.sun.star.ui.ContextMenuInterceptorAction", "EXECUTE_MODIFIED") # don’t work on AOO, have to import the value #return EXECUTE_MODIFIED # Doesn’t work since LO 5.3 except: traceback.print_exc() @@ -111,10 +118,11 @@ traceback.print_exc() return xCursor.String.strip('.') class JobExecutor (XJob, unohelper.Base): + def __init__ (self, ctx): self.ctx = ctx global xDesktop global oSpellChecker try: Index: gc_lang/fr/oxt/DictOptions/LexiconEditor.py ================================================================== --- gc_lang/fr/oxt/DictOptions/LexiconEditor.py +++ gc_lang/fr/oxt/DictOptions/LexiconEditor.py @@ -70,10 +70,11 @@ self.xSvMgr = self.ctx.ServiceManager self.xDesktop = self.xSvMgr.createInstanceWithContext("com.sun.star.frame.Desktop", self.ctx) self.xDocument = self.xDesktop.getCurrentComponent() self.xContainer = None self.xDialog = None + self.bClosed = False self.oPersonalDicJSON = None # data self.sLemma = "" self.lGeneratedFlex = [] # options node @@ -108,11 +109,11 @@ for k, w in kwargs.items(): setattr(xGridModel, k, w) self.xDialog.insertByName(name, xGridModel) return xGridModel - def run (self, sLang): + def run (self, sLang, sWord=""): # ui lang self.sLang = sLang self.dUI = lxe_strings.getUI(sLang) # dialog @@ -161,11 +162,11 @@ self.xImport = self._addWidget('import_button', 'Button', self.xDialog.Width-90, nY0, 40, 12, Label = self.dUI.get('import_button', "#err"), FontDescriptor = xFDSubTitle, TextColor = 0x000055) self.xExport = self._addWidget('export_button', 'Button', self.xDialog.Width-45, nY0, 40, 12, Label = self.dUI.get('export_button', "#err"), FontDescriptor = xFDSubTitle, TextColor = 0x000055) #### Add word self._addWidget("add_section", 'FixedLine', nX1, nY1, 170, nHeight, Label = self.dUI.get("add_section", "#err"), FontDescriptor = xFDTitle) - self.xLemma = self._addWidget('lemma', 'Edit', nX1, nY1+10, 100, 14, FontDescriptor = xFDTitle) + self.xLemma = self._addWidget('lemma', 'Edit', nX1, nY1+10, 100, 14, Text = sWord, FontDescriptor = xFDTitle) self._addWidget('search_button', 'Button', nX1+105, nY1+11, 45, 12, Label = self.dUI.get('search_button', "#err"), FontDescriptor = xFDSubTitle, TextColor = 0x555500) self._addWidget('information_button', 'Button', nX1+155, nY1+11, 15, 12, Label = self.dUI.get('information_button', "#err"), FontDescriptor = xFDSubTitle, TextColor = 0x555500) # Radio buttons: main POS tag # Note: the only way to group RadioButtons is to create them successively @@ -299,10 +300,13 @@ def _createActionListeners (self, lNames, sAction): for sName in lNames: self.xContainer.getControl(sName).addActionListener(self) self.xContainer.getControl(sName).setActionCommand(sAction) + def newEntry (self, sWord): + self.xLemma.Text = sWord + # XActionListener def actionPerformed (self, xActionEvent): try: if xActionEvent.ActionCommand == "Update": self.updateGenWords() @@ -321,10 +325,11 @@ elif xActionEvent.ActionCommand == "Export": self.exportDictionary() elif xActionEvent.ActionCommand == 'Info': pass elif xActionEvent.ActionCommand == "Close": + self.bClosed = True self.xContainer.dispose() # Non modal dialog #self.xContainer.endExecute() # Modal dialog except: traceback.print_exc()