Python: Im Dokument eingebettete Dialoge erzeugen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

preklov
***
Beiträge: 76
Registriert: Mo, 29.06.2009 09:04
Wohnort: Ruhrgebiet

Python: Im Dokument eingebettete Dialoge erzeugen

Beitrag von preklov »

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
Schöne Grüße
Volker