It's a complex framework with a lot of subroutines, but this is the present __init__ for my unoForm class
It can create at present 5 types of dialogs/forms. From a classic dialog up to a window/frame set without a dialog model
Code: Select all
class UnoForm(UnoContainer, UnoTopFormListner, UnoBase):
def __init__(self, ubase, name, **kwargs):
UnoBase.__init__(self, ubase)
self.initializing = True
self.resizing = False
self.args = kwargs
self.log_settings = self.get_opt('log_settings', bool, False)
self.log_object_tree = self.get_opt('log_object_tree', bool, False)
self.log_size_tree = self.get_opt('log_size_tree', bool, False)
self.log_listeners = self.get_opt('log_listeners', bool, False)
self.form = self
self.parent = self
self.name = name
self.datavalue = None
self.properties = {'level': 0, 'form_defaults': {}, 'font': {}}
self._init_properties(self, '--form_defaults--', '', 'form_defaults')
self._init_properties(self, '', None, 'form')
self._init_properties(self, '--possize--', self.uc_orientation.HORIZONTAL, 'form')
self._init_properties(self, '--possize--', self.uc_orientation.VERTICAL, 'form')
self.controls = {}
self.data_controls = {}
self.datavalues = {}
self.tab_order = []
self.containers = {self.name: self}
self.datavalues['size_factor'] = Value(self, 'size_factor',
self.uno.uc_datatype.PERCENT,
self.properties['form_defaults']['size_factor'],
self.set_size_factor)
if self.has_objmode('hasmodel'): # Create Model/Component
self.implementation = 'UnoDialogControl'
self.model = self.uno.get_service("awt.UnoControlDialogModel")
self.model.Name = name
self.model.Sizeable = True
self.model.Closeable = True
for k, v in self.get_opt('model', dict, {}).items():
self.set_model_property(k, v)
if self.has_objmode('hasframe'):
self.model.Decoration = False
self.properties['dialogmodel'] = 'UnoControlDialogModel'
self.unocomponent = self.uno.get_service("awt.UnoControlDialog")
self.unocomponent.setModel(self.model)
#~ self.uno.list_capabilities(self.unocomponent)
if self.has_objmode('haswindow'): # Create Window
self.window = self.uno.get_toolkit().createWindow(self.get_descriptor())
self.dialog = self.window
if self.has_objmode('hasframe'): # Create Frame
self.frame = self.uno.get_service("frame.Frame")
self.frame.initialize(self.window)
self.frame.setCreator(self.uno.desktop)
self.frame.setName(name)
self.uno.desktop.getFrames().append(self.frame)
if self.has_objmode('hasmodel'): # Bind the Model
if not self.has_objmode('hasframe'):
self.dialog = self.unocomponent
#~ self.uno.list_capabilities(self.uno.desktop.getCurrentFrame().getContainerWindow())
#~ self.uno.list_capabilities(self.window)
if not self.has_objmode('haswindow'): # to the Desktop
self.unocomponent.createPeer(self.uno.get_toolkit(), None)
elif self.has_objmode('ismodal'):
self.unocomponent.createPeer(self.uno.get_toolkit(), self.window)
else: # to the Window
self.unocomponent.createPeer(self.uno.get_toolkit(), self.window)
self.uno.list_capabilities(self.window)
self.__init_component__(name)
self.listeners = {'top': [], 'window': [], 'focus': [], 'key': [], 'mouse': []}
self.set_visible(False)
self._set_listener_proc()
self.add_listener('all', self)
self.load_datavalues(**self.get_opt('datavalues', (dict, Record), {}))
if self._init_container(True):
self.init_minsize()
self.set_caption()
self.set_font(**self.properties['font'])
self.set_colors()
self.set_properties()
def get_descriptor(self):
descriptor = self.uno.get_struct("awt.WindowDescriptor")
#~ buttondialog, tabdialog, dialog, modaldialog, modelessdialog
#~ framewindow, window, workwindow
if self.has_objmode('ismodal'):
descriptor.Type = self.ue_winclass.MODALTOP
descriptor.WindowServiceName = "modaldialog"
elif self.has_objmode('hasmodel'):
descriptor.Type = self.ue_winclass.TOP
descriptor.WindowServiceName = "modelessdialog"
else:
descriptor.Type = self.ue_winclass.TOP
descriptor.WindowServiceName = "dialog"
descriptor.ParentIndex = -1
#~ descriptor.Parent = 0
descriptor.WindowAttributes = self.properties['winattr']
return descriptor
Maybe I must do something with the Parent in the window descriptor
openoffice 4.1.2/4.1.4 and libreoffice 5.4.4.2/5.4.5.1 both on Gentoo and on Windows