#!/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 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 def select(self, rango: Any): """""" obj = rango if hasattr(rango, 'obj'): obj = rango.obj self._cc.select(obj) return