From f052c634ab71b605503a308257e29bf08a50b303 Mon Sep 17 00:00:00 2001 From: Mauricio Baeza Date: Sat, 28 Nov 2020 11:10:34 -0600 Subject: [PATCH] Add text form control --- source/diff.py | 20 -------- source/easymacro2.py | 110 +++++++++++++++++++++++++++++++++++-------- 2 files changed, 91 insertions(+), 39 deletions(-) diff --git a/source/diff.py b/source/diff.py index 7d11482..05be392 100644 --- a/source/diff.py +++ b/source/diff.py @@ -16,28 +16,8 @@ class FormControlBase(object): def __init__(self, obj): self._obj = obj - self._index = -1 self._rules = {} - @property - def obj(self): - return self._obj - - @property - def name(self): - return self.obj.Name - - @property - def form(self): - return self.obj.getParent() - - @property - def index(self): - return self._index - @index.setter - def index(self, value): - self._index = value - @property def events(self): return self.form.getScriptEvents(self.index) diff --git a/source/easymacro2.py b/source/easymacro2.py index cc3b699..58dfdba 100644 --- a/source/easymacro2.py +++ b/source/easymacro2.py @@ -967,7 +967,7 @@ class LOBaseObject(object): def __setattr__(self, name, value): exists = hasattr(self, name) - if not exists and not name in ('_obj', '_index'): + if not exists and not name in ('_obj', '_index', '_view'): setattr(self._obj, name, value) else: super().__setattr__(name, value) @@ -1482,37 +1482,89 @@ class LOSheetCharts(object): class LOFormControl(LOBaseObject): - def __init__(self, obj): - self._obj = obj - self._control = self.doc.CurrentController.getControl(self.obj) + def __init__(self, obj, view): + super().__init__(obj) + self._view = view + self._m = view.Model def __setattr__(self, name, value): - if name == '_control': + if name in ('_view', '_m'): self.__dict__[name] = value else: super().__setattr__(name, value) @property def doc(self): - return self.obj.Parent.Parent.Parent + return self.obj.Parent.Forms.Parent @property def name(self): return self.obj.Name + @name.setter + def name(self, value): + self.obj.Name = value @property - def label(self): - return self.obj.Label + def tag(self): + return self._m.Tag + @tag.setter + def tag(self, value): + self._m.Tag = value def set_focus(self): - self._control.setFocus() + self._view.setFocus() return -class LOForm(object): +class LOFormControlLabel(LOFormControl): - def __init__(self, obj): + def __init__(self, obj, view): + super().__init__(obj, view) + + @property + def type(self): + return 'label' + + @property + def value(self): + return self._m.Label + @value.setter + def value(self, value): + self._m.Label = value + + +class LOFormControlText(LOFormControl): + + def __init__(self, obj, view): + super().__init__(obj, view) + + @property + def type(self): + return 'text' + + @property + def value(self): + return self._m.Text + @value.setter + def value(self, value): + self._m.Text = value + + +FORM_CONTROL_CLASS = { + 'label': LOFormControlLabel, + 'text': LOFormControlText, +} + + +class LOForm(object): + MODELS = { + 'label': 'com.sun.star.form.component.FixedText', + 'text': 'com.sun.star.form.component.TextField', + } + + def __init__(self, obj, draw_page): self._obj = obj + self._dp = draw_page def __getitem__(self, index): return LOFormControl(self.obj[index]) @@ -1564,19 +1616,39 @@ class LOForm(object): def command(self, value): self.obj.Command = value + @property + def doc(self): + return self.obj.Parent.Parent + def add(self, args): - - - return + name = args['Name'] + tipo = args.pop('Type').lower() + w = args.pop('Width') + h = args.pop('Height') + x = args.pop('X', 0) + y = args.pop('Y', 0) + control = self.doc.createInstance('com.sun.star.drawing.ControlShape') + control.setSize(Size(w, h)) + control.setPosition(Point(x, y)) + model = self.doc.createInstance(self.MODELS[tipo]) + _set_properties(model, args) + control.Control = model + self.obj.insertByIndex(len(self), model) + self._dp.add(control) + view = self.doc.CurrentController.getControl(self.obj.getByName(name)) + control = FORM_CONTROL_CLASS[tipo](control, view) + setattr(self, name, control) + return control class LOSheetForms(object): - def __init__(self, obj): - self._obj = obj + def __init__(self, draw_page): + self._dp = draw_page + self._obj = draw_page.Forms def __getitem__(self, index): - return LOForm(self.obj[index]) + return LOForm(self.obj[index], self._dp) def __enter__(self): return self @@ -1609,7 +1681,7 @@ class LOSheetForms(object): def insert(self, name): form = self.doc.createInstance('com.sun.star.form.component.Form') self.obj.insertByName(name, form) - return LOForm(form) + return LOForm(form, self._dp) def remove(self, index): if isinstance(index, int): @@ -1838,7 +1910,7 @@ class LOCalcSheet(object): @property def forms(self): - return LOSheetForms(self.obj.DrawPage.Forms) + return LOSheetForms(self.obj.DrawPage) def activate(self): self.doc.activate(self._obj)