
Application
===========

Remember,  always import library.

.. code-block:: python

    import easymacro as app


Create instances
----------------

* Instances without context

.. code-block:: python

    toolkit = app.create_instance('com.sun.star.awt.Toolkit')

* Instances with context

.. code-block:: python

    service = 'com.sun.star.awt.DialogProvider2'
    dialog = app.create_instance(service, True)


* Get desktop

.. code-block:: python

    desktop = app.create_instance('com.sun.star.frame.Desktop', True)

Or

.. code-block:: python

    desktop = app.lo.desktop


Fonst
-----

* Get all fonts

.. code-block:: python

    fonts = app.lo.fonts()
    for f in fonts:
        print(f'Name: {f.Name} - StyleName: {f.StyleName}')


Filters
-------

* Get all `support filters`_

.. code-block:: python

    filters = app.lo.filters()
    ds = []
    for f in filters:
        data = f"UI Name: {f['UIName']} - Name: {f['Name']} - Type: {f['Type']}"
        app.debug(data)


Call dispatch
-------------

You can call any `dispatch command`_ used only if property or method no exists in original object or in `easymacro.py`

.. code-block:: python

    doc = app.docs.active
    command = 'Gallery'
    app.lo.dispatch(doc, command)

Method automatically add `.uno:`


ClipBoard
---------

* Set text in clipboard

.. code-block:: python

    app.clipboard.set('My Text')


* Get content of clipboard

.. code-block:: python

    content = app.clipboard.content
    app.debug(content)


Disable or enabled commands
---------------------------

You can disable any command.

.. code-block:: python

    cmd = 'OpenFromCalc'
    result = app.command.disable(cmd)
    app.debug(result)

And enabled.

.. code-block:: python

    result = app.command.enabled(cmd)
    app.debug(result)

`OpenFromCalc` is options for open documents in calc, disable or enabled menu entry and icon toolbar.


LibreOffice configuration
-------------------------

Get value
^^^^^^^^^

Some values are read only.

.. code-block:: python

    node_name = '/org.openoffice.Office.Common/Help'
    key = 'System'
    value = app.get_app_config(node_name, key)
    app.debug(value)

    node_name = '/org.openoffice.Office.Common/Misc/'
    key = 'FirstRun'
    value = app.get_app_config(node_name, key)
    app.debug(value)

    key = 'UseSystemFileDialog'
    value = app.get_app_config(node_name, key)
    app.debug(value)


Set value
^^^^^^^^^

.. code-block:: python

    node_name = '/org.openoffice.Office.UI/ColorScheme'
    key = 'CurrentColorScheme'
    new_value = 'LibreOffice Dark'
    result = app.set_app_config(node_name, key, new_value)
    app.debug(result)

.. warning::

   Caution with modify registry, not all nodes we can change.

Some nodes and keys:

* `/org.openoffice.Office.Common/Save/Document`
    * AutoSave
    * AutoSaveTimeIntervall


Shortcuts
---------

Global
^^^^^^

Iter in all shortcuts. Shortcuts for all applications.

.. code-block:: python

    for shortcut, command in app.shortcuts:
        app.debug(shortcut, command)


If you want all info.

.. code-block:: python

    sc = app.shortcuts
    data = sc.get_all()
    app.debug(data)


Verify if exists shortcut.

.. code-block:: python

    sc = app.shortcuts
    shortcut = 'Shift+Ctrl+Alt+T'
    app.debug(shortcut in sc)


Add new shortcut for execute uno command.

.. code-block:: python

    sc = app.shortcuts
    shortcut = 'Shift+Ctrl+Alt+T'
    command = 'MacroDialog'
    sc.set(shortcut, command)


Add new shortcut for execute macro.

.. code-block:: python

    sc = app.shortcuts
    shortcut = 'Shift+Ctrl+Alt+M'
    macro = {'library': 'test', 'name': 'main'}
    sc.set(shortcut, macro)


Get `command` by `shortcut`.

.. code-block:: python

    sc = app.shortcuts
    shortcut = 'Shift+Ctrl+Alt+M'
    command = sc.get_by_shortcut(shortcut)
    app.debug(command)


Get `shortcut` by `command`. Could be more than one.

.. code-block:: python

    sc = app.shortcuts
    command = 'MacroDialog'
    shortcuts = sc.get_by_command(command)
    app.debug(shortcuts)


Remove by shortcut.

.. code-block:: python

    sc = app.shortcuts
    shortcut = 'Shift+Ctrl+Alt+M'
    sc.remove_by_shortcut(shortcut)


Remove by command.

.. code-block:: python

    sc = app.shortcuts
    macro = {'library': 'test', 'name': 'main'}
    sc.remove_by_command(macro)


Reset all editions.

.. code-block:: python

    app.shortcuts.reset()


For applications
^^^^^^^^^^^^^^^^

Get shortcuts for application. For Calc.

.. code-block:: python

    sc = app.shortcuts['calc']

All methods some the same.

For other applications: `writer`, `draw`, `impress`, `math`


Menus
-----

Add new
^^^^^^^

Insert new menu in Calc.

.. code-block:: python

    menu_name = 'zaz.my.menu'
    menu = {
        'Label': 'My menu',
        'CommandURL': menu_name,
        'Submenu': [
            {
                'Label': 'Open Macros Dialog...',
                'CommandURL': 'MacroDialog',
            },
            {
                'Label': '-',
            },
            {
                'Label': 'My macro',
                'CommandURL': {'library': 'test', 'name': 'hello'},
            },
            {
                'Label': 'Execute macro...',
                'CommandURL': 'RunMacro',
                'ShortCut': 'Shift+Ctrl+Alt+E',
            },
        ]
    }

    menu_bar = app.menus['calc']
    menu_bar.insert(menu)


Remove
^^^^^^

.. code-block:: python

    menu_name = 'zaz.my.menu'
    menu_bar = app.menus['calc']
    menu_bar.remove(menu_name)


Insert in exists menu
^^^^^^^^^^^^^^^^^^^^^

Insert if not exists in menu Tools, after submenu Macros.

.. code-block:: python

    menu = app.menus['calc']['tools']

    menu_name = 'zaz.my.menu'
    menu_new = {
        'Label': 'My menu',
        'CommandURL': menu_name,
        'Submenu': [
            {
                'Label': 'Open Macros Dialog...',
                'CommandURL': 'MacroDialog',
            },
            {
                'Label': '-',
            },
            {
                'Label': 'My macro',
                'CommandURL': {'library': 'test', 'name': 'hello'},
            },
            {
                'Label': 'Execute macro...',
                'CommandURL': 'RunMacro',
                'ShortCut': 'Shift+Ctrl+Alt+E',
            },
        ]
    }

    if menu_name in menu:
        menu.remove(menu_name)
    else:
        menu.insert(menu_new, '.uno:MacrosMenu')



.. _dispatch command: https://wiki.documentfoundation.org/Development/DispatchCommands
.. _support filters: https://help.libreoffice.org/latest/en-US/text/shared/guide/convertfilters.html
