ルートなしツリー 
ルートを非表示にすることでルートなし、複数のルートを持ったようなツリーが表示できます。

ルートノードを作成してそこへトップレベルに表示したいノードを追加した後に、ツリーモデルの RootDisplayed プロパティを False に設定します。
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| | 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 要素を持つノードです。
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| | 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 に設定するとまた非表示になり表示が元に戻ります。下記はボタンを押すとトップノードを追加する例です。
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| | 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)
|