von preklov » So, 21.02.2016 14:58
Gegeben sind mehrere Dialoge, die in der Basic-IDE gebaut wurden und deren Definitionen im Dokument unter "Dialogs.Standard. ..." liegen.
Im Code habe ich für jeden Dialog eine eigene Klasse definiert und zusätzlich eine Superklasse zur Erzeugung eines Dialogs.
Die Superklasse:
Code: Alles auswählen
class Dialog:
"""
Superklasse für Dialoge, die im Dokument definiert sind.
"""
def __init__(self, actDoc, dlgName):
dialogProvider = uno.getComponentContext().ServiceManager\
.createInstanceWithArguments('com.sun.star.awt.DialogProvider',
(actDoc,))
self.dlgName = dlgName
dlgLocation = 'vnd.sun.star.script:Standard.' + self.dlgName\
+ '?location=document'
self.dialog = dialogProvider.createDialog(dlgLocation)
self.Model = self.dialog.Model
def getControl(self, ctrlName):
return self.dialog.getControl(ctrlName)
def execute(self):
return self.dialog.execute()
def endExecute(self):
return self.dialog.endExecute()
def __str__(self):
return self.dlgName
Eine spezifische Dialogklasse sieht dann so aus:
Code: Alles auswählen
class InvoiceNrDialog(Dialog):
"""
Unterklasse für den Dialog zur Änderung der Belegnummern.
"""
def __init__(self, dlgName, recList):
# doc ist global definiert
Dialog.__init__(self, doc, dlgName)
self.sheet = doc.CurrentController.ActiveSheet
# Die Liste der Belege in der Belegtabelle
self.recList = recList
# usw
Der Dialog wird so erzeugt und aufgerufen:
Code: Alles auswählen
recList = [Belegliste]
invoiceNrDlg = InvoiceNrDialog('InvoiceNrDialog', recList)
invoiceNrDlg.execute()
Ist das eine akzeptable Lösung?
Schöne Grüße
Volker
Gegeben sind mehrere Dialoge, die in der Basic-IDE gebaut wurden und deren Definitionen im Dokument unter "Dialogs.Standard. ..." liegen.
Im Code habe ich für jeden Dialog eine eigene Klasse definiert und zusätzlich eine Superklasse zur Erzeugung eines Dialogs.
Die Superklasse:
[code]class Dialog:
"""
Superklasse für Dialoge, die im Dokument definiert sind.
"""
def __init__(self, actDoc, dlgName):
dialogProvider = uno.getComponentContext().ServiceManager\
.createInstanceWithArguments('com.sun.star.awt.DialogProvider',
(actDoc,))
self.dlgName = dlgName
dlgLocation = 'vnd.sun.star.script:Standard.' + self.dlgName\
+ '?location=document'
self.dialog = dialogProvider.createDialog(dlgLocation)
self.Model = self.dialog.Model
def getControl(self, ctrlName):
return self.dialog.getControl(ctrlName)
def execute(self):
return self.dialog.execute()
def endExecute(self):
return self.dialog.endExecute()
def __str__(self):
return self.dlgName[/code]
Eine spezifische Dialogklasse sieht dann so aus:
[code]class InvoiceNrDialog(Dialog):
"""
Unterklasse für den Dialog zur Änderung der Belegnummern.
"""
def __init__(self, dlgName, recList):
# doc ist global definiert
Dialog.__init__(self, doc, dlgName)
self.sheet = doc.CurrentController.ActiveSheet
# Die Liste der Belege in der Belegtabelle
self.recList = recList
# usw
[/code]
Der Dialog wird so erzeugt und aufgerufen:
[code]recList = [Belegliste]
invoiceNrDlg = InvoiceNrDialog('InvoiceNrDialog', recList)
invoiceNrDlg.execute()
[/code]
Ist das eine akzeptable Lösung?
Schöne Grüße
Volker