Add text form control

This commit is contained in:
Mauricio Baeza 2020-11-28 11:10:34 -06:00
parent fce0a21551
commit f052c634ab
2 changed files with 91 additions and 39 deletions

View File

@ -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)

View File

@ -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)