* ルートなしツリー [#h599153b] ルートを非表示にすることでルートなし、複数のルートを持ったようなツリーが表示できます。 &ref(multiroottree.png,nolink); ルートノードを作成してそこへトップレベルに表示したいノードを追加した後に、ツリーモデルの RootDisplayed プロパティを False に設定します。 #code(python){{ tree = smgr.createInstanceWithContext( 'com.sun.star.awt.tree.TreeControl', ctx) tree_model = smgr.createInstanceWithContext( 'com.sun.star.awt.tree.TreeControlModel', ctx) data_model = smgr.createInstanceWithContext( 'com.sun.star.awt.tree.MutableTreeDataModel', ctx) tree_model.DataModel = data_model tree_model.RootDisplayed = False data_model.setRoot(node) # nodes n1 = data_model.createNode("Top 1", True) n2 = data_model.createNode("Top 2", True) s12 = data_model.createNode("Child 4", True) node.appendChild(n1) node.appendChild(n2) node.appendChild(s12) s1 = data_model.createNode("Child 1", True) s2 = data_model.createNode("Child 2", True) s11 = data_model.createNode("Child 3", True) n1.appendChild(s1) n2.appendChild(s2) }} s12 は child がないが表示される。 下記はちょっと表示が変。 トップレベルに表示されるのは parent ノードを持たずに child 要素を持つノードです。 #code(python){{ tree = smgr.createInstanceWithContext( 'com.sun.star.awt.tree.TreeControl', ctx) tree_model = smgr.createInstanceWithContext( 'com.sun.star.awt.tree.TreeControlModel', ctx) data_model = smgr.createInstanceWithContext( 'com.sun.star.awt.tree.MutableTreeDataModel', ctx) tree_model.DataModel = data_model tree_model.RootDisplayed = False # nodes n1 = data_model.createNode("Top 1", True) n2 = data_model.createNode("Top 2", True) s1 = data_model.createNode("Child 1", True) s2 = data_model.createNode("Child 2", True) s11 = data_model.createNode("Child 3", True) n1.appendChild(s1) n2.appendChild(s2) }} ここで s11 は parent を持たないが child も持たないので表示されない。おかしい。 ルートを非表示にしたツリーに動的にトップノードを追加するとルートが表示される状態になってしまいます。追加した後で RootDisplayed を True に設定、その後に False に設定するとまた非表示になり表示が元に戻ります。下記はボタンを押すとトップノードを追加する例です。 #code(python){{ from com.sun.star.awt import XActionListener class ActionListener(unohelper.Base, XActionListener): def __init__(self): pass def actionPerformed(self, ev): try: tree = ev.Source.getContext().getControl('tree') tree_model = tree.getModel() data_model = tree_model.DataModel node = data_model.createNode('Dynamic Top Node', False) root = data_model.getRoot() root.appendChild(node) tree_model.RootDisplayed = True tree_model.RootDisplayed = False except Exception as e: print(e) }} |