diff --git a/source/easymacro.py b/source/easymacro.py index 062ba03..26e3c81 100644 --- a/source/easymacro.py +++ b/source/easymacro.py @@ -225,6 +225,11 @@ class CellDeleteMode(): CDM = CellDeleteMode +class FormButtonType(): + from com.sun.star.form.FormButtonType import PUSH, SUBMIT, RESET, URL +FBT = FormButtonType + + OS = platform.system() IS_WIN = OS == 'Windows' IS_MAC = OS == 'Darwin' @@ -1750,7 +1755,8 @@ class LOSheetTables(object): return -class LOFormControl(LOBaseObject): +# ~ class LOFormControl(LOBaseObject): +class LOFormControl(): EVENTS = { 'action': 'actionPerformed', 'click': 'mousePressed', @@ -1761,21 +1767,25 @@ class LOFormControl(LOBaseObject): } def __init__(self, obj, view, form): - super().__init__(obj) + self._obj = obj self._view = view self._form = form self._m = view.Model self._index = -1 - def __setattr__(self, name, value): - if name in ('_form', '_view', '_m', '_index'): - self.__dict__[name] = value - else: - super().__setattr__(name, value) + # ~ def __setattr__(self, name, value): + # ~ if name in ('_form', '_view', '_m', '_index'): + # ~ self.__dict__[name] = value + # ~ else: + # ~ super().__setattr__(name, value) def __str__(self): return f'{self.name} ({self.type}) {[self.index]}' + @property + def obj(self): + return self._obj + @property def form(self): return self._form @@ -1812,6 +1822,30 @@ class LOFormControl(LOBaseObject): def enabled(self, value): self._m.Enabled = value + @property + def anchor(self): + return self.obj.Anchor + @anchor.setter + def anchor(self, value): + size = None + if hasattr(value, 'obj'): + size = getattr(value, 'size', None) + value = value.obj + self.obj.Anchor = value + if not size is None: + self.size = size + try: + self.obj.ResizeWithCell = True + except: + pass + + @property + def size(self): + return self.obj.Size + @size.setter + def size(self, value): + self.obj.Size = value + @property def events(self): return self.form.getScriptEvents(self.index) @@ -1891,6 +1925,14 @@ class LOFormControlButton(LOFormControl): def value(self, value): self._m.Text = Label + @property + def url(self): + return self._m.TargetURL + @url.setter + def url(self, value): + self._m.TargetURL = value + self._m.ButtonType = FormButtonType.URL + FORM_CONTROL_CLASS = { 'label': LOFormControlLabel, @@ -1941,7 +1983,7 @@ class LOForm(object): name = control.Name tipo = types[control.ImplementationName] view = self.doc.CurrentController.getControl(control) - control = FORM_CONTROL_CLASS[tipo](control, view) + control = FORM_CONTROL_CLASS[tipo](control, view, self._obj) control.index = i setattr(self, name, control) self._controls[name] = control @@ -1994,8 +2036,8 @@ class LOForm(object): def add(self, args): name = args['Name'] tipo = args.pop('Type').lower() - w = args.pop('Width') - h = args.pop('Height') + w = args.pop('Width', 1000) + h = args.pop('Height', 200) x = args.pop('X', 0) y = args.pop('Y', 0) control = self.doc.createInstance('com.sun.star.drawing.ControlShape') @@ -2053,7 +2095,9 @@ class LOSheetForms(object): def names(self): return self.obj.ElementNames - def insert(self, name): + def insert(self, name=''): + if not name: + name = f'form{self.count + 1}' form = self.doc.createInstance('com.sun.star.form.component.Form') self.obj.insertByName(name, form) return LOForm(form, self._dp)