/**************************************************************
 * 
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 * 
 *************************************************************/


#ifndef __com_sun_star_awt_tree_TreeControl_idl__ 
#define __com_sun_star_awt_tree_TreeControl_idl__ 
 
#ifndef __com_sun_star_awt_tree_XTreeControl_idl__
#include <com/sun/star/awt/tree/XTreeControl.idl>
#endif

//============================================================================= 
 
module com {  module sun {  module star {  module awt { module tree {

//============================================================================= 
 
/** A control that displays a set of hierarchical data as an outline.

	<p>
	<h4>The Data Model</h4>
	<p>A specific node in a tree is identified by a <type>XTreeNode</type>.
	A leaf node is a node without any children and that returns <FALSE/> when calling <member>XTreeNode::hasChildrenOnDemand()</member>.
	An expanded node is a non-leaf node that will displays its children when all its ancestors are expanded.
	A collapsed node is one which hides them.
	A node is visible when all parent nodes are expanded and the node itself is in the display area.
	</p>

	<p>The nodes are retrieved from a <type>XTreeDataModel</type>.
	You can implement it yourself or use the <type>MutableTreeDataModel</type>
	which uses <type>XMutableTreeNode</type> and <type>XMutableTreeDataModel</type>
	for a simple and mutable data model.
	
	<p>The data model must be set at the <member>TreeControlModel::TreeDataModel</member> property.</p>

	<h4>Selection</h4>
	<p>If you are interested in knowing when the selection changes implement a
	<type scope="com::sun::star::view">XSelectionChangeListener</type> and add the instance with the method
	<member scope="::com::sun::star::view">XSelectionSupplier::addSelectionChangeListener()</member>.
	You than will be notified for any selection change.
	</p>

	<p>
	If you are interested in detecting either double-click events or when a user clicks on a node,
	regardless of whether or not it was selected, you can get the <type scope="com::sun::star::awt">XWindow</type>
	and add yourself as a <type scope="com::sun::star::awt">XMouseClickHandler</type>. You can use the
	method <member>XTreeControl::getNodeForLocation()</member> to retrieve the node that was under the
	mouse at the time the event was fired.
	</p>

	<h4>Adding child nodes on demand</h4>
	<p>If you want to add child nodes to your tree on demand you can do the following.
	<ul>
	<li>Make sure the parent node returns <TRUE/> for <member>XTreeNode::hasChildrenOnDemand()</member> either
	by implementing <type>XTreeNode</type> yourself or if you use the <type>MutableTreeDataModel</type>,
	use <member>XMutableTreeNode::setHasChildrenOnDemand()</member>.</li>
	<li>Implement a <type>XTreeExpansionListener</type> and add the instance with the method
	<member>XTreeControl::addTreeExpansionListener()</member>.</li>
	</ul>
	Now you get called when the node will become expanded or collapsed.
	So on <member>XTreeExpansionListener::treeExpanding()</member> you can
	check the <type>TreeExpansionEvent</type> if the parent node with children on demand is going to
	be expanded and in that case add the missing child nodes. You can also veto the expansion or
	collapsing of a parent node by using the <type>ExpandVetoException</type>.
	</p>
 */
service TreeControl: XTreeControl
{ 
}; 
 
//============================================================================= 

}; }; }; }; };
 
#endif 
