easymacro/source/easymacro/easywriter.py

358 lines
7.7 KiB
Python

#!/usr/bin/env python3
from typing import Any
from .easymain import log, BaseObject
from .easydoc import LODocument
from .easydrawpage import LODrawPage
from .easystyles import LOStyleFamilies
class LOTableRange(BaseObject):
def __init__(self, table, obj):
self._table = table
super().__init__(obj)
def __str__(self):
return f'TextTable: Range - {self.name}'
@property
def name(self):
if self.is_cell:
n = self.obj.CellName
else:
c1 = self.obj[0,0].CellName
c2 = self.obj[self.rows-1,self.columns-1].CellName
n = f'{c1}:{c2}'
return n
@property
def is_cell(self):
return hasattr(self.obj, 'CellName')
@property
def data(self):
return self.obj.getDataArray()
@data.setter
def data(self, values):
self.obj.setDataArray(values)
@property
def rows(self):
return len(self.data)
@property
def columns(self):
return len(self.data[0])
@property
def string(self):
return self.obj.String
@string.setter
def string(self, value):
self.obj.String = value
@property
def value(self):
return self.obj.Value
@value.setter
def value(self, value):
self.obj.Value = value
class LORow(BaseObject):
def __init__(self, rows, index):
self._rows = rows
self._index = index
super().__init__(rows[index])
def __str__(self):
return 'TextTable: Row'
@property
def height(self):
return self.obj.Height
@height.setter
def height(self, value):
self.obj.Height = value
def remove(self):
self._rows.removeByIndex(self._index, 1)
return
class LORows(BaseObject):
def __init__(self, obj):
super().__init__(obj)
def __str__(self):
return 'TextTable: Rows'
def __len__(self):
return self.obj.Count
def __getitem__(self, key):
return LORow(self.obj, key)
@property
def count(self):
return self.obj.Count
def remove(self, index, count=1):
self.obj.removeByIndex(index, count)
return
class LOTextTable(BaseObject):
def __init__(self, obj):
super().__init__(obj)
def __str__(self):
return f'Writer: TextTable - {self.name}'
def __enter__(self):
return self
def __exit__(self, exc_type, exc_value, traceback):
pass
def __iter__(self):
self._i = 0
return self
def __next__(self):
"""Interation cells"""
try:
name = self.obj.CellNames[self._i]
except IndexError:
raise StopIteration
self._i += 1
return self[name]
def __getitem__(self, key):
if isinstance(key, str):
if ':' in key:
rango = self.obj.getCellRangeByName(key)
else:
rango = self.obj.getCellByName(key)
elif isinstance(key, tuple):
if isinstance(key[0], slice):
rango = self.obj.getCellRangeByPosition(
key[1].start, key[0].start, key[1].stop-1, key[0].stop-1)
else:
rango = self.obj[key]
return LOTableRange(self.obj, rango)
@property
def name(self):
return self.obj.Name
@name.setter
def name(self, value):
self.obj.Name = value
@property
def rows(self):
return LORows(self.obj.Rows)
class LOTextTables(BaseObject):
def __init__(self, obj):
super().__init__(obj)
def __str__(self):
return 'Writer: TextTables'
def __getitem__(self, key):
return LOTextTable(self.obj[key])
class LOWriterTextPortion(BaseObject):
def __init__(self, obj):
super().__init__(obj)
def __str__(self):
return 'Writer: TextPortion'
@property
def string(self):
return self.obj.String
class LOWriterParagraph(BaseObject):
TEXT_PORTION = 'SwXTextPortion'
def __init__(self, obj):
super().__init__(obj)
def __str__(self):
return 'Writer: Paragraph'
def __iter__(self):
self._iter = iter(self.obj)
return self
def __next__(self):
obj = next(self._iter)
type_obj = obj.ImplementationName
if type_obj == self.TEXT_PORTION:
obj = LOWriterTextPortion(obj)
return obj
@property
def string(self):
return self.obj.String
@property
def cursor(self):
return self.obj.Text.createTextCursorByRange(self.obj)
class LOWriterTextRange(BaseObject):
PARAGRAPH = 'SwXParagraph'
def __init__(self, obj):
super().__init__(obj)
def __str__(self):
return 'Writer: TextRange'
def __getitem__(self, index):
for i, v in enumerate(self):
if index == i:
return v
if index > i:
raise IndexError
def __iter__(self):
self._enum = self.obj.createEnumeration()
return self
def __next__(self):
if self._enum.hasMoreElements():
obj = self._enum.nextElement()
type_obj = obj.ImplementationName
if type_obj == self.PARAGRAPH:
obj = LOWriterParagraph(obj)
else:
raise StopIteration
return obj
@property
def string(self):
return self.obj.String
@property
def cursor(self):
return self.obj.Text.createTextCursorByRange(self.obj)
class LOWriterTextRanges(BaseObject):
def __init__(self, obj):
super().__init__(obj)
# ~ self._doc = doc
# ~ self._paragraphs = [LOWriterTextRange(p, doc) for p in obj]
def __str__(self):
return 'Writer: TextRanges'
def __len__(self):
return self.obj.Count
def __getitem__(self, index):
return LOWriterTextRange(self.obj[index])
def __iter__(self):
self._index = 0
return self
def __next__(self):
try:
obj = LOWriterTextRange(self.obj[self._index])
except IndexError:
raise StopIteration
self._index += 1
return obj
class LOWriter(LODocument):
TEXT_RANGES = 'SwXTextRanges'
_type = 'writer'
def __init__(self, obj):
super().__init__(obj)
self._view_settings = self._cc.ViewSettings
@property
def zoom(self):
return self._view_settings.ZoomValue
@zoom.setter
def zoom(self, value):
self._view_settings.ZoomValue = value
@property
def selection(self):
"""Get current seleccion"""
sel = None
selection = self.obj.CurrentSelection
type_obj = selection.ImplementationName
if type_obj == self.TEXT_RANGES:
sel = LOWriterTextRanges(selection)
if len(sel) == 1:
sel = sel[0]
else:
log.debug(type_obj)
log.debug(selection)
sel = selection
return sel
@property
def string(self):
return self._obj.Text.String
@property
def styles(self):
ci = self.obj.createInstance
return LOStyleFamilies(self.obj.StyleFamilies, ci)
@property
def draw_page(self):
"""Get draw page"""
return LODrawPage(self.obj.DrawPage)
@property
def dp(self):
return self.draw_page
@property
def shapes(self):
return self.draw_page
@property
def cursor(self):
return self.obj.Text.createTextCursor()
@property
def view_cursor(self):
return self._cc.ViewCursor
@property
def tables(self):
return LOTextTables(self.obj.TextTables)
def select(self, rango: Any):
""""""
obj = rango
if hasattr(rango, 'obj'):
obj = rango.obj
self._cc.select(obj)
return