Top > OOoBasic > Dialog > TreeView

ツリービュー Edit

ツリービューコントロールは 2.3 で追加されたダイアログコントロールです。

startEditingAtNode は動作しません。http://www.openoffice.org/issues/show_bug.cgi?id=78701

コントローラ Edit

コントロールのコントローラオブジェクト

treeview Edit

DefaultCollapsedGraphicURLstring閉じてる状態の画像URL
DefaultExpandedGraphicURLstring開いている状態の画像URL
Selectionany選択範囲
SelectionCountlong選択数
  • boolean isNodeCollapsed ( [in] com.sun.star.awt.tree.XTreeNode Node )
    • Node が閉じている状態かどうか
  • boolean isNodeExpanded ( [in] com.sun.star.awt.tree.XTreeNode Node )
    • Node が開いている状態かどうか
  • boolean isNodeVisible ( [in] com.sun.star.awt.tree.XTreeNode Node )
    • Node が表示されているかどうか
  • void expandNode ( [in] com.sun.star.awt.tree.XTreeNode Node )
    • Node を展開する
  • void collapseNode ( [in] com.sun.star.awt.tree.XTreeNode Node )
    • Node を閉じる
  • com.sun.star.awt.tree.XTreeNode getNodeForLocation ( [in] long x, [in] long y )
    • Node を取得する
  • com.sun.star.awt.tree.XTreeNode getClosestNodeForLocation ( [in] long x, [in] long y )
    • 近くの Node を取得する
  • boolean isEditing ()
    • 編集中かどうか
  • void cancelEditing ()
    • 編集をキャンセルする
  • void startEditingAtNode ( [in] com.sun.star.awt.tree.XTreeNode Node )
    • Node の編集を開始する
  • boolean stopEditing ()
    • 編集を停止する
  • addTreeEditListener ( [in] com.sun.star.awt.tree.XTreeEditListener Listener )
    • ツリー編集リスナーを追加する
  • addTreeExpansionListener ( [in] com.sun.star.awt.tree.XTreeExpansionListener Listener )
    • ツリー展開リスナーを追加する
  • void removeTreeEditListener ( [in] com.sun.star.awt.tree.XTreeEditListener Listener )
    • ツリー編集リスナーを削除する
  • void removeTreeExpansionListener ( [in] com.sun.star.awt.tree.XTreeExpansionListener Listener )
    • ツリー展開リスナーを削除する
  • css.awt.Rectangle getNodeRect( XTreeNode node )
    • 3.3 から。指定ノードの位置とサイズを取得します。

モデル Edit

css.awt.tree.TreeModel

プロパティ説明
DataModel.awt.Tree.XTreeDataModel表示するデータ
SelectionType.view.SelectionType選択形式
ShowHandlesbooleanハンドルの表示
ShowsRootHandlesbooleanルートノードのハンドル表示
RowHeightlong行高さ
InvokesStopNodeEditingboolean
Editableboolean編集可能にするかどうか

データモデル Edit

データ構造を保持するデータとして com.sun.star.awt.tree.MutableTreeDataModel サービスを利用できます。com.sun.star.awt.tree.XTreeDataModel インターフェースを実装したコンポーネントとして独自のものを作成することもできます。

oTreeDataModel = CreateUnoService("com.sun.star.awt.tree.MutableTreeDataModel")

oRootNode = oTreeDataModel.createNode(sDirName, true)
oTreeDataModel.setRoot(oRootNode)
oTreeModel.DataModel = oTreeDataModel

css.awt.tree.XMutableTreeDataModel

  • css.awt.tree.XMutableTreeNode createNode( any DisplayValue, boolean ChildOnDemand)
    • 新規ノードを作成します。
  • void setRoot(css.awt.tree.XMutableTreeNode node)
    • ルートノードを設定します。

css.awt.tree.XTreeDataModel

  • XTreeNode getRoot()
    • ルートノードを取得します。
  • void addTreeDataModelListener( XTreeDataModelListener Listener )
    • データ変化用のリスナーを追加します。
  • void removeTreeDataModelListener( XTreeDataModelListener Listener )
    • データ変化用のリスナーを削除します。

ノード Edit

データモデルとして css.awt.tree.MutableTreeDataModel サービスを利用するならcss.awt.tree.MutableTreeNode サービスが利用されます。独自のデータモデルを作成したのであればノードは css.awt.tree.XTreeNode インターフェースをサポートする必要があります。

  • void appendChild( css.awt.tree.XMutableTreeNode node)
    • 子ノードを追加します。
  • void insertChildByIndex( long index, css.awt.tree.XMutableTreeNode node)
    • 子ノードと特定の位置に挿入します。
  • removeChildByIndex( long index)
    • 指定した子ノードを削除します。
  • void setHasChildOnDemand( boolean ChildOnDemand )
  • void setDisplayValue( any Value )
  • void setNodeGraphicURL( string URL )
  • void setExpandedGraphicURL( string URL )
    • void setCollapsedGraphicURL( string URL )
  • any DataValue
    • attribute。

css.awt.tree.XTreeNode

  • XTreeNode getChildAt( long index )
    • 指定したインデックスの子ノードを取得します。
  • long getChildCount()
    • 子ノード数を取得します。
  • XTreeNode getParent()
    • 親ノードを取得します。親ノードがないときには void が返ります。
  • long getIndex( XTreeNode node )
    • 指定した子ノードのインデックスを調べます。-1 のときには子ノードではありません。
  • boolean hasChildOnDemand()
    • オンデマンドで作成された子ノードがあるかどうかを調べます。
  • any getDisplayValue()
    • 表示用の値を取得します。
  • string getNodeGraphicURL()
    • ノードに表示する画像 URL
    • string getExpandedGraphicURL()
    • ノードが展開された時に表示される画像の URL
  • string getCollapsedGraphicURL()
    • ノードが閉じられている時の画像の URL

ツリービューの作成 Edit

ツリービューはダイアログエディタで作成できます。

oTree = oDialog.getControl("TreeControl1")
oTreeModel = oTree.getModel()

2.4 ではツリーコントロールを含むダイログの読み込み、保存、エクスポートに失敗します。ツリーコントロールを使用するには注意を参照。

ツリーデータ Edit

ツリーのデータモデルを作成して設定します。

oTreeDataModel = CreateUnoService("com.sun.star.awt.tree.MutableTreeDataModel")

oRootNode = oTreeDataModel.createNode(sDirName,true)
oTreeDataModel.setRoot(oRootNode)
oTreeModel.DataModel = oTreeDataModel

ノード Edit

新しいノードはツリーデータモデルから createNode メソッドで作成します。ノード名およびノードを展開可能にするかどうかを指定します。作成したノードは子ノードとして appendChild メソッドで親ノードに追加します。

oChild = oTreeDataModel.createNode(sName,False)
oParent.appendChild(oChild)

ノードで利用できるメソッド名が 2.3 と 2.4 では一部変更されています。注意参照。

アイコン画像 Edit

ノードが閉じているときの画像を setCollapsedGraphicURL メソッドで、ノードが展開されているときの画像を setExpandedGraphicURL メソッドで指定します。共に画像の URL を引数にとります。また、ノードでなくチャイルドのときには閉じているときの画像が表示されます。

 oRootNode.setExpandedGraphicURL(sExpandedURL)
 oRootNode.setCollapsedGraphicURL(sCollapsedURL)

TreeExpansionListener Edit

ツリーのノードを展開するときのリスナーでノードを展開するとき treeExpanding、ノードを閉じるとき treeCollapsing、ノードが展開されたとき treeExpanded、ノードを閉じたとき treeCollapsed および子ノードが要求されたとき requestChildNodes が利用できます。

oTreeListener = CreateUnoListener("TreeListener_", _
    "com.sun.star.awt.tree.XTreeExpansionListener")
oTree.addTreeExpansionListener(oTreeListener)
Sub TreeListener_disposing( oEv )
End Sub
Sub TreeListener_requestChildNodes( oEv )
  ' called before expanding
  msgbox "requested."
End Sub
Sub TreeListener_treeExpanding( oEv )
End Sub
Sub TreeListener_treeCollapsing( oEv )
End Sub
Sub TreeListener_treeExpanded( oEv )
End Sub
Sub TreeListener_treeCollapsed( oEv )
End Sub

Edit

注意 Edit

2.3 と 2.4 で利用できるツリーコントロールを含むダイログを作成するときの注意点です。

2.4 ではツリーコントロールを含むダイアログの保存に失敗します。また、既存のツリーコントロールを含むダイアログの読み込みも失敗します。そのため、ダイアログエディタで作成したツリーコントロールは使えません。i87028

 ' ダイアログを読み込み、作成
 DialogLibraries.LoadLibrary(sBKLIBNAME)
 oBKDialog = CreateUnoDialog( _
   DialogLibraries.getByName(sBKLIBNAME).getByName("Dialog1"))
 
 ' ダイログモデル
 oBKDialogModel = oBKDialog.getModel()

 ' 新しいツリーモデルをインスタンス化
 oBKTreeModel = oBKDialogModel.createInstance( _
   "com.sun.star.awt.tree.TreeControlModel" )
 
 ' ツリーの位置やサイズの設定
 oBKTreeModel.setPropertyValues( _
   Array("Height", "HelpURL","InvokesStopNodeEditing", _
         "PositionX", "PositionY", "SelectionType", "Width" ), _
   Array(228,"mytools.Bookmarks:Tree",True, _
         3,38,com.sun.star.view.SelectionType.SINGLE, 198) )
 
 ' ツリーをダイアログに追加
 oBKDialogModel.insertByName("TreeControl",oBKTreeModel)

' ツリーのコントローラ
 oBKTree = oBKDialog.getControl("TreeControl")

以下の場合にはバージョンで処理を変更するか、プロパティやメソッドを調べて対処する必要があります。

また、ツリーコントロールのモデルオブジェクトの Editable プロパティ名が 2.4 では間違った名前になっているため正しく設定できません。設定が必要なときには次のようにします。i87048

 oPropertySetInfo = oBKTreeModel.getPropertySetInfo()
 If oPropertySetInfo.hasPropertyByName("Editable") Then ' 2.3
   oBKTreeModel.Editable = True
 ElseIf oPropertySetInfo.hasPropertyByName("CustomUnitText") Then ' 2.4
   oBKTreeModel.CustomUnitText = True
 End If

ツリーノード関連 com.sun.star.awt.tree.XTreeNode

2.3 ではツリーノードの hasChildsOnDemand だったメソッド名が 2.4 では hasChildrenOnDemand に変わっています。同様に setHasChildOnDemand メソッドは setHasChildrenOnDemand に変わっています。Introspection などを使って調べます。

 ' ツリーデータモデル
 oTreeDataModel = CreateUnoService( _
     "com.sun.star.awt.tree.MutableTreeDataModel")
 ' ルートノード
 oRootNode = oTreeDataModel.createNode("Root",true)
 oTreeDataModel.setRoot(oRootNode)
 
 oIntrospection = CreateUnoService( _
     "com.sun.star.beans.Introspection")
 oInspected = oIntrospection.inspect(oRootNode)
 
 bHas = oInspected.hasMethod( _
   "hasChildsOnDemand", com.sun.star.beans.MethodConcept.ALL )
 
 'bHas  = oInspected.hasMethod("hasChildrenOnDemand", _
 '  com.sun.star.beans.MethodConcept.ALL )

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