diff --git a/source/conf.py.example b/source/conf.py.example index 13b19b8..06eda43 100644 --- a/source/conf.py.example +++ b/source/conf.py.example @@ -1,3 +1,5 @@ +#!/usr/bin/env python3 + # ~ This file is part of ZAZ. # ~ ZAZ is free software: you can redistribute it and/or modify diff --git a/source/easymacro.py b/source/easymacro.py new file mode 100644 index 0000000..ae89e63 --- /dev/null +++ b/source/easymacro.py @@ -0,0 +1,156 @@ +#!/usr/bin/env python3 + +# == Rapid Develop Macros in LibreOffice == + +# ~ This file is part of ZAZ. + +# ~ ZAZ is free software: you can redistribute it and/or modify +# ~ it under the terms of the GNU General Public License as published by +# ~ the Free Software Foundation, either version 3 of the License, or +# ~ (at your option) any later version. + +# ~ ZAZ is distributed in the hope that it will be useful, +# ~ but WITHOUT ANY WARRANTY; without even the implied warranty of +# ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# ~ GNU General Public License for more details. + +# ~ You should have received a copy of the GNU General Public License +# ~ along with ZAZ. If not, see . + + +import getpass +import logging +import platform +import sys +import threading +import time +from functools import wraps + +import uno + +from com.sun.star.beans import PropertyValue +from com.sun.star.awt import MessageBoxButtons as MSG_BUTTONS +from com.sun.star.awt.MessageBoxResults import YES + + +FILE_NAME_DEBUG = 'debug.log' +MSG_LANG = { + 'es': { + 'OK': 'Aceptar', + 'Cancel': 'Cancelar', + } +} + +FORMAT = '%(asctime)s - %(levelname)s - %(message)s' +DATE = '%d/%m/%Y %H:%M:%S' +LEVEL_ERROR = logging.getLevelName(logging.ERROR) +LEVEL_INFO = logging.getLevelName(logging.INFO) +logging.addLevelName(logging.ERROR, f'\033[1;41m{LEVEL_ERROR}\033[1;0m') +logging.addLevelName(logging.INFO, f'\x1b[32m{LEVEL_INFO}\033[1;0m') +logging.basicConfig(level=logging.DEBUG, format=FORMAT, datefmt=DATE) +log = logging.getLogger(__name__) + + +CTX = uno.getComponentContext() +SM = CTX.getServiceManager() + + +def create_instance(name, with_context=False): + if with_context: + instance = SM.createInstanceWithContext(name, CTX) + else: + instance = SM.createInstance(name) + return instance + + +def _get_config(key, node_name): + name = 'com.sun.star.configuration.ConfigurationProvider' + service = 'com.sun.star.configuration.ConfigurationAccess' + cp = create_instance(name, True) + node = PropertyValue(Name='nodepath', Value=node_name) + try: + ca = cp.createInstanceWithArguments(service, (node,)) + if ca and (ca.hasByName(key)): + data = ca.getPropertyValue(key) + return data + except Exception as e: + log.error(e) + return '' + + +OS = sys.platform +USER = getpass.getuser() +PC = platform.node() + +LANGUAGE = _get_config('ooLocale', 'org.openoffice.Setup/L10N/') +NAME = TITLE = _get_config('ooName', 'org.openoffice.Setup/Product') +VERSION = _get_config('ooSetupVersion', 'org.openoffice.Setup/Product') +DESKTOP = create_instance('com.sun.star.frame.Desktop', True) + +INFO_DEBUG = '{}\n\n{}\n\n{}'.format( + sys.version, platform.platform(), '\n'.join(sys.path)) + + +def mri(obj): + m = create_instance('mytools.Mri') + if m is None: + msg = 'Extension MRI not found' + error(msg) + return + + m.inspect(obj) + return + + +def catch_exception(f): + @wraps(f) + def func(*args, **kwargs): + try: + return f(*args, **kwargs) + except Exception as e: + log.error(f.__name__, exc_info=True) + return func + + +def run_in_thread(fn): + def run(*k, **kw): + t = threading.Thread(target=fn, args=k, kwargs=kw) + t.start() + return t + return run + + +def _(msg): + L = LANGUAGE.split('-')[0] + if L == 'en': + return msg + + if not L in MSG_LANG: + return msg + + return MSG_LANG[L][msg] + + +def msgbox(message, title=TITLE, buttons=MSG_BUTTONS.BUTTONS_OK, type_msg='infobox'): + """ Create message box + type_msg: infobox, warningbox, errorbox, querybox, messbox + http://api.libreoffice.org/docs/idl/ref/interfacecom_1_1sun_1_1star_1_1awt_1_1XMessageBoxFactory.html + """ + toolkit = create_instance('com.sun.star.awt.Toolkit') + parent = toolkit.getDesktopWindow() + mb = toolkit.createMessageBox(parent, type_msg, buttons, title, str(message)) + return mb.execute() + + +def question(message, title=TITLE): + res = msgbox(message, title, MSG_BUTTONS.BUTTONS_YES_NO, 'querybox') + return res == YES + + +def warning(message, title=TITLE): + return msgbox(message, title, type_msg='warningbox') + + +def error(message, title=TITLE): + return msgbox(message, title, type_msg='errorbox') + diff --git a/source/zaz.py b/source/zaz.py index 917d7a0..6b9a556 100644 --- a/source/zaz.py +++ b/source/zaz.py @@ -1,3 +1,7 @@ +#!/usr/bin/env python3 + +# == Rapid Develop Macros in LibreOffice == + # ~ This file is part of ZAZ. # ~ ZAZ is free software: you can redistribute it and/or modify