Пример #1
0
 def modifyRule(self):
     if not self._checkRuleName(self.xEditName.Text):
         MessageBox(self.xDocument, ui.get("name_error"),
                    ui.get("name_error_title"), ERRORBOX)
         return
     sRuleName = self.xEditName.Text
     if self.iSelectedRow < 0 or not sRuleName or not self.xEditPattern.Text:
         MessageBox(self.xDocument, ui.get("name_and_replace_error"),
                    ui.get("name_and_replace_error_title"), ERRORBOX)
         return
     if len(self.xEditPattern.Text) > self.nFieldMaxLen or len(
             self.xEditRepl.Text) > self.nFieldMaxLen:
         MessageBox(self.xDocument, ui.get("max_len_error"),
                    ui.get("max_len_error_title"), ERRORBOX)
         return
     if sRuleName != self.sSelectedRuleName and sRuleName in self.dRules:
         MessageBox(self.xDocument, ui.get("modify_name_error"),
                    ui.get("modify_name_error_title"), ERRORBOX)
         return
     try:
         self.dRules[sRuleName] = {
             "sPattern": self.xEditPattern.Text,
             "sRepl": self.xEditRepl.Text,
             "bRegex": self.xEditRegex.State == 1,
             "bCaseSens": self.xEditCaseSens.State == 1
         }
         aColumns = (0, 1, 2, 3, 4)
         self.xGridModel.GridDataModel.updateRowData(
             aColumns, self.iSelectedRow, self._getValuesForRow(sRuleName))
     except:
         traceback.print_exc()
Пример #2
0
 def addRule(self):
     if not self._checkRuleName(self.xNewName.Text):
         MessageBox(self.xDocument, ui.get("name_error"),
                    ui.get("name_error_title"), ERRORBOX)
         return
     if not self.xNewName.Text or not self.xNewPattern.Text:
         MessageBox(self.xDocument, ui.get("name_and_replace_error"),
                    ui.get("name_and_replace_error_title"), ERRORBOX)
         return
     if len(self.xNewPattern.Text) > self.nFieldMaxLen or len(
             self.xNewRepl.Text) > self.nFieldMaxLen:
         MessageBox(self.xDocument, ui.get("max_len_error"),
                    ui.get("max_len_error_title"), ERRORBOX)
         return
     sRuleName = self.xNewName.Text
     if sRuleName in self.dRules:
         MessageBox(self.xDocument, ui.get('add_name_error'),
                    ui.get("add_name_error_title"), ERRORBOX)
         return
     self.dRules[sRuleName] = {
         "sPattern": self.xNewPattern.Text,
         "sRepl": self.xNewRepl.Text,
         "bRegex": self.xNewRegex.State == 1,
         "bCaseSens": self.xNewCaseSens.State == 1
     }
     xGridDataModel = self.xGridModel.GridDataModel
     xGridDataModel.addRow(xGridDataModel.RowCount + 1,
                           self._getValuesForRow(sRuleName))
     xGridDataModel.sortByColumn(0, True)
     self._clearAddFields()
Пример #3
0
 def deleteRule(self):
     if self.sSelectedRuleName != self.xEditName.Text:
         MessageBox(self.xDocument, ui.get('delete_name_error'),
                    ui.get("delete_name_error_title"), ERRORBOX)
         return
     sRuleName = self.sSelectedRuleName
     if not sRuleName or sRuleName not in self.dRules:
         return
     try:
         self._clearEditFields()
         self.xGridModel.GridDataModel.removeRow(self.iSelectedRow)
         self.iSelectedRow = -1
         del self.dRules[sRuleName]
     except:
         traceback.print_exc()
Пример #4
0
 def exportRules(self):
     if not self.dRules:
         return
     sText = json.dumps(self.dRules, ensure_ascii=False)
     try:
         xFilePicker = self.xSvMgr.createInstanceWithContext(
             'com.sun.star.ui.dialogs.FilePicker', self.ctx
         )  # other possibility: com.sun.star.ui.dialogs.SystemFilePicker
         xFilePicker.initialize([
             uno.getConstantByName(
                 "com.sun.star.ui.dialogs.TemplateDescription.FILESAVE_SIMPLE"
             )
         ])  # seems useless
         xFilePicker.appendFilter("Supported files", "*.json")
         xFilePicker.setDefaultName(
             "grammalecte_tf_trans_rules.json")  # doesn’t work on Windows
         xFilePicker.setDisplayDirectory("")
         xFilePicker.setMultiSelectionMode(False)
         nResult = xFilePicker.execute()
         if nResult == 1:
             # lFile = xFilePicker.getSelectedFiles()
             lFile = xFilePicker.getFiles()
             spfExported = lFile[0][5:].lstrip("/")  # remove file://
             if platform.system() != "Windows":
                 spfExported = "/" + spfExported
             #spfExported = os.path.join(os.path.expanduser("~"), "fr.personal.json")
             with open(spfExported, "w", encoding="utf-8") as hDst:
                 hDst.write(sText)
     except:
         sMessage = traceback.format_exc()
         MessageBox(self.xDocument, sMessage, ui.get('error'), ERRORBOX)
Пример #5
0
 def saveRules(self):
     try:
         xChild = self.xGLOptionNode.getByName("o_${lang}")
         xChild.setPropertyValue("tfe_rules", json.dumps(self.dRules))
         self.xGLOptionNode.commitChanges()
     except:
         sMessage = traceback.format_exc()
         MessageBox(self.xDocument, sMessage, ui.get('error'), ERRORBOX)
Пример #6
0
 def applyRule(self):
     if self.xEditPattern.Text == "":
         return
     try:
         xRD = self.xDocument.createReplaceDescriptor()
         xRD.SearchString = self.xEditPattern.Text
         xRD.ReplaceString = self.xEditRepl.Text
         xRD.SearchRegularExpression = self.xEditRegex.State
         xRD.SearchCaseSensitive = self.xEditCaseSens.State
         n = self.xDocument.replaceAll(xRD)
         self.xApplyRes.Label = str(n) + " " + ui.get("modif")
     except:
         traceback.print_exc()
Пример #7
0
 def importRules(self):
     spfImported = ""
     try:
         xFilePicker = self.xSvMgr.createInstanceWithContext(
             'com.sun.star.ui.dialogs.FilePicker', self.ctx
         )  # other possibility: com.sun.star.ui.dialogs.SystemFilePicker
         xFilePicker.initialize([
             uno.getConstantByName(
                 "com.sun.star.ui.dialogs.TemplateDescription.FILEOPEN_SIMPLE"
             )
         ])  # seems useless
         xFilePicker.appendFilter("Supported files", "*.json")
         xFilePicker.setDefaultName(
             "grammalecte_tf_trans_rules.json")  # useless, doesn’t work
         xFilePicker.setDisplayDirectory("")
         xFilePicker.setMultiSelectionMode(False)
         nResult = xFilePicker.execute()
         if nResult == 1:
             # lFile = xFilePicker.getSelectedFiles()
             lFile = xFilePicker.getFiles()
             #print(lFile)
             spfImported = lFile[0][5:].lstrip("/")  # remove file://
             if platform.system() != "Windows":
                 spfImported = "/" + spfImported
     except:
         sMessage = traceback.format_exc()
         MessageBox(self.xDocument, sMessage, ui.get('error'), ERRORBOX)
         return
     if not spfImported or not os.path.isfile(spfImported):
         sMessage = ui.get('file_not_found') + "<" + spfImported + ">"
         MessageBox(self.xDocument, sMessage, ui.get('error'), ERRORBOX)
         return
     try:
         with open(spfImported, "r", encoding="utf-8") as hFile:
             dImportedRules = json.load(hFile)
     except:
         sMessage = traceback.format_exc()
         MessageBox(self.xDocument, sMessage, ui.get('error'), ERRORBOX)
     else:
         nButton = MessageBox(self.xDocument, ui.get('import_question'),
                              ui.get('import_title'), QUERYBOX,
                              BUTTONS_YES_NO_CANCEL)
         if nButton == 0:  # cancel
             return
         xGridDataModel = self.xGridModel.GridDataModel
         if nButton == 2:  # yes
             self.dRules.update(dImportedRules)
             self.xGridModel.GridDataModel.removeAllRows()
             for sRuleName in self.dRules:
                 xGridDataModel.addRow(xGridDataModel.RowCount + 1,
                                       self._getValuesForRow(sRuleName))
         else:  # 3 = no
             for sRuleName, dValues in dImportedRules.items():
                 if not sRuleName in self.dRules:
                     self.dRules[sRuleName] = dValues
                     xGridDataModel.addRow(xGridDataModel.RowCount + 1,
                                           self._getValuesForRow(sRuleName))
         xGridDataModel.sortByColumn(0, True)
Пример #8
0
 def loadRules(self):
     try:
         xChild = self.xGLOptionNode.getByName("o_${lang}")
         sTFEditorOptions = xChild.getPropertyValue("tfe_rules")
         if not sTFEditorOptions:
             return
         self.dRules = json.loads(sTFEditorOptions)
         xGridDataModel = self.xGridModel.GridDataModel
         for sRuleName in self.dRules:
             xGridDataModel.addRow(xGridDataModel.RowCount + 1,
                                   self._getValuesForRow(sRuleName))
         xGridDataModel.sortByColumn(0, True)
     except:
         sMessage = traceback.format_exc()
         MessageBox(self.xDocument, sMessage, ui.get('error'), ERRORBOX)
Пример #9
0
 def deleteAll(self):
     nButton = MessageBox(self.xDocument, ui.get('delete_all_confirm'),
                          ui.get('delete_all'), QUERYBOX, BUTTONS_YES_NO)
     if nButton == 2:  # ok
         self.dRules.clear()
         self.xGridModel.GridDataModel.removeAllRows()
Пример #10
0
    def run(self, sLang):
        # lang
        ui.selectLang(sLang)

        # dialog
        self.xDialog = self.xSvMgr.createInstanceWithContext(
            'com.sun.star.awt.UnoControlDialogModel', self.ctx)
        self.xDialog.Width = 400
        self.xDialog.Height = 280
        self.xDialog.Title = ui.get('title')
        xWindowSize = helpers.getWindowSize()
        self.xDialog.PositionX = int((xWindowSize.Width / 2) -
                                     (self.xDialog.Width / 2))
        self.xDialog.PositionY = int((xWindowSize.Height / 2) -
                                     (self.xDialog.Height / 2))

        # fonts
        xFDTitle = uno.createUnoStruct("com.sun.star.awt.FontDescriptor")
        xFDTitle.Height = 9
        xFDTitle.Weight = uno.getConstantByName(
            "com.sun.star.awt.FontWeight.BOLD")
        xFDTitle.Name = "Verdana"

        xFDMono = uno.createUnoStruct("com.sun.star.awt.FontDescriptor")
        xFDMono.Height = 8
        xFDMono.Name = "Monospace"

        # widget
        nX = 10
        nY1 = 5
        nY2 = nY1 + 200

        nWidth = self.xDialog.Width - 20
        nHeight = 10

        # Add
        self._addWidget("new_entry",
                        'FixedLine',
                        nX,
                        nY1,
                        nWidth,
                        nHeight,
                        Label=ui.get("new_entry"),
                        FontDescriptor=xFDTitle)

        self._addWidget('newnamelbl',
                        'FixedText',
                        nX,
                        nY1 + 10,
                        60,
                        nHeight,
                        Label=ui.get("name"))
        self._addWidget('newreplacelbl',
                        'FixedText',
                        nX + 65,
                        nY1 + 10,
                        130,
                        nHeight,
                        Label=ui.get("pattern"))
        self._addWidget('newbylbl',
                        'FixedText',
                        nX + 200,
                        nY1 + 10,
                        100,
                        nHeight,
                        Label=ui.get("repl"))

        self.xNewName = self._addWidget('newname',
                                        'Edit',
                                        nX,
                                        nY1 + 20,
                                        60,
                                        10,
                                        FontDescriptor=xFDMono)
        self.xNewPattern = self._addWidget('newreplace',
                                           'Edit',
                                           nX + 65,
                                           nY1 + 20,
                                           130,
                                           10,
                                           FontDescriptor=xFDMono)
        self.xNewRepl = self._addWidget('newby',
                                        'Edit',
                                        nX + 200,
                                        nY1 + 20,
                                        100,
                                        10,
                                        FontDescriptor=xFDMono)
        self.xNewRegex = self._addWidget('newregex',
                                         'CheckBox',
                                         nX + 305,
                                         nY1 + 22,
                                         35,
                                         nHeight,
                                         Label=ui.get("regex"),
                                         HelpText=ui.get("regex_help"))
        self.xNewCaseSens = self._addWidget('newcasesens',
                                            'CheckBox',
                                            nX + 340,
                                            nY1 + 22,
                                            40,
                                            nHeight,
                                            Label=ui.get("casesens"),
                                            HelpText=ui.get("casesens_help"),
                                            State=True)

        self._addWidget('order_info',
                        'FixedText',
                        nX,
                        nY1 + 32,
                        300,
                        nHeight,
                        Label=ui.get("order_info"))
        self._addWidget('add',
                        'Button',
                        self.xDialog.Width - 50,
                        nY1 + 31,
                        40,
                        11,
                        Label=ui.get('add'))

        lColumns = [
            {
                "Title": ui.get("name"),
                "ColumnWidth": 80
            },
            {
                "Title": ui.get("pattern"),
                "ColumnWidth": 160
            },
            {
                "Title": ui.get("repl"),
                "ColumnWidth": 120
            },
            {
                "Title": ui.get("regex"),
                "ColumnWidth": 60
            },
            {
                "Title": ui.get("casesens"),
                "ColumnWidth": 60
            },
        ]
        self.xGridModel = self._addGrid("list_grid", nX, nY1 + 45, nWidth, 150,
                                        lColumns)

        # Modify
        self._addWidget("edit_entry",
                        'FixedLine',
                        nX,
                        nY2,
                        nWidth,
                        nHeight,
                        Label=ui.get("edit_entry"),
                        FontDescriptor=xFDTitle)
        self._addWidget('editnamelbl',
                        'FixedText',
                        nX,
                        nY2 + 10,
                        60,
                        nHeight,
                        Label=ui.get("name"))
        self._addWidget('editreplacelbl',
                        'FixedText',
                        nX + 65,
                        nY2 + 10,
                        130,
                        nHeight,
                        Label=ui.get("pattern"))
        self._addWidget('editbylbl',
                        'FixedText',
                        nX + 200,
                        nY2 + 10,
                        100,
                        nHeight,
                        Label=ui.get("repl"))

        self.xEditName = self._addWidget('editname',
                                         'Edit',
                                         nX,
                                         nY2 + 20,
                                         60,
                                         10,
                                         FontDescriptor=xFDMono,
                                         Enabled=False)
        self.xEditPattern = self._addWidget('editreplace',
                                            'Edit',
                                            nX + 65,
                                            nY2 + 20,
                                            130,
                                            10,
                                            FontDescriptor=xFDMono,
                                            Enabled=False)
        self.xEditRepl = self._addWidget('editby',
                                         'Edit',
                                         nX + 200,
                                         nY2 + 20,
                                         100,
                                         10,
                                         FontDescriptor=xFDMono,
                                         Enabled=False)
        self.xEditRegex = self._addWidget('editregex',
                                          'CheckBox',
                                          nX + 305,
                                          nY2 + 22,
                                          35,
                                          nHeight,
                                          Label=ui.get("regex"),
                                          HelpText=ui.get("regex_help"),
                                          Enabled=False)
        self.xEditCaseSens = self._addWidget('editcasesens',
                                             'CheckBox',
                                             nX + 340,
                                             nY2 + 22,
                                             40,
                                             nHeight,
                                             Label=ui.get("casesens"),
                                             HelpText=ui.get("casesens_help"),
                                             Enabled=False)

        self.xDeleteButton = self._addWidget('delete',
                                             'Button',
                                             nX,
                                             nY2 + 31,
                                             40,
                                             11,
                                             Label=ui.get('delete'),
                                             TextColor=0xAA0000,
                                             Enabled=False)
        self.xApplyButton = self._addWidget('apply',
                                            'Button',
                                            nX + (self.xDialog.Width / 2) - 20,
                                            nY2 + 31,
                                            40,
                                            11,
                                            Label=ui.get('apply'),
                                            HelpText="apply_help",
                                            TextColor=0x0000AA,
                                            Enabled=False)
        self.xApplyRes = self._addWidget('apply_res',
                                         'FixedText',
                                         nX + (self.xDialog.Width / 2) + 30,
                                         nY2 + 33,
                                         60,
                                         10,
                                         Label="",
                                         Align=2,
                                         Enabled=False)
        self.xModifyButton = self._addWidget('modify',
                                             'Button',
                                             self.xDialog.Width - 50,
                                             nY2 + 31,
                                             40,
                                             11,
                                             Label=ui.get('modify'),
                                             TextColor=0x00AA00,
                                             Enabled=False)

        # import, export, save, close
        self._addWidget("buttons_line", 'FixedLine', nX,
                        self.xDialog.Height - 30, nWidth, nHeight)
        self._addWidget('import',
                        'Button',
                        nX,
                        self.xDialog.Height - 20,
                        50,
                        14,
                        Label=ui.get('import'),
                        FontDescriptor=xFDTitle,
                        TextColor=0x0000AA)
        self._addWidget('export',
                        'Button',
                        nX + 55,
                        self.xDialog.Height - 20,
                        50,
                        14,
                        Label=ui.get('export'),
                        FontDescriptor=xFDTitle,
                        TextColor=0x00AA00)
        self._addWidget('delete_all',
                        'Button',
                        nX + (self.xDialog.Width / 2) - 35,
                        self.xDialog.Height - 20,
                        70,
                        14,
                        Label=ui.get('delete_all'),
                        FontDescriptor=xFDTitle,
                        TextColor=0xAA0000)
        self._addWidget('save_and_close',
                        'Button',
                        self.xDialog.Width - 110,
                        self.xDialog.Height - 20,
                        100,
                        14,
                        Label=ui.get('save_and_close'),
                        FontDescriptor=xFDTitle,
                        TextColor=0x00AA00)

        # data
        self.dRules = {}
        self.iSelectedRow = -1
        self.nFieldMaxLen = 250

        # load configuration
        self.xGLOptionNode = helpers.getConfigSetting(
            "/org.openoffice.Lightproof_${implname}/Other/", True)
        self.loadRules()

        # container
        self.xContainer = self.xSvMgr.createInstanceWithContext(
            'com.sun.star.awt.UnoControlDialog', self.ctx)
        self.xContainer.setModel(self.xDialog)
        self.xGridControl = self.xContainer.getControl('list_grid')
        self.xGridControl.addSelectionListener(self)
        self.xContainer.getControl('add').addActionListener(self)
        self.xContainer.getControl('add').setActionCommand('Add')
        self.xContainer.getControl('delete').addActionListener(self)
        self.xContainer.getControl('delete').setActionCommand('Delete')
        self.xContainer.getControl('apply').addActionListener(self)
        self.xContainer.getControl('apply').setActionCommand('Apply')
        self.xContainer.getControl('modify').addActionListener(self)
        self.xContainer.getControl('modify').setActionCommand('Modify')
        self.xContainer.getControl('import').addActionListener(self)
        self.xContainer.getControl('import').setActionCommand('Import')
        self.xContainer.getControl('export').addActionListener(self)
        self.xContainer.getControl('export').setActionCommand('Export')
        self.xContainer.getControl('delete_all').addActionListener(self)
        self.xContainer.getControl('delete_all').setActionCommand('DeleteAll')
        self.xContainer.getControl('save_and_close').addActionListener(self)
        self.xContainer.getControl('save_and_close').setActionCommand(
            'SaveAndClose')
        self.xContainer.setVisible(False)  # True for non modal dialog
        xToolkit = self.xSvMgr.createInstanceWithContext(
            'com.sun.star.awt.ExtToolkit', self.ctx)
        self.xContainer.createPeer(xToolkit, None)
        self.xContainer.execute()