Overview
Comment: | [lo] launch lexical editor from context menu |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk | lo |
Files: | files | file ages | folders |
SHA3-256: |
616a21e49f1463e7d42c8ce77614a465 |
User & Date: | olr on 2020-11-02 15:07:53 |
Other Links: | manifest | tags |
Context
2020-11-03
| ||
12:35 | [fr] ajustements check-in: 3cffdae3b0 user: olr tags: trunk, fr | |
2020-11-02
| ||
15:07 | [lo] launch lexical editor from context menu check-in: 616a21e49f user: olr tags: trunk, lo | |
14:49 | [fr] ajustements check-in: e83a01147e user: olr tags: trunk, fr | |
Changes
Modified gc_lang/fr/oxt/AppLauncher.py from [b4674c5ea1] to [7f07846793].
︙ | ︙ | |||
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | import uno from com.sun.star.task import XJobExecutor import helpers xDesktop = None class AppLauncher (unohelper.Base, XJobExecutor): def __init__ (self, ctx): self.ctx = ctx # In this extension, French is default language. # It is assumed that those who need to use the French dictionaries understand French and may not understand English. xSettings = helpers.getConfigSetting("/org.openoffice.Setup/L10N", False) sLocale = xSettings.getByName("ooLocale") # Note: look at ooSetupSystemLocale value? self.sLang = sLocale[0:2] # XJobExecutor def trigger (self, sCmd): try: if sCmd == "About": import About | > > | | | | | | | | | | > | > > > | > > | | | | | | | | | 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | import uno from com.sun.star.task import XJobExecutor import helpers xDesktop = None xLEDialog = None # dialog for Lexicon Editor class AppLauncher (unohelper.Base, XJobExecutor): def __init__ (self, ctx): self.ctx = ctx # In this extension, French is default language. # It is assumed that those who need to use the French dictionaries understand French and may not understand English. xSettings = helpers.getConfigSetting("/org.openoffice.Setup/L10N", False) 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 xAboutDialog = About.AboutGrammalecte(self.ctx) xAboutDialog.run(self.sLang) elif sCmd.startswith("CJ"): import Conjugueur xConjDialog = Conjugueur.Conjugueur(self.ctx) if sCmd[2:3] == "/": xConjDialog.run(sCmd[3:]) else: xConjDialog.run() elif sCmd == "TF": import TextFormatter xTFDialog = TextFormatter.TextFormatter(self.ctx) xTFDialog.run(self.sLang) elif sCmd == "DI": import DictOptions xDODialog = DictOptions.DictOptions(self.ctx) xDODialog.run(self.sLang) elif sCmd.startswith("LE"): import LexiconEditor 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 xAuthorDialog = Author.Author(self.ctx) xAuthorDialog.run(self.sLang) elif sCmd == "OP": import Options xGCDialog = Options.GC_Options(self.ctx) xGCDialog.run(self.sLang) elif sCmd == "EN": import Enumerator xEnumDialog = Enumerator.Enumerator(self.ctx) xEnumDialog.run(self.sLang) elif sCmd == "GO": import GraphicOptions 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 # xSystemShellExecute = self.ctx.getServiceManager().createInstanceWithContext('com.sun.star.system.SystemShellExecute', self.ctx) # xSystemShellExecute.execute(url, "", uno.getConstantByName("com.sun.star.system.SystemShellExecuteFlags.URIS_ONLY")) |
︙ | ︙ |
Modified gc_lang/fr/oxt/ContextMenu/ContextMenu.py from [172f2404b4] to [c17c3b29b1].
︙ | ︙ | |||
23 24 25 26 27 28 29 | def __init__ (self, ctx): self.ctx = ctx def notifyContextMenuExecute (self, xEvent): sWord = self._getWord() try: lWordAndMorph = oSpellChecker.analyze(sWord) | | | | > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | > > > > > > | 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | def __init__ (self, ctx): self.ctx = ctx 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 xContextMenu = xEvent.ActionTriggerContainer if xContextMenu: # entries index i = xContextMenu.Count nUnoConstantLine = uno.getConstantByName("com.sun.star.ui.ActionTriggerSeparatorType.LINE") 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() return uno.Enum("com.sun.star.ui.ContextMenuInterceptorAction", "IGNORED") # don’t work on AOO, have to import the value #return IGNORED # Doesn’t work since LO 5.3 |
︙ | ︙ | |||
109 110 111 112 113 114 115 116 117 118 119 120 121 122 | xCursor.gotoEndOfWord(True) except: traceback.print_exc() return xCursor.String.strip('.') class JobExecutor (XJob, unohelper.Base): def __init__ (self, ctx): self.ctx = ctx global xDesktop global oSpellChecker try: if not xDesktop: xDesktop = self.ctx.getServiceManager().createInstanceWithContext('com.sun.star.frame.Desktop', self.ctx) | > | 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 | xCursor.gotoEndOfWord(True) except: traceback.print_exc() return xCursor.String.strip('.') class JobExecutor (XJob, unohelper.Base): def __init__ (self, ctx): self.ctx = ctx global xDesktop global oSpellChecker try: if not xDesktop: xDesktop = self.ctx.getServiceManager().createInstanceWithContext('com.sun.star.frame.Desktop', self.ctx) |
︙ | ︙ |
Modified gc_lang/fr/oxt/DictOptions/LexiconEditor.py from [afc37335be] to [828f4f365e].
︙ | ︙ | |||
68 69 70 71 72 73 74 75 76 77 78 79 80 81 | def __init__ (self, ctx): self.ctx = ctx 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.oPersonalDicJSON = None # data self.sLemma = "" self.lGeneratedFlex = [] # options node self.xSettingNode = helpers.getConfigSetting("/org.openoffice.Lightproof_grammalecte/Other/", True) self.xOptionNode = self.xSettingNode.getByName("o_fr") | > | 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | def __init__ (self, ctx): self.ctx = ctx 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 self.xSettingNode = helpers.getConfigSetting("/org.openoffice.Lightproof_grammalecte/Other/", True) self.xOptionNode = self.xSettingNode.getByName("o_fr") |
︙ | ︙ | |||
106 107 108 109 110 111 112 | setattr(xCol, k, w) xColumnModel.addColumn(xCol) for k, w in kwargs.items(): setattr(xGridModel, k, w) self.xDialog.insertByName(name, xGridModel) return xGridModel | | | 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 | setattr(xCol, k, w) xColumnModel.addColumn(xCol) for k, w in kwargs.items(): setattr(xGridModel, k, w) self.xDialog.insertByName(name, xGridModel) return xGridModel def run (self, sLang, sWord=""): # ui lang self.sLang = sLang self.dUI = lxe_strings.getUI(sLang) # dialog self.xDialog = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialogModel', self.ctx) self.xDialog.Width = 550 |
︙ | ︙ | |||
159 160 161 162 163 164 165 | self.xDateDic = self._addWidget("save_date", 'FixedText', nXB+85, nY0+2, 75, nHeight, Label = self.dUI.get("void", "#err"), FontDescriptor = xFDSubTitle, TextColor = 0x000088) self.xNumDic = self._addWidget("num_of_entries2", 'FixedText', nXC+70, nY0+2, 45, nHeight, Label = "0", FontDescriptor = xFDSubTitle, TextColor = 0x000088) 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) | | | 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 | self.xDateDic = self._addWidget("save_date", 'FixedText', nXB+85, nY0+2, 75, nHeight, Label = self.dUI.get("void", "#err"), FontDescriptor = xFDSubTitle, TextColor = 0x000088) self.xNumDic = self._addWidget("num_of_entries2", 'FixedText', nXC+70, nY0+2, 45, nHeight, Label = "0", FontDescriptor = xFDSubTitle, TextColor = 0x000088) 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, 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 self.xNA = self._addWidget('nom_adj', 'RadioButton', nX1, nY2+12, 60, nHeight, Label = self.dUI.get("nom_adj", "#err"), HelpText = ":N:A") self.xN = self._addWidget('nom', 'RadioButton', nX1, nY2+22, 60, nHeight, Label = self.dUI.get("nom", "#err"), HelpText = ":N") |
︙ | ︙ | |||
297 298 299 300 301 302 303 304 305 306 307 308 309 310 | self.xContainer.getControl(sName).addKeyListener(self) def _createActionListeners (self, lNames, sAction): for sName in lNames: self.xContainer.getControl(sName).addActionListener(self) self.xContainer.getControl(sName).setActionCommand(sAction) # XActionListener def actionPerformed (self, xActionEvent): try: if xActionEvent.ActionCommand == "Update": self.updateGenWords() elif xActionEvent.ActionCommand == "SearchWords": self.launchSearchWords() | > > > | 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 | self.xContainer.getControl(sName).addKeyListener(self) 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() elif xActionEvent.ActionCommand == "SearchWords": self.launchSearchWords() |
︙ | ︙ | |||
319 320 321 322 323 324 325 326 327 328 329 330 331 332 | elif xActionEvent.ActionCommand == "Import": self.importDictionary() elif xActionEvent.ActionCommand == "Export": self.exportDictionary() elif xActionEvent.ActionCommand == 'Info': pass elif xActionEvent.ActionCommand == "Close": self.xContainer.dispose() # Non modal dialog #self.xContainer.endExecute() # Modal dialog except: traceback.print_exc() # XTopWindowListener (useful for non modal dialog only) def windowOpened (self, xEvent): | > | 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 | elif xActionEvent.ActionCommand == "Import": self.importDictionary() 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() # XTopWindowListener (useful for non modal dialog only) def windowOpened (self, xEvent): |
︙ | ︙ |