Start documentation for cells and range

This commit is contained in:
El Mau 2022-03-15 23:47:08 -06:00
parent e41ac71b2f
commit 1a35cdfd8a
3 changed files with 170 additions and 2 deletions

View File

@ -14,5 +14,5 @@ Remember, always import library.
calc_doc.rst
calc_sheets.rst
calc_ranges.rst
calc_ranges2.rst
calc_cells.rst
calc_data.rst

View File

@ -0,0 +1,12 @@
Cells and Range
---------------
By selection
^^^^^^^^^^^^
.. code-block:: python
doc = app.active
selection = doc.selection
app.debug(selection)

View File

@ -61,6 +61,7 @@ from email import encoders
import uno
import unohelper
from com.sun.star.awt import Rectangle, Size, Point
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
@ -475,6 +476,17 @@ def render(template, data):
return s.safe_substitute(**data)
def _set_properties(model, properties):
# ~ if 'X' in properties:
# ~ properties['PositionX'] = properties.pop('X')
# ~ if 'Y' in properties:
# ~ properties['PositionY'] = properties.pop('Y')
keys = tuple(properties.keys())
values = tuple(properties.values())
model.setPropertyValues(keys, values)
return
# Classes
class LOInspect():
@ -2204,6 +2216,147 @@ class EventsRangeSelectionListener(EventsListenerBase, XRangeSelectionListener):
return
class LOShapes(object):
_type = 'ShapeCollection'
def __init__(self, obj):
self._obj = obj
def __len__(self):
return self.obj.Count
def __enter__(self):
return self
def __exit__(self, exc_type, exc_value, traceback):
pass
def __iter__(self):
self._index = 0
return self
def __next__(self):
try:
s = self.obj[self._index]
shape = LOShape(s)
except IndexError:
raise StopIteration
self._index += 1
return shape
def __str__(self):
return 'Shapes'
@property
def obj(self):
return self._obj
class LOShape(object):
IMAGE = 'com.sun.star.drawing.GraphicObjectShape'
def __init__(self, obj):
self._obj = obj
def __str__(self):
return f'Shape: {self.name}'
@property
def obj(self):
return self._obj
@property
def properties(self):
data = self.obj.PropertySetInfo.Properties
keys = [p.Name for p in data]
values = self.obj.getPropertyValues(keys)
data = dict(zip(keys, values))
return data
@properties.setter
def properties(self, values):
_set_properties(self.obj, values)
@property
def shape_type(self):
return self.obj.ShapeType
@property
def name(self):
return self.obj.Name
@name.setter
def name(self, value):
self.obj.Name = value
@property
def is_image(self):
return self.shape_type == self.IMAGE
@property
def is_shape(self):
return self.shape_type != self.IMAGE
@property
def size(self):
s = self.obj.Size
return s
@size.setter
def size(self, value):
self.obj.Size = value
@property
def width(self):
s = self.obj.Size
return s.Width
@width.setter
def width(self, value):
s = self.size
s.Width = value
self.size = s
@property
def height(self):
s = self.obj.Size
return s.Height
@height.setter
def height(self, value):
s = self.size
s.Height = value
self.size = s
@property
def position(self):
return self.obj.Position
@property
def x(self):
return self.position.X
@property
def y(self):
return self.position.Y
@property
def string(self):
return self.obj.String
@string.setter
def string(self, value):
self.obj.String = value
@property
def title(self):
return self.obj.Title
@title.setter
def title(self, value):
self.obj.Title = value
@property
def description(self):
return self.obj.Description
@description.setter
def description(self, value):
self.obj.Description = value
class LOShortCuts(object):
"""Classe for manager shortcuts"""
KEYS = {getattr(Key, k): k for k in dir(Key)}
@ -3233,7 +3386,10 @@ class LODocCalc(LODocument):
elif type_obj == self.RANGES:
sel = LOCalcRanges(sel)
elif type_obj == self.SHAPE:
print(len(sel))
if len(sel) == 1:
sel = LOShape(sel[0])
else:
sel = LOShapes(sel)
else:
debug(type_obj)
return sel