# Libreoffice-voikko: Linguistic extension for LibreOffice # Copyright (C) 2015 Harri Pitkänen # # This Source Code Form is subject to the terms of the Mozilla Public License, # v. 2.0. If a copy of the MPL was not distributed with this file, You can # obtain one at http://mozilla.org/MPL/2.0/. # # Alternatively, the contents of this file may be used under the terms of # the GNU General Public License Version 3 or later (the "GPL"), in which # case the provisions of the GPL are applicable instead of those above. import unohelper import logging import uno from com.sun.star.lang import XServiceInfo from com.sun.star.awt import XContainerWindowEventHandler from com.sun.star.beans import UnknownPropertyException from PropertyManager import PropertyManager from VoikkoHandlePool import VoikkoHandlePool from libvoikko import Voikko class SettingsEventHandler(unohelper.Base, XServiceInfo, XContainerWindowEventHandler): def __init__(self, ctx, *args): print("SettingsEventHandler.__init__") self.__dictionaryVariantList = ["standard: standard dictionary"] # From XServiceInfo def getImplementationName(self): return SettingsEventHandler.IMPLEMENTATION_NAME def supportsService(self, serviceName): return serviceName in self.getSupportedServiceNames() def getSupportedServiceNames(self): return SettingsEventHandler.SUPPORTED_SERVICE_NAMES # From XContainerWindowEventHandler def callHandlerMethod(self, xWindow, eventObject, methodName): if methodName != "external_event": return False if eventObject == "ok": self.__saveOptionsFromWindowToRegistry(xWindow) PropertyManager.getInstance().reloadVoikkoSettings() return True if eventObject == "back" or eventObject == "initialize": self.__initOptionsWindowFromRegistry(xWindow) return True return False def getSupportedMethodNames(self): return ("external_event",) def __initOptionsWindowFromRegistry(self, window): logging.debug("initOptionsWindowFromRegistry()"); hyphWordPartsValue = False hyphUnknownWordsValue = True try: hyphWordPartsValue = PropertyManager.getInstance().readFromRegistry("/org.puimula.ooovoikko.Config/hyphenator", "hyphWordParts") hyphUnknownWordsValue = PropertyManager.getInstance().readFromRegistry("/org.puimula.ooovoikko.Config/hyphenator", "hyphUnknownWords") except UnknownPropertyException as e: logging.exception("SettingsEventHandler: UnknownPropertyException", e) return logging.debug("hyphWordParts = " + str(hyphWordPartsValue)) hyphWordParts = window.getControl("hyphWordParts") hyphWordPartsProps = hyphWordParts.getModel() hyphWordPartsProps.setPropertyValue("State", 1 if hyphWordPartsValue else 0) hyphUnknownWords = window.getControl("hyphUnknownWords") hyphUnknownWordsProps = hyphUnknownWords.getModel() hyphUnknownWordsProps.setPropertyValue("State", 1 if hyphUnknownWordsValue else 0) self.__initVariantDropdown(window) def __saveOptionsFromWindowToRegistry(self, window): logging.debug("SettingsEventHandler.__saveOptionsFromWindowToRegistry") hyphWordParts = window.getControl("hyphWordParts") hyphWordPartsProps = hyphWordParts.getModel() hyphWordPartsValue = hyphWordPartsProps.getPropertyValue("State") # 0 = unchecked, 1 = checked hyphUnknownWords = window.getControl("hyphUnknownWords") hyphUnknownWordsProps = hyphUnknownWords.getModel() hyphUnknownWordsValue = hyphUnknownWordsProps.getPropertyValue("State") # 0 = unchecked, 1 = checked rootView = PropertyManager.getRegistryProperties("/org.puimula.ooovoikko.Config/hyphenator") rootView.setHierarchicalPropertyValue("hyphWordParts", hyphWordPartsValue == 1) rootView.setHierarchicalPropertyValue("hyphUnknownWords", hyphUnknownWordsValue == 1) rootView.commitChanges() # dictionary variant variantValue = self.__getSelectedVariant(window) rootView = PropertyManager.getRegistryProperties("/org.puimula.ooovoikko.Config/dictionary") rootView.setHierarchicalPropertyValue("variant", variantValue) rootView.commitChanges() def __initVariantDropdown(self, windowContainer): variantDropdown = windowContainer.getControl("variant") variantProps = variantDropdown.getModel() # populate dropdown list with available variants self.__initAvailableVariants() uno.invoke(variantProps, "setPropertyValue", ("StringItemList", uno.Any("[]string", tuple(self.__dictionaryVariantList)))) # read selected dictionary variant from registry registryVariantValue = "standard" try: registryVariantValue = PropertyManager.getInstance().readFromRegistry("/org.puimula.ooovoikko.Config/dictionary", "variant") except UnknownPropertyException as e: logging.exception(e) return registryVariantValue = registryVariantValue + ": " selectedValues = [0] for i, dVariant in enumerate(self.__dictionaryVariantList): if dVariant.startswith(registryVariantValue): selectedValues[0] = i; break; # set the selected item in the dropdown list uno.invoke(variantProps, "setPropertyValue", ("SelectedItems", uno.Any("[]short", tuple(selectedValues)))) def __initAvailableVariants(self): dicts = Voikko.listDicts(VoikkoHandlePool.getInstance().getDictionaryPath()) self.__dictionaryVariantList = [] for vDict in dicts: dictName = vDict.variant + ": " + vDict.description self.__dictionaryVariantList.append(dictName) def __getSelectedVariant(self, windowContainer): variantDropdown = windowContainer.getControl("variant") variantProps = variantDropdown.getModel() # get all values stringListValue = variantProps.getPropertyValue("StringItemList") # get the selected item index selectedValues = variantProps.getPropertyValue("SelectedItems") # parse the variant id from the string selectedValue = stringListValue[selectedValues[0]] if ":" in selectedValue: return selectedValue[0:selectedValue.find(":")] logging.error("Failed to get the selected variant, returning default") return "standard" SettingsEventHandler.IMPLEMENTATION_NAME = "org.puimula.ooovoikko.SettingsEventHandlerImplementation" SettingsEventHandler.SUPPORTED_SERVICE_NAMES = ("org.puimula.ooovoikko.SettingsEventHandlerService",)