/**************************************************************
 * 
 * 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_XMutableTreeDataModel_idl__
#define __com_sun_star_awt_tree_XMutableTreeDataModel_idl__

#ifndef __com_sun_star_awt_tree_XTreeDataModel_idl__
#include <com/sun/star/awt/tree/XTreeDataModel.idl>
#endif

#ifndef __com_sun_star_awt_tree_XMutableTreeNode_idl__
#include <com/sun/star/awt/tree/XMutableTreeNode.idl>
#endif

//=============================================================================

module com {  module sun {  module star {  module awt {  module tree {

//=============================================================================

/** This is the editable version of the <type>XTreeDataModel</type>.

    <p>Note that only <type>XTreeNode</type> created from the same instance with <member>createNode</member>
    are valids nodes for this instance.</p>
 */
published interface XMutableTreeDataModel : XTreeDataModel
{
    /** creates a new tree node with the given value and given settings.

        @param DisplayValue
            should be convertable to a string and is used by the <type>XTreeControl</type>
            as a textual represenation of the created node.

        @param ChildrenOnDemand
            if <TRUE/> is used as a parameter, the created node will be treated as a non-leaf
            node by the <type>XTreeControl</type>, even when it has no child nodes.

        @returns
            a new <type>XMutableTreeNode</type> that can be used for this model.

        @see XTreeNode::getDisplayValue()
        @see XTreeNode::hasChildrenOnDemand()
    */
    XMutableTreeNode createNode( [in] any DisplayValue, [in] boolean ChildrenOnDemand );

    /** changes the root node of this model to <var>RootNode</var>.

        @param RootNode
            the <type>XMutableTreeNode</type> that becomes the new root node of this model.

        @throws ::com::sun::star::lang::IllegalArgumentException
            if <var>RootNode</var> is not a valid node of this <type>XTreeDataModel</type>.
    */
    void setRoot( [in] XMutableTreeNode RootNode )
        raises( ::com::sun::star::lang::IllegalArgumentException );
};

//=============================================================================

}; }; }; }; };

#endif
