0

我正在为 LibreOffifce 编写扩展程序。我的侧边栏上需要一棵带有列的树。(示例 - https://doc.qt.io/qt-5/qtwidgets-itemviews-simpletreemodel-example.html

我找到了有关树控制和模块“树”的信息,例如这里 https://wiki.openoffice.org/wiki/Treecontrol https://www.openoffice.org/api/docs/common/ref/com/sun/star /awt/tree/module-ix.html

但我找不到任何关于用 columns 编写树的信息。

有一句名言“您可以提供自己的模型,该模型必须至少支持接口 com.sun.star.awt.XTreeModel。” 在“树控件”一文中,但我也找不到任何关于提供我自己的模型的信息......

如果可以为 LibreOffice 扩展提供带有列的树,请帮我查找信息和示例。

4

1 回答 1

0

这是一些 Python-UNO 代码(在您的问题中标记),显示了如何实现XTreeDataModelUNO 接口。您必须编写更多代码才能在多列中呈现节点并执行您想要的所有其他操作。可能需要创建另一个实现XTreeNode.

import uno
import unohelper
from com.sun.star.awt.tree import XTreeDataModel

def myTree():
    document = XSCRIPTCONTEXT.getDocument()
    ctx = XSCRIPTCONTEXT.getComponentContext()
    smgr = ctx.getServiceManager()
    dlgprov = smgr.createInstanceWithArgumentsAndContext(
        "com.sun.star.awt.DialogProvider", (document,), ctx)
    dlg = dlgprov.createDialog(
        "vnd.sun.star.script:Standard.Dialog1?location=application")

    treeCtrl = dlg.getControl("TreeControl1")
    treeModel = treeCtrl.getModel()
    mutableTreeDataModel = smgr.createInstanceWithContext(
        "com.sun.star.awt.tree.MutableTreeDataModel", ctx)
    rootNode = mutableTreeDataModel.createNode("Root", True)  
    mutableTreeDataModel.setRoot(rootNode)
    myTree = MyTreeDataModel(rootNode)
    model = mutableTreeDataModel

    childNode1 = model.createNode("Parent 1", True)
    rootNode.appendChild(childNode1)   
    subChildNode = model.createNode("Child 1", True)
    childNode1.appendChild(subChildNode)

    treeModel.setPropertyValue("DataModel", myTree)
    dlg.execute()
    dlg.dispose()

class MyTreeDataModel(unohelper.Base, XTreeDataModel):
    def __init__(self, root):
        self.rootNode = root
  
    def getRoot(self):
        return self.rootNode

    def addTreeDataModelListener(self, listener):
        pass

    def removeTreeDataModelListener(self, listener):
        pass

有关使用树的更多信息,请访问https://wiki.openoffice.org/wiki/Going_further_with_Dialog_and_Component#The_New_Tree_Control

如果事实证明没有方便的方法可以直接使用 UNO 执行此操作,我曾经使用 Java 中的 JTreeTable 执行此操作。LibreOffice 扩展可以用 Java 编写,所以也许这可以解决您的需求。

于 2021-12-24T18:50:51.147 回答