<!--
The contents of this file are subject to the terms of the Common Development
and Distribution License (the License). You may not use this file except in
compliance with the License.

You can obtain a copy of the License at https://netbeans.org/cddl.html
or https://netbeans.org/cddl.txt.

When distributing Covered Code, include this CDDL Header Notice in each file
and include the License file at https://netbeans.org/cddl.txt.
If applicable, add the following below the CDDL Header, with the fields
enclosed by brackets [] replaced by your own identifying information:
"Portions Copyrighted [year] [name of copyright owner]"

The Original Software is NetBeans. The Initial Developer of the Original
Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
Microsystems, Inc. All Rights Reserved.
-->

<!--
-//NetBeans//DTD Top Component in Mode Properties 2.0//EN
-->

<!--
    Top component reference consists of several property sets for various
    user-interface types and optional module information.
    Attributes:
    "version" is versioning attribute which in fact specifies version
    of DTD for the document. Attribute is used to perform simple versioning
    without the need to use time-consuming xml validation using this DTD.
-->
<!ELEMENT tc-ref        (module?, tc-id, state) >
<!ATTLIST tc-ref
    version CDATA #REQUIRED
>

<!-- Optional element for module information. Attribute name specifies name of
    module which defines this xml description. Module information is used for
    automatic removal of top component reference defined by module if module
    is disabled.
    If you want your module's top component reference to be removed
    automatically when your module is disabled, fill this element.
    When this element is missing, no automatic removal will be done.
 1) "name" code name of the module, can be either base code name or full code
    name with slash and release number. Examples for core module are: 
    "org.netbeans.core" or "org.netbeans.core/1"
 2) "spec" is specification version of the module which defines this xml description.
-->
<!ELEMENT module EMPTY >
<!ATTLIST module
    name CDATA #REQUIRED
    spec CDATA #IMPLIED
>

<!--
    Element "tc-id" contains unique identification of TopComponent.
    "id" unique ID of TopComponent. It corresponds to name of TopComponent settings file.
-->
<!ELEMENT tc-id       EMPTY >
<!ATTLIST tc-id
    id CDATA #REQUIRED
>

<!--
    Element "state" describes state of TopComponent in Mode.
    "opened" is "true" when TopComponent is opened, "false" if TopComponent is closed.
-->
<!ELEMENT state       EMPTY >
<!ATTLIST state
    opened (true | false) #REQUIRED
>
