Grammalecte  Check-in [efad935afc]

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:[lo] graphic options for Writer: underling style and colors
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk | lo
Files: files | file ages | folders
SHA3-256:efad935afcbfcef56e5b5222f94e65970816cf7300433001920ccfbfee0fe9cf
User & Date: olr 2019-06-10 17:22:34
Context
2019-06-10
18:00
[lo] graphic option: update labels -> for LO 6.3+ check-in: 1934da7c59 user: olr tags: lo, trunk
17:22
[lo] graphic options for Writer: underling style and colors check-in: efad935afc user: olr tags: lo, trunk
07:14
[core] change the paragraph slicer check-in: 01d15e4e8d user: olr tags: core, trunk
Changes

Changes to gc_core/py/lang_core/gc_engine.py.

    25     25   except ImportError:
    26     26       _bWriterError = False
    27     27   
    28     28   
    29     29   __all__ = [ "lang", "locales", "pkg", "name", "version", "author", \
    30     30               "load", "parse", "getSpellChecker", \
    31     31               "setOption", "setOptions", "getOptions", "getDefaultOptions", "getOptionsLabels", "resetOptions", "displayOptions", \
    32         -            "ignoreRule", "resetIgnoreRules", "reactivateRule", "listRules", "displayRules" ]
           32  +            "ignoreRule", "resetIgnoreRules", "reactivateRule", "listRules", "displayRules", "setWriterUnderliningStyle" ]
    33     33   
    34     34   __version__ = "${version}"
    35     35   
    36     36   
    37     37   lang = "${lang}"
    38     38   locales = ${loc}
    39     39   pkg = "${implname}"
................................................................................
    49     49   _sAppContext = ""                           # what software is running
    50     50   _dOptions = None
    51     51   _dOptionsColors = None
    52     52   _oSpellChecker = None
    53     53   _oTokenizer = None
    54     54   _aIgnoredRules = set()
    55     55   
           56  +# Writer underlining style
           57  +_bMulticolor = True
           58  +_nUnderliningStyle = 0
    56     59   
    57     60   
    58     61   #### Initialization
    59     62   
    60     63   def load (sContext="Python", sColorType="aRGB"):
    61     64       "initialization of the grammar checker"
    62     65       global _oSpellChecker
................................................................................
   187    190   
   188    191   
   189    192   def resetOptions ():
   190    193       "set options to default values"
   191    194       global _dOptions
   192    195       _dOptions = getDefaultOptions()
   193    196   
          197  +
          198  +def setWriterUnderliningStyle (sStyle="BOLDWAVE", bMulticolor=True):
          199  +    "set underlining style for Writer (WAVE, BOLDWAVE, BOLD)"
          200  +    global _nUnderliningStyle
          201  +    global _bMulticolor
          202  +    # https://api.libreoffice.org/docs/idl/ref/FontUnderline_8idl.html
          203  +    # WAVE: 10, BOLD: 12, BOLDWAVE: 18 DASH: 5
          204  +    if sStyle == "WAVE":
          205  +        _nUnderliningStyle = 0  # 0 for default Writer setting
          206  +    elif sStyle == "BOLDWAVE":
          207  +        _nUnderliningStyle = 18
          208  +    elif sStyle == "BOLD":
          209  +        _nUnderliningStyle = 12
          210  +    elif sStyle == "DASH":
          211  +        _nUnderliningStyle = 5
          212  +    else:
          213  +        _nUnderliningStyle = 0
          214  +    _bMulticolor = bMulticolor
          215  +
   194    216   
   195    217   #### Parsing
   196    218   
   197    219   def parse (sText, sCountry="${country_default}", bDebug=False, dOptions=None, bContext=False, bFullInfo=False):
   198    220       "init point to analyse <sText> and returns an iterable of errors or (with option <bFullInfo>) paragraphs errors and sentences with tokens and errors"
   199    221       oText = TextParser(sText)
   200    222       return oText.parse(sCountry, bDebug, dOptions, bContext, bFullInfo)
................................................................................
   659    681           xErr.nErrorLength = nLen
   660    682           xErr.nErrorType = PROOFREADING
   661    683           xErr.aRuleIdentifier = sRuleId
   662    684           xErr.aShortComment = sMessage   # sMessage.split("|")[0]     # in context menu
   663    685           xErr.aFullComment = sMessage    # sMessage.split("|")[-1]    # in dialog
   664    686           xErr.aSuggestions = tuple(lSugg)
   665    687           # Properties
   666         -        lProperties = [
   667         -            PropertyValue(Name="LineType", Value=18), # WAVE: 10, DASH: 5, BOLD: 12, BOLDWAVE: 18 https://api.libreoffice.org/docs/idl/ref/FontUnderline_8idl.html
   668         -            PropertyValue(Name="LineColor", Value=_dOptionsColors.get(sOption, 33023))
   669         -        ]
          688  +        lProperties = []
          689  +        if _nUnderliningStyle:
          690  +            lProperties.append(PropertyValue(Name="LineType", Value=_nUnderliningStyle))
          691  +        if _bMulticolor:
          692  +            lProperties.append(PropertyValue(Name="LineColor", Value=_dOptionsColors.get(sOption, 33023)))
   670    693           if sURL:
   671    694               lProperties.append(PropertyValue(Name="FullCommentURL", Value=sURL))
   672    695           xErr.aProperties = lProperties
   673    696           return xErr
   674    697   
   675    698       def _createErrorAsDict (self, nStart, nEnd, sLineId, sRuleId, sOption, sMessage, lSugg, sURL, bContext):
   676    699           dErr = {

Changes to gc_core/py/oxt/Grammalecte.py.

    37     37           gce.load("Writer", "nInt")
    38     38           # GC options
    39     39           # opt_handler.load(xCurCtx)
    40     40           dOpt = Options.load(xCurCtx)
    41     41           gce.setOptions(dOpt)
    42     42           # dictionaries options
    43     43           self.loadUserDictionaries()
           44  +        # underlining options
           45  +        self.setWriterUnderliningStyle()
    44     46           # store for results of big paragraphs
    45     47           self.dResult = {}
    46     48           self.nMaxRes = 1500
    47     49           self.lLastRes = deque(maxlen=self.nMaxRes)
    48     50           self.nRes = 0
    49     51   
    50     52   
................................................................................
   146    148               if xChild.getPropertyValue("use_personal_dic"):
   147    149                   sJSON = xChild.getPropertyValue("personal_dic")
   148    150                   if sJSON:
   149    151                       oSpellChecker = gce.getSpellChecker();
   150    152                       oSpellChecker.setPersonalDictionary(json.loads(sJSON))
   151    153           except:
   152    154               traceback.print_exc()
          155  +
          156  +    def setWriterUnderliningStyle (self):
          157  +        try:
          158  +            xSettingNode = helpers.getConfigSetting("/org.openoffice.Lightproof_grammalecte/Other/", False)
          159  +            xChild = xSettingNode.getByName("o_${lang}")
          160  +            sLineType = xChild.getPropertyValue("line_type")
          161  +            bMulticolor = bool(xChild.getPropertyValue("line_multicolor"))
          162  +            gce.setWriterUnderliningStyle(sLineType, bMulticolor)
          163  +        except:
          164  +            traceback.print_exc()
   153    165   
   154    166   
   155    167   g_ImplementationHelper = unohelper.ImplementationHelper()
   156    168   g_ImplementationHelper.addImplementation(Grammalecte, "org.openoffice.comp.pyuno.Lightproof."+gce.pkg, ("com.sun.star.linguistic2.Proofreader",),)
   157    169   
   158    170   # g_ImplementationHelper.addImplementation( opt_handler.LightproofOptionsEventHandler, \
   159    171   #     "org.openoffice.comp.pyuno.LightproofOptionsEventHandler." + gce.pkg, ("com.sun.star.awt.XContainerWindowEventHandler",),)

Changes to gc_core/py/oxt/OptionsDialog.xcs.

    17     17               ${xcs_options}
    18     18           </group>
    19     19   
    20     20           <group oor:name="o_${lang}">
    21     21               <info>
    22     22                   <desc>The data for one leaf.</desc>
    23     23               </info>
           24  +            <!-- spelling options -->
    24     25               <prop oor:name="use_graphspell" oor:type="xs:int"><value>1</value></prop>
    25     26               <prop oor:name="use_graphspell_sugg" oor:type="xs:int"><value>1</value></prop>
    26         -            <prop oor:name="use_extended_dic" oor:type="xs:int"><value>0</value></prop>
    27     27               <prop oor:name="use_community_dic" oor:type="xs:int"><value>0</value></prop>
    28     28               <prop oor:name="use_personal_dic" oor:type="xs:int"><value>1</value></prop>
    29     29               <prop oor:name="main_dic_name" oor:type="xs:string"><value>classic</value></prop>
    30         -            <prop oor:name="extended_dic" oor:type="xs:string"><value></value></prop>
    31     30               <prop oor:name="community_dic" oor:type="xs:string"><value></value></prop>
    32     31               <prop oor:name="personal_dic" oor:type="xs:string"><value></value></prop>
           32  +            <!-- graphic options -->
           33  +            <prop oor:name="line_multicolor" oor:type="xs:int"><value>1</value></prop>
           34  +            <prop oor:name="line_type" oor:type="xs:string"><value>BOLDWAVE</value></prop>
    33     35           </group>
    34     36       </templates>
    35     37   
    36     38       <component>
    37     39           <group oor:name="Leaves">
    38     40               <node-ref oor:name="${lang}" oor:node-type="${lang}" />
    39     41           </group>

Changes to gc_lang/fr/config.ini.

   102    102   oxt/DictOptions/do_strings.py = pythonpath/do_strings.py
   103    103   oxt/DictOptions/LexiconEditor.py = pythonpath/LexiconEditor.py
   104    104   oxt/DictOptions/lxe_strings.py = pythonpath/lxe_strings.py
   105    105   oxt/DictOptions/SearchWords.py = pythonpath/SearchWords.py
   106    106   oxt/DictOptions/sw_strings.py = pythonpath/sw_strings.py
   107    107   oxt/DictOptions/TagsInfo.py = pythonpath/TagsInfo.py
   108    108   oxt/DictOptions/ti_strings.py = pythonpath/ti_strings.py
          109  +# Graphic options
          110  +oxt/GraphicOptions/GraphicOptions.py = pythonpath/GraphicOptions.py
          111  +oxt/GraphicOptions/go_strings.py = pythonpath/go_strings.py
   109    112   # ContextMenu
   110    113   oxt/ContextMenu/ContextMenu.py = ContextMenu.py
   111    114   oxt/ContextMenu/jobs.xcu = config/jobs.xcu
   112    115   # TextFormatter
   113    116   oxt/TextFormatter/TextFormatter.py = pythonpath/TextFormatter.py
   114    117   oxt/TextFormatter/tf_strings.py = pythonpath/tf_strings.py
   115    118   oxt/TextFormatter/tf_options.py = pythonpath/tf_options.py

Changes to gc_lang/fr/oxt/AppLauncher.py.

    62     62                   import Options
    63     63                   xDialog = Options.GC_Options(self.ctx)
    64     64                   xDialog.run(self.sLang)
    65     65               elif sCmd == "EN":
    66     66                   import Enumerator
    67     67                   xDialog = Enumerator.Enumerator(self.ctx)
    68     68                   xDialog.run(self.sLang)
           69  +            elif sCmd == "GO":
           70  +                import GraphicOptions
           71  +                xDialog = GraphicOptions.GraphicOptions(self.ctx)
           72  +                xDialog.run(self.sLang)
    69     73               elif sCmd.startswith("FA/"):
    70     74                   findAll(sCmd[6:], (sCmd[3:4] == "y"), (sCmd[4:5] == "y"))
    71     75               # elif sCmd.startswith("URL/"):
    72     76               #     # Call from context menu to launch URL?
    73     77               #     # http://opengrok.libreoffice.org/xref/core/sw/source/ui/lingu/olmenu.cxx#785
    74     78               #     xSystemShellExecute = self.ctx.getServiceManager().createInstanceWithContext('com.sun.star.system.SystemShellExecute', self.ctx)
    75     79               #     xSystemShellExecute.execute(url, "", uno.getConstantByName("com.sun.star.system.SystemShellExecuteFlags.URIS_ONLY"))

Added gc_lang/fr/oxt/GraphicOptions/GraphicOptions.py.

            1  +# Graphic Options
            2  +# by Olivier R.
            3  +# License: MPL 2
            4  +
            5  +import unohelper
            6  +import uno
            7  +import re
            8  +import traceback
            9  +
           10  +import helpers
           11  +import go_strings
           12  +
           13  +from com.sun.star.task import XJobExecutor
           14  +from com.sun.star.awt import XActionListener
           15  +from com.sun.star.beans import PropertyValue
           16  +
           17  +
           18  +class GraphicOptions (unohelper.Base, XActionListener, XJobExecutor):
           19  +
           20  +    def __init__ (self, ctx):
           21  +        self.ctx = ctx
           22  +        self.xSvMgr = self.ctx.ServiceManager
           23  +        self.xContainer = None
           24  +        self.xDialog = None
           25  +
           26  +    def _addWidget (self, name, wtype, x, y, w, h, **kwargs):
           27  +        xWidget = self.xDialog.createInstance('com.sun.star.awt.UnoControl%sModel' % wtype)
           28  +        xWidget.Name = name
           29  +        xWidget.PositionX = x
           30  +        xWidget.PositionY = y
           31  +        xWidget.Width = w
           32  +        xWidget.Height = h
           33  +        for k, w in kwargs.items():
           34  +            setattr(xWidget, k, w)
           35  +        self.xDialog.insertByName(name, xWidget)
           36  +        return xWidget
           37  +
           38  +    def run (self, sLang):
           39  +        self.dUI = go_strings.getUI(sLang)
           40  +
           41  +        self.xDesktop = self.xSvMgr.createInstanceWithContext("com.sun.star.frame.Desktop", self.ctx)
           42  +        self.xDocument = self.xDesktop.getCurrentComponent()
           43  +        self.xGLOptionNode = helpers.getConfigSetting("/org.openoffice.Lightproof_grammalecte/Other/", True)
           44  +
           45  +        # dialog
           46  +        self.xDialog = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialogModel', self.ctx)
           47  +        self.xDialog.Width = 200
           48  +        self.xDialog.Height = 220
           49  +        self.xDialog.Title = self.dUI.get('title', "#title#")
           50  +        xWindowSize = helpers.getWindowSize()
           51  +        self.xDialog.PositionX = int((xWindowSize.Width / 2) - (self.xDialog.Width / 2))
           52  +        self.xDialog.PositionY = int((xWindowSize.Height / 2) - (self.xDialog.Height / 2))
           53  +
           54  +        # fonts
           55  +        xFDTitle = uno.createUnoStruct("com.sun.star.awt.FontDescriptor")
           56  +        xFDTitle.Height = 9
           57  +        xFDTitle.Weight = uno.getConstantByName("com.sun.star.awt.FontWeight.BOLD")
           58  +        xFDTitle.Name = "Verdana"
           59  +
           60  +        xFDSubTitle = uno.createUnoStruct("com.sun.star.awt.FontDescriptor")
           61  +        xFDSubTitle.Height = 10
           62  +        xFDSubTitle.Weight = uno.getConstantByName("com.sun.star.awt.FontWeight.BOLD")
           63  +        xFDSubTitle.Name = "Verdana"
           64  +
           65  +        # widget
           66  +        nX = 10
           67  +        nY1 = 10
           68  +        nY2 = nY1 + 45
           69  +        nY3 = nY2 + 55
           70  +        nY4 = nY3 + 65
           71  +
           72  +        nWidth = self.xDialog.Width - 20
           73  +        nHeight = 10
           74  +
           75  +        # Info
           76  +        self._addWidget("graphic_info", 'FixedText', nX, nY1, nWidth, nHeight*2, Label = self.dUI.get("graphic_info", "#err"), MultiLine = True, FontDescriptor = xFDSubTitle)
           77  +        self._addWidget("spell_info", 'FixedText', nX, nY1+20, nWidth, nHeight*2, Label = self.dUI.get("spell_info", "#err"), MultiLine = True)
           78  +
           79  +        # Line type
           80  +        self._addWidget('linetype_section', 'FixedLine', nX, nY2, nWidth, nHeight, Label = self.dUI.get('linetype_section', "#err"), FontDescriptor = xFDTitle)
           81  +        self.xWaveLine = self._addWidget('wave_line', 'RadioButton', nX, nY2+15, nWidth, nHeight, Label = self.dUI.get('wave_line', "#err"))
           82  +        self.xBoldWaveLine = self._addWidget('boldwave_line', 'RadioButton', nX, nY2+25, nWidth, nHeight, Label = self.dUI.get('boldwave_line', "#err"))
           83  +        self.xBoldLine = self._addWidget('bold_line', 'RadioButton', nX, nY2+35, nWidth, nHeight, Label = self.dUI.get('bold_line', "#err"))
           84  +
           85  +        # Color
           86  +        self._addWidget("color_section", 'FixedLine', nX, nY3, nWidth, nHeight, Label = self.dUI.get("color_section", "#err"), FontDescriptor = xFDTitle)
           87  +        self.xMulticolor = self._addWidget('multicolor_line', 'CheckBox', nX, nY3+15, nWidth, nHeight, Label = self.dUI.get('multicolor_line', "#err"))
           88  +        self._addWidget('multicolor_descr', 'FixedText', nX, nY3+25, nWidth, nHeight*4, Label = self.dUI.get('multicolor_descr', "#err"), MultiLine = True)
           89  +
           90  +        # Restart message
           91  +        self._addWidget('restart', 'FixedText', nX, nY4, nWidth, nHeight*2, Label = self.dUI.get('restart', "#err"), FontDescriptor = xFDTitle, MultiLine = True, TextColor = 0x880000)
           92  +
           93  +        # Button
           94  +        self._addWidget('apply_button', 'Button', self.xDialog.Width-115, self.xDialog.Height-20, 50, 14, Label = self.dUI.get('apply_button', "#err"), FontDescriptor = xFDTitle, TextColor = 0x005500)
           95  +        self._addWidget('cancel_button', 'Button', self.xDialog.Width-60, self.xDialog.Height-20, 50, 14, Label = self.dUI.get('cancel_button', "#err"), FontDescriptor = xFDTitle, TextColor = 0x550000)
           96  +
           97  +        self._loadOptions()
           98  +
           99  +        # container
          100  +        self.xContainer = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialog', self.ctx)
          101  +        self.xContainer.setModel(self.xDialog)
          102  +        self.xContainer.getControl('apply_button').addActionListener(self)
          103  +        self.xContainer.getControl('apply_button').setActionCommand('Apply')
          104  +        self.xContainer.getControl('cancel_button').addActionListener(self)
          105  +        self.xContainer.getControl('cancel_button').setActionCommand('Cancel')
          106  +        self.xContainer.setVisible(False)
          107  +        toolkit = self.xSvMgr.createInstanceWithContext('com.sun.star.awt.ExtToolkit', self.ctx)
          108  +        self.xContainer.createPeer(toolkit, None)
          109  +        self.xContainer.execute()
          110  +
          111  +    # XActionListener
          112  +    def actionPerformed (self, xActionEvent):
          113  +        if xActionEvent.ActionCommand == 'Apply':
          114  +            try:
          115  +                # Grammalecte options
          116  +                xChild = self.xGLOptionNode.getByName("o_fr")
          117  +                xChild.setPropertyValue("line_multicolor", self.xMulticolor.State)
          118  +                if self.xWaveLine.State:
          119  +                    sLineType = "WAVE"
          120  +                elif self.xBoldWaveLine.State:
          121  +                    sLineType = "BOLDWAVE"
          122  +                elif self.xBoldLine.State:
          123  +                    sLineType = "BOLD"
          124  +                else:
          125  +                    sLineType = "BOLDWAVE"
          126  +                xChild.setPropertyValue("line_type", sLineType)
          127  +                self.xGLOptionNode.commitChanges()
          128  +            except:
          129  +                traceback.print_exc()
          130  +        # Close window
          131  +        self.xContainer.endExecute()
          132  +
          133  +    # XJobExecutor
          134  +    def trigger (self, args):
          135  +        try:
          136  +            dialog = GraphicOptions(self.ctx)
          137  +            dialog.run()
          138  +        except:
          139  +            traceback.print_exc()
          140  +
          141  +    def _loadOptions (self):
          142  +        try:
          143  +            xChild = self.xGLOptionNode.getByName("o_fr")
          144  +            self.xMulticolor.State = xChild.getPropertyValue("line_multicolor")
          145  +            sLineType = xChild.getPropertyValue("line_type")
          146  +            if sLineType == "WAVE":
          147  +                self.xWaveLine.State = 1
          148  +            elif sLineType == "BOLDWAVE":
          149  +                self.xBoldWaveLine.State = 1
          150  +            elif sLineType == "BOLD":
          151  +                self.xBoldLine.State = 1
          152  +            else:
          153  +                print("Error. Unknown line type: " + sLineType)
          154  +        except:
          155  +            traceback.print_exc()
          156  +
          157  +
          158  +#g_ImplementationHelper = unohelper.ImplementationHelper()
          159  +#g_ImplementationHelper.addImplementation(GraphicOptions, 'net.grammalecte.GraphicOptions', ('com.sun.star.task.Job',))

Added gc_lang/fr/oxt/GraphicOptions/go_strings.py.

            1  +def getUI (sLang):
            2  +    if sLang in dStrings:
            3  +        return dStrings[sLang]
            4  +    return dStrings["fr"]
            5  +
            6  +dStrings = {
            7  +    "fr": {
            8  +        "title": "Grammalecte · Options graphiques",
            9  +
           10  +        "graphic_info": "Apparence du soulignement des erreurs grammaticales et typographiques",
           11  +
           12  +        "linetype_section": "Type de ligne",
           13  +        "wave_line": "Vaguelette fine (réglage par défaut de Writer)",
           14  +        "boldwave_line": "Vaguelette épaisse (réglage par défaut de Grammalecte)",
           15  +        "bold_line": "Trait droit et épais",
           16  +
           17  +        "color_section": "Couleurs",
           18  +        "multicolor_line": "Utiliser plusieurs couleurs",
           19  +        "multicolor_descr": "Par défaut, Writer signale les erreurs grammaticales et typographiques avec une vaguelette de couleur bleue. Si cette option est cochée, Grammalecte attribuera des couleurs différentes aux erreurs selon leur type.",
           20  +
           21  +        "spell_info": "L’apparence du soulignement des erreurs orthographiques (vaguelette rouge) n’est pas modifiable",
           22  +
           23  +        "restart": "Le changement ne prendra effet qu’après le redémarrage du logiciel.",
           24  +
           25  +        "apply_button": "Appliquer",
           26  +        "cancel_button": "Annuler",
           27  +    },
           28  +    "en": {
           29  +        "title": "Grammalecte · Graphic options",
           30  +
           31  +        "graphic_info": "Appearance of uderlines for grammar and typographical mistakes",
           32  +
           33  +        "linetype_section": "Line types",
           34  +        "wave_line": "Thin wave (default setting of Writer)",
           35  +        "boldwave_line": "Thick wave (default setting of Grammalecte)",
           36  +        "bold_line": "Thick and straight line",
           37  +
           38  +        "color_section": "Colors",
           39  +        "multicolor_line": "Use several colors",
           40  +        "multicolor_descr": "By default, Writer underlines grammar and typographical mistakes with a blue wave. If this option is activated, Grammalecte uses different colors for mistakes according to the type they belong to.",
           41  +
           42  +        "spell_info": "Appearance of underlines for spelling mistakes (red and thin wave) can’t be modified",
           43  +
           44  +        "restart": "The modification will be effective only after restarting the software.",
           45  +
           46  +        "apply_button": "Apply",
           47  +        "cancel_button": "Cancel",
           48  +    },
           49  +}

Changes to gc_lang/fr/oxt/addons.xcu.

   132    132                           <value>com.sun.star.text.TextDocument,com.sun.star.text.GlobalDocument,com.sun.star.text.WebDocument</value>
   133    133                       </prop>
   134    134                       <prop oor:name="ImageIdentifier" oor:type="xs:string">
   135    135                           <value>org.dicollecte.images:Grammalecte</value>
   136    136                       </prop>
   137    137                   </node>
   138    138                   <node oor:name="m7" oor:op="replace">
          139  +                    <prop oor:name="URL" oor:type="xs:string">
          140  +                        <value>service:net.grammalecte.AppLauncher?GO</value>
          141  +                    </prop>
          142  +                    <!--<prop oor:name="URL" oor:type="xs:string">
          143  +                        <value>.uno:OptionsTreeDialog?OptionsPageURL:string=%origin%/dialog/fr.xdl</value>
          144  +                    </prop>-->
          145  +                    <prop oor:name="Title" oor:type="xs:string">
          146  +                        <value/>
          147  +                        <value xml:lang="fr">Options grap~hiques…</value>
          148  +                        <value xml:lang="en-US">Grap~hic options…</value>
          149  +                    </prop>
          150  +                    <prop oor:name="Target" oor:type="xs:string">
          151  +                        <value>_self</value>
          152  +                    </prop>
          153  +                    <prop oor:name="Context" oor:type="xs:string">
          154  +                        <value>com.sun.star.text.TextDocument,com.sun.star.text.GlobalDocument,com.sun.star.text.WebDocument</value>
          155  +                    </prop>
          156  +                    <prop oor:name="ImageIdentifier" oor:type="xs:string">
          157  +                        <value>org.dicollecte.images:Grammalecte</value>
          158  +                    </prop>
          159  +                </node>
          160  +                <node oor:name="m8" oor:op="replace">
   139    161                       <prop oor:name="URL" oor:type="xs:string">
   140    162                           <value>service:net.grammalecte.AppLauncher?DI</value>
   141    163                       </prop>
   142    164                       <prop oor:name="Title" oor:type="xs:string">
   143    165                           <value/>
   144    166                           <value xml:lang="fr">Options des ~dictionnaires…</value>
   145    167                           <value xml:lang="en-US">~Dictionaries options…</value>