Top > OOoBasic > Dialog > Example21

ルートなしツリー Edit

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

multiroottree.png

ルートノードを作成してそこへトップレベルに表示したいノードを追加した後に、ツリーモデルの 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)

Attach file: filemultiroottree.png 407 download [Information]

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