def testUserVars(self): USERVAR_PREFIX = "Test_" # variables for testing userVars = UserVars(USERVAR_PREFIX, self.unoObjs.document, logger) userVars.store("TestVar_1", "hamburger") result = userVars.get("TestVar_1") self.assertEqual(result, "hamburger") userVars.store("TestVar_2", "0") result = userVars.get("TestVar_2") self.assertEqual(result, "0") result = userVars.get("TestVar_3") self.assertEqual(result, "") userVars.store("TestVar_4", "something") userVars.store("TestVar_4", "") result = userVars.get("TestVar_4") self.assertEqual(result, "") userVars.delete("TestVar_1") result = userVars.get("TestVar_1") self.assertEqual(result, "") result = userVars.get("TestVar_2") self.assertEqual(result, "0") userVars.delete("TestVar_2") userVars.delete("TestVar_3") userVars.delete("TestVar_4") result = userVars.get("TestVar_2") self.assertEqual(result, "") result = userVars.get("TestVar_3") self.assertEqual(result, "")
def createComparisonDoc(self): """ Create an empty writer doc. If the main file has a saved path, then only one comparison doc should be created. Returns True if a new document was created. """ if not self.makeDoc: return if self.writerDoc is not None: if self.writerDoc.document is not None: ## Document is already open return varname = "ComparisonDocForFile" currentFilepath = None # file path of main document url = self.mainDoc.document.getURL() if url: currentFilepath = uno.fileUrlToSystemPath(url) doclist = self.mainDoc.getOpenDocs(util.UnoObjs.DOCTYPE_WRITER) for docUnoObjs in doclist: logger.debug("Checking writer document for settings.") userVars = UserVars(self.VAR_PREFIX, docUnoObjs.document, logger) if not userVars.isEmpty(varname): varFilepath = userVars.get(varname) if varFilepath == currentFilepath: logger.debug("found comparison doc") self.writerDoc = docUnoObjs return False else: logger.debug("%s != %s", varFilepath, currentFilepath) logger.debug("opening new document for comparison") newDoc = self.mainDoc.desktop.loadComponentFromURL( "private:factory/swriter", "_blank", 0, ()) self.writerDoc = self.mainDoc.getDocObjs(newDoc) self.writerDoc.text.insertString( self.writerDoc.viewcursor, "Here are the changes that have been made. " + "You may want to look through these changes, and make any " + "corrections in the main document. " + "When finished checking, just close this window without saving.", 0) self.writerDoc.text.insertControlCharacter(self.writerDoc.viewcursor, PARAGRAPH_BREAK, 0) self.writerDoc.text.insertControlCharacter(self.writerDoc.viewcursor, PARAGRAPH_BREAK, 0) if currentFilepath: userVars = UserVars(self.VAR_PREFIX, self.writerDoc.document, logger) userVars.store(varname, currentFilepath) self.emptyDoc = True logger.debug(util.funcName('end'))
def _harvestWords(self, fileItem): """Harvest words from the specified file.""" fileType = fileItem.filetype # short variable name logger.debug(util.funcName(args=fileType)) words = [] if fileType in WordsReader.supportedNames(): reader = WordsReader(fileItem, self.unoObjs) words = reader.read() elif fileType in SFM_Reader.supportedNames(): reader = SFM_Reader(fileItem, self.unoObjs) words = reader.read() elif fileType in InterlinReader.supportedNames(): config = fileitemlist.InterlinInputSettings(self.userVars) config.showMorphLine2 = True config.separateMorphColumns = True lingExFileItem = fileitemlist.LingExFileItem(self.userVars) lingExFileItem.filepath = fileItem.filepath config.fileList.addItem(lingExFileItem) reader = InterlinReader(self.unoObjs, self.userVars, config) words = reader.grabWords(fileItem.thingsToGrab) elif fileType in PhonReader.supportedNames(): config = lingex_structs.PhonInputSettings(self.userVars) config.filepath = fileItem.filepath config.phoneticWS = fileItem.writingSystem config.isLexemePhonetic = True phonUserVars = UserVars( Prefix.PHONOLOGY, self.unoObjs.document, logger) if phonUserVars.get("FlexLexeme") == 'phonemic': config.isLexemePhonetic = False reader = PhonReader(self.unoObjs, self.userVars, config) words = reader.grabWords(fileItem.thingsToGrab) elif fileType in DocReader.supportedNames(): settings = TextSearchSettings() settings.load_userVars(self.userVars) reader = DocReader(fileItem, self.unoObjs, settings.matchesLimit) words = reader.read() elif fileType in CalcFileReader.supportedNames(): reader = CalcFileReader(self.unoObjs) reader.setFileConfig(fileItem) words = reader.read() return words
def loadValues(self, userVars, abbrevList): logger.debug(util.funcName('begin')) abbrevList.loadUserVars() dutil.fill_list_ctrl(self.listboxAbbrevs, abbrevList.getItemTextList()) styleNames = styles.getListOfStyles("ParagraphStyles", self.unoObjs) displayNames = [dispName for dispName, name in styleNames] selectedValue = userVars.get("SearchParaStyle") if selectedValue == "": userVarsGrammar = UserVars(Prefix.GRAMMAR, self.unoObjs.document, logger) selectedValue = userVarsGrammar.get("StyleName_Gloss") dutil.fill_list_ctrl(self.cmbxSearchParaStyle, displayNames, selectedValue) searchAffix = userVars.get("SearchAffix") if searchAffix == "suffix": self.optSearchSuffix.setState(True) elif searchAffix == "prefix": self.optSearchPrefix.setState(True) elif searchAffix == "any": self.optSearchAny.setState(True) varname = "MaxSearchLength" if userVars.isEmpty(varname): defaultCtrlText = "5" userVars.store(varname, defaultCtrlText) userVarVal = defaultCtrlText else: userVarVal = userVars.getInt(varname) self.txtMaxSearchLength.setText(userVarVal) if userVars.getInt("SearchUpperCase") == 1: self.chkSearchUpperCase.setState(True) self.addRemainingListeners() logger.debug(util.funcName('end'))
class DlgAbbreviations: """Main class for this dialog.""" def __init__(self, unoObjs): self.unoObjs = unoObjs self.userVars = UserVars(Prefix.ABBREVIATIONS, unoObjs.document, logger) self.msgbox = MessageBox(unoObjs) self.abbrevList = abbreviations.AbbrevList(self.unoObjs, self.userVars) self.selectedIndex = -1 # position in abbrevList and listboxAbbrevs self.selectedAbbrev = None self.dlgCtrls = None self.evtHandler = None self.dlgClose = None def showDlg(self): logger.debug(util.funcName(obj=self)) dlg = dutil.createDialog(self.unoObjs, _dlgdef) if not dlg: return ctrl_getter = dutil.ControlGetter(dlg) self.dlgClose = dlg.endExecute self.evtHandler = DlgEventHandler(self) self.dlgCtrls = DlgControls(self.unoObjs, ctrl_getter, self.evtHandler) logger.debug("Got controls.") self.dlgCtrls.loadValues(self.userVars, self.abbrevList) self.viewAbbrev(False) ## Display the dialog and then close it dlg.execute() self.storeResults() dlg.dispose() def viewAbbrev(self, checkForUpdates): """ Fill the form with values of the selected abbreviation. :param checkForUpdates: set to true to update current item if needed """ logger.debug(util.funcName('begin')) if checkForUpdates: newSelectedItem = self.dlgCtrls.listboxAbbrevs.getSelectedItem() logger.debug("newSelectedItem '%s'", newSelectedItem) self.updateAbbrev(False) if newSelectedItem: # Select the new item again, # since it may have been deselected while refreshing the list. self.dlgCtrls.listboxAbbrevs.selectItem(newSelectedItem, True) try: self.selectedIndex = dutil.get_selected_index( self.dlgCtrls.listboxAbbrevs) logger.debug("self.selectedIndex %d", self.selectedIndex) except exceptions.ChoiceProblem: return abbr = self.abbrevList[self.selectedIndex] logger.debug("Abbrev %s", abbr.abbrevText) self.dlgCtrls.txtAbbrev.setText(abbr.abbrevText) self.dlgCtrls.txtFullName.setText(abbr.fullName) if abbr.forceOutput: self.dlgCtrls.chkForceOutput.setState(True) else: self.dlgCtrls.chkForceOutput.setState(False) self.dlgCtrls.txtOccurrences.setText(abbr.occurrences) logger.debug(util.funcName('end')) def updateAbbrev(self, selectNewItem): """ Update abbrev attributes from dialog fields if changed. :param selectNewItem: set to True to select item when refreshing list """ logger.debug(util.funcName('begin')) if not 0 <= self.selectedIndex < len(self.abbrevList): if selectNewItem: self.msgbox.displayExc(self.abbrevList.noItemSelected()) return newAbbrev = abbreviations.Abbrev() newAbbrev.abbrevText = self.dlgCtrls.txtAbbrev.getText() if not newAbbrev.abbrevText: return newAbbrev.fullName = self.dlgCtrls.txtFullName.getText() if self.dlgCtrls.chkForceOutput.getState() == 1: # checked newAbbrev.forceOutput = True oldAbbrev = self.abbrevList[self.selectedIndex] if oldAbbrev: if newAbbrev.sameAs(oldAbbrev): return logger.debug("%r not sameAs %r", newAbbrev, oldAbbrev) if newAbbrev.abbrevText == oldAbbrev.abbrevText: newAbbrev.occurrences = oldAbbrev.occurrences try: self.abbrevList.updateItem(self.selectedIndex, newAbbrev) except exceptions.ChoiceProblem as exc: self.msgbox.displayExc(exc) return if selectNewItem: self.refreshListAndSelectItem(newAbbrev) else: self.refreshList() logger.debug(util.funcName('end')) def refreshList(self): dutil.fill_list_ctrl(self.dlgCtrls.listboxAbbrevs, self.abbrevList.getItemTextList()) def refreshListAndSelectItem(self, selItem): logger.debug(util.funcName('begin')) dutil.fill_list_ctrl(self.dlgCtrls.listboxAbbrevs, self.abbrevList.getItemTextList(), str(selItem)) try: self.selectedIndex = dutil.get_selected_index( self.dlgCtrls.listboxAbbrevs) logger.debug("self.selectedIndex %d", self.selectedIndex) self.viewAbbrev(False) except exceptions.ChoiceProblem: return logger.debug(util.funcName('end')) def addAbbrev(self): logger.debug(util.funcName('begin')) newAbbrev = abbreviations.Abbrev() newAbbrev.abbrevText = "---" newAbbrev.fullName = "" self.abbrevList.addItem(newAbbrev, allowDuplicates=True) self.refreshListAndSelectItem(newAbbrev) logger.debug(util.funcName('end')) def deleteAbbrev(self): logger.debug(util.funcName('begin')) try: self.abbrevList.deleteItem(self.selectedIndex) except exceptions.ChoiceProblem as exc: self.msgbox.displayExc(exc) return self.refreshList() ## Select the next item if self.dlgCtrls.listboxAbbrevs.getItemCount() > 0: dutil.select_index(self.dlgCtrls.listboxAbbrevs, self.selectedIndex) self.viewAbbrev(False) else: ## The list is empty. Clear the fields. logger.debug("Clearing fields.") self.dlgCtrls.txtAbbrev.setText("") self.dlgCtrls.txtFullName.setText("") self.dlgCtrls.chkForceOutput.setState(False) self.dlgCtrls.txtOccurrences.setText(0) self.selectedIndex = -1 logger.debug(util.funcName('end')) def changeAllCaps(self): logger.debug(util.funcName('begin')) self.abbrevList.changeAllCaps() self.refreshList() dutil.select_index(self.dlgCtrls.listboxAbbrevs, self.selectedIndex) self.viewAbbrev(False) logger.debug(util.funcName('end')) def rescan(self): logger.debug(util.funcName('begin')) abbrevSearch = search.AbbrevSearch(self.unoObjs) abbrevSearch.findOccurrences(self.abbrevList) self.refreshList() dutil.select_index(self.dlgCtrls.listboxAbbrevs, self.selectedIndex) self.viewAbbrev(False) logger.debug(util.funcName('end')) def insertList(self): logger.debug(util.funcName('begin')) ## Rescan and prepare for output abbrevSearch = search.AbbrevSearch(self.unoObjs) abbrevSearch.findOccurrences(self.abbrevList) self.refreshList() self.abbrevList.storeUserVars() abbrevStyles = styles.AbbrevStyles(self.unoObjs, self.userVars) abbrevStyles.createStyles() ## Output the list and close writerOutput = outputmanager.AbbrevManager(self.unoObjs, abbrevStyles) try: writerOutput.outputList(self.abbrevList) except exceptions.MessageError as exc: self.msgbox.displayExc(exc) self.dlgClose() logger.debug(util.funcName('end')) def findNext(self): logger.debug(util.funcName('begin')) ## Get search form results displayName = self.dlgCtrls.cmbxSearchParaStyle.getText() if not displayName: self.msgbox.display("Please select a paragraph style.") return searchConfig = search.AbbrevSearchSettings() searchConfig.searchParaStyle = displayName self.userVars.store("SearchParaStyle", displayName) searchConfig.searchAffix = "any" if self.dlgCtrls.optSearchSuffix.getState() == 1: # checked searchConfig.searchAffix = "suffix" elif self.dlgCtrls.optSearchPrefix.getState() == 1: # checked searchConfig.searchAffix = "prefix" self.userVars.store("SearchAffix", searchConfig.searchAffix) try: searchConfig.maxSearchLength = int( self.dlgCtrls.txtMaxSearchLength.getText()) except ValueError: self.msgbox.display("Please enter a number for max length.") return self.userVars.store("MaxSearchLength", searchConfig.maxSearchLength) searchConfig.searchUpperCase = False chkValue = self.dlgCtrls.chkSearchUpperCase.getState() if chkValue == 1: searchConfig.searchUpperCase = True self.userVars.store("SearchUpperCase", str(chkValue)) searchConfig.startFromBeginning = False if self.dlgCtrls.chkStartFromBeginning.getState() == 1: searchConfig.startFromBeginning = True self.dlgCtrls.chkStartFromBeginning.setState(False) searchConfig.searchDelimiters = self.userVars.get("SearchDelimiters") ## Search abbrevSearch = search.AbbrevSearch(self.unoObjs) while True: possibleAbbrevs = abbrevSearch.findNext( searchConfig, self.abbrevList.getUniqueList()) if len(possibleAbbrevs) == 0: self.msgbox.display("No more possible abbreviations found.") return for possibleAbbrevText in possibleAbbrevs: if possibleAbbrevText.strip() == "": continue result = self.msgbox.displayYesNoCancel( "Add '%s' as a new abbreviation?", possibleAbbrevText) if result == "yes": logger.debug("Adding abbreviation from search.") newAbbrev = abbreviations.Abbrev() newAbbrev.abbrevText = possibleAbbrevText newAbbrev.occurrences = 1 try: self.abbrevList.addItem(newAbbrev) self.refreshListAndSelectItem(newAbbrev) except exceptions.ChoiceProblem as exc: self.msgbox.displayExc(exc) elif result == "cancel": return elif result == "no": ## continue pass logger.debug(util.funcName('end')) def storeResults(self): logger.debug(util.funcName('begin')) self.updateAbbrev(False) self.abbrevList.storeUserVars() logger.debug(util.funcName('end'))
class DlgGramSettingsTestCase(unittest.TestCase): def __init__(self, testCaseName): unittest.TestCase.__init__(self, testCaseName) testutil.modifyClass_showDlg(DlgGramSettings) @classmethod def setUpClass(cls): unoObjs = util.UnoObjs( testutil.stored.getContext(), loadDocObjs=False) testutil.blankWriterDoc(unoObjs) def setUp(self): logger.debug("DlgGramSettingsTestCase setUp()") self.unoObjs = testutil.unoObjsForCurrentDoc() USERVAR_PREFIX = "LTg_" # for LinguisticTools Grammar variables self.userVars = UserVars( USERVAR_PREFIX, self.unoObjs.document, logger) self.dlg = DlgGramSettings(self.unoObjs) def test1_enableDisable(self): # For this test, dialog should be set to its default settings. def useDialog(dummy_innerSelf): pass DlgGramSettings.useDialog = useDialog self.dlg.showDlg() self.dlg.dlgCtrls.enableDisable() self.assertEqual( self.dlg.dlgCtrls.chkMorphsSeparate.getModel().Enabled, True) self.assertEqual( self.dlg.dlgCtrls.chkPOS_aboveGloss.getModel().Enabled, False) def test2_enableDisable(self): def useDialog(innerSelf): innerSelf.dlgCtrls.chkMorphLine1.setState(0) innerSelf.dlgCtrls.chkPOS_Line.setState(1) innerSelf.dlgCtrls.chkOuterTable.setState(0) innerSelf.dlgCtrls.optTables.setState(0) DlgGramSettings.useDialog = useDialog self.dlg.showDlg() self.dlg.dlgCtrls.enableDisable() self.assertEqual(self.dlg.dlgCtrls.chkMorphLine1.getState(), 0) self.assertEqual( self.dlg.dlgCtrls.chkMorphLine1.getModel().Enabled, True) self.assertEqual( self.dlg.dlgCtrls.chkMorphsSeparate.getModel().Enabled, False) self.assertEqual( self.dlg.dlgCtrls.chkPOS_aboveGloss.getModel().Enabled, True) self.assertEqual( self.dlg.dlgCtrls.txtNumColWidth.getModel().Enabled, False) self.assertEqual( self.dlg.dlgCtrls.lblNumColWidth.getModel().Enabled, False) def test3_enableDisable(self): def useDialog(innerSelf): innerSelf.dlgCtrls.chkMorphLine1.setState(1) innerSelf.dlgCtrls.chkPOS_Line.setState(0) innerSelf.dlgCtrls.chkOuterTable.setState(1) innerSelf.dlgCtrls.optTables.setState(1) DlgGramSettings.useDialog = useDialog self.dlg.showDlg() self.dlg.dlgCtrls.enableDisable() self.assertEqual( self.dlg.dlgCtrls.chkMorphsSeparate.getModel().Enabled, True) self.assertEqual( self.dlg.dlgCtrls.chkPOS_aboveGloss.getModel().Enabled, False) self.assertEqual( self.dlg.dlgCtrls.txtNumColWidth.getModel().Enabled, True) self.assertEqual( self.dlg.dlgCtrls.lblNumColWidth.getModel().Enabled, True) def test4_interlinLines(self): def useDialog(innerSelf): innerSelf.dlgCtrls.chkWordLine1.setState(0) innerSelf.dlgCtrls.chkWordLine2.setState(1) innerSelf.dlgCtrls.chkMorphLine1.setState(1) innerSelf.dlgCtrls.chkMorphLine2.setState(1) innerSelf.dlgCtrls.chkPOS_Line.setState(1) innerSelf.dlgCtrls.optTables.setState(1) DlgGramSettings.useDialog = useDialog self.dlg.showDlg() self.assertEqual(self.dlg.dlgCtrls.chkPOS_Line.getState(), 1) self.assertEqual(self.dlg.dlgCtrls.chkWordLine2.getState(), 1) self.assertEqual(self.dlg.dlgCtrls.optFrames.getState(), 0) self.assertEqual(self.dlg.dlgCtrls.optTables.getState(), 1) self.dlg.evtHandler.actionPerformed(MyActionEvent("OK")) self.dlg = None self.assertEqual(self.userVars.get("Method"), "tables") self.assertEqual(self.userVars.getInt("ShowPartOfSpeech"), 1) def test5_fileList(self): def useDialog(dummy_innerSelf): pass DlgGramSettings.useDialog = useDialog self.dlg.showDlg() self.assertEqual(self.dlg.dlgCtrls.listboxFiles.getItemCount(), 0) filepath = os.path.join(util.TESTDATA_FOLDER, "testText1.xml") testutil.modifyFilePicker(filepath) self.dlg.evtHandler.actionPerformed(MyActionEvent("FileAdd")) self.assertEqual(self.dlg.dlgCtrls.listboxFiles.getItemCount(), 1) self.assertEqual(len(self.dlg.fileItems), 1) filepath = os.path.join(util.TESTDATA_FOLDER, "testText2.xml") testutil.modifyFilePicker(filepath) self.dlg.evtHandler.actionPerformed(MyActionEvent("FileAdd")) self.assertEqual(self.dlg.dlgCtrls.listboxFiles.getItemCount(), 2) self.assertEqual(len(self.dlg.fileItems), 2) self.assertEqual(self.dlg.dlgCtrls.listboxFiles.getSelectedItemPos(), 1) filepath = os.path.join(util.TESTDATA_FOLDER, "a_testText3.xml") testutil.modifyFilePicker(filepath) self.dlg.evtHandler.actionPerformed(MyActionEvent("FileAdd")) self.assertEqual(self.dlg.dlgCtrls.listboxFiles.getItemCount(), 3) self.assertEqual(len(self.dlg.fileItems), 3) self.assertEqual(self.dlg.dlgCtrls.listboxFiles.getSelectedItemPos(), 0) self.dlg.dlgCtrls.listboxFiles.selectItemPos(1, True) # testText1.xml self.dlg.dlgCtrls.txtPrefix.setText("PREF-") self.dlg.evtHandler.actionPerformed(MyActionEvent("FileUpdate")) fileItem = self.dlg.fileItems[1] self.assertEqual(fileItem.prefix, "PREF-") self.assertEqual(str(fileItem), "PREF- testText1.xml") self.dlg.evtHandler.actionPerformed(MyActionEvent("FileRemove")) self.assertEqual(self.dlg.dlgCtrls.listboxFiles.getItemCount(), 2) self.assertEqual(len(self.dlg.fileItems), 2) self.assertEqual(self.dlg.dlgCtrls.listboxFiles.getSelectedItemPos(), 1) fileItem = self.dlg.fileItems[1] self.assertEqual(str(fileItem), "testText2.xml") self.dlg.evtHandler.actionPerformed(MyActionEvent("FileRemove")) self.assertEqual(self.dlg.dlgCtrls.listboxFiles.getItemCount(), 1) self.assertEqual(len(self.dlg.fileItems), 1) self.assertEqual(self.dlg.dlgCtrls.listboxFiles.getSelectedItemPos(), 0) fileItem = self.dlg.fileItems[0] self.assertEqual(str(fileItem), "a_testText3.xml") self.dlg.evtHandler.actionPerformed(MyActionEvent("FileRemove")) self.assertEqual(self.dlg.dlgCtrls.listboxFiles.getItemCount(), 0) self.assertEqual(len(self.dlg.fileItems), 0) def tearDown(self): if self.dlg: if hasattr(self.dlg, "dlgDispose"): testutil.do_dispose(self.dlg) self.dlg = None