Top > OOoBasic > Dialog > Example21

* ルートなしツリー [#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)
}}



Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes