diff --git a/docs/source/calc.rst b/docs/source/calc.rst index d59684a..e8db469 100644 --- a/docs/source/calc.rst +++ b/docs/source/calc.rst @@ -1,21 +1,18 @@ - Calc ==== -Remember, always import library. +Remember, always import library. .. code-block:: python import easymacro as app -Active document ---------------- +.. toctree:: + :maxdepth: 2 -.. code-block:: python - - doc = app.active - app.debug(doc.type) - - -.. _support filters: https://help.libreoffice.org/latest/en-US/text/shared/guide/convertfilters.html + calc_doc.rst + calc_sheets.rst + calc_ranges.rst + calc_ranges2.rst + calc_data.rst diff --git a/docs/source/calc_doc.rst b/docs/source/calc_doc.rst new file mode 100644 index 0000000..d710a46 --- /dev/null +++ b/docs/source/calc_doc.rst @@ -0,0 +1,40 @@ + +Active document +--------------- + +.. code-block:: python + + doc = app.active + app.debug(doc.type) + +| + +Headers +------- + +Hide or show columns and rows headers. + +.. code-block:: python + + doc = app.active + app.msgbox(doc.headers) + doc.headers = not doc.headers + app.msgbox(doc.headers) + doc.headers = not doc.headers + +| + +Tabs +---- + +Hide or show tab sheets. + +.. code-block:: python + + doc = app.active + app.msgbox(doc.tabs) + doc.tabs = not doc.tabs + app.msgbox(doc.tabs) + doc.tabs = not doc.tabs + +| diff --git a/source/easymacro.py b/source/easymacro.py index 56aaaae..25f941a 100644 --- a/source/easymacro.py +++ b/source/easymacro.py @@ -65,6 +65,7 @@ from com.sun.star.awt import Key, KeyEvent, KeyModifier from com.sun.star.awt import MessageBoxButtons as MSG_BUTTONS from com.sun.star.awt.MessageBoxResults import YES from com.sun.star.beans import PropertyValue, NamedValue +from com.sun.star.beans.PropertyConcept import ALL from com.sun.star.datatransfer import XTransferable, DataFlavor from com.sun.star.io import IOException, XOutputStream from com.sun.star.ui.dialogs import TemplateDescription @@ -473,6 +474,71 @@ def render(template, data): # Classes +class LOInspect(): + TYPE_CLASSES = { + 'INTERFACE': '-Interface-', + 'SEQUENCE': '-Sequence-', + 'STRUCT': '-Struct-', + } + introspection = create_instance('com.sun.star.beans.Introspection') + + def __init__(self, obj: Any, to_doc: bool=False): + if hasattr(obj, 'obj'): + obj = obj.obj + self._obj = obj + self._result = self.introspection.inspect(obj) + self._properties = self._get_properties() + if to_doc: + doc = LODocuments.new() + sheet = doc[0] + sheet.name = 'Properties' + sheet['A1'].data = self.properties + + def _get_value(self, p: Any): + type_class = p.Type.typeClass.value + if type_class in self.TYPE_CLASSES: + return self.TYPE_CLASSES[type_class] + + value = '' + try: + value = getattr(self._obj, p.Name) + if type_class == 'ENUM' and value: + value = value.value + elif type_class == 'TYPE': + value = value.typeName + elif value is None: + value = '-void-' + except: + value = '-error-' + + return value + + def _get_attributes(self, a: Any): + PA = {1 : 'Maybe Void', 16 : 'Read Only'} + attr = ', '.join([PA.get(k, '') for k in PA.keys() if a & k]) + return attr + + def _get_property(self, p: Any): + name = p.Name + tipo = p.Type.typeName + value = self._get_value(p) + attr = self._get_attributes(p.Attributes) + return name, tipo, value, attr + + def _get_properties(self): + if self._result is None: + return [] + + properties = self._result.getProperties(ALL) + data = [('Name', 'Type', 'Value', 'Attributes')] + data += [self._get_property(p) for p in properties] + return data + + @property + def properties(self): + return self._properties + + # ~ https://github.com/django/django/blob/main/django/utils/functional.py#L61 class classproperty: @@ -2955,6 +3021,7 @@ class LODocCalc(LODocument): self._sheets = obj.Sheets def __getitem__(self, index): + """Index access""" return LOCalcSheet(self._sheets[index]) def __len__(self): @@ -2965,25 +3032,31 @@ class LODocCalc(LODocument): @property def headers(self): + """Get true if is visible columns/rows headers""" return self._cc.ColumnRowHeaders @headers.setter def headers(self, value): + """Set visible columns/rows headers""" self._cc.ColumnRowHeaders = value @property def tabs(self): + """Get true if is visible tab sheets""" return self._cc.SheetTabs @tabs.setter def tabs(self, value): + """Set visible tab sheets""" self._cc.SheetTabs = value @property def names(self): + """Get all sheet names""" names = self.obj.Sheets.ElementNames return names @property def active(self): + """Get active sheet""" return LOCalcSheet(self._cc.ActiveSheet) @@ -3222,6 +3295,7 @@ class LODocuments(): def __getattr__(name): classes = { + 'inspect': LOInspect, 'dates': Dates, 'json': Json, 'macro': Macro, diff --git a/source/zazplus/easyplus.py b/source/zazplus/easyplus.py new file mode 100644 index 0000000..e5a0d9b --- /dev/null +++ b/source/zazplus/easyplus.py @@ -0,0 +1 @@ +#!/usr/bin/env python3