<!--
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 1.0//EN
-->

<!--
    Top component reference consists of several property sets for various
    user-interface types and optional module information. Attributes:
 1) "version" is optional 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.
 2) "id" is unique identificator of top component to which we are referring to,
    required
-->
<!ELEMENT tc-ref        (module?, ui-type+) >
<!ATTLIST tc-ref
    version CDATA #IMPLIED
    id 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 unistalled.
    If you want your module's top component reference to be unistalled
    automatically when your module is deinstalled, 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
>

<!--
    ui-type element, describes properties for specific type of user interface
    1) type - id of user interface type; required. Value "any" is special value
        which is reserved for default setting set which is used when property
        set for specific ui-type is not found. Thus, simplest variant is to
        define only one property set with type "any", which means that for all
        types of user interface we have same properties.
    2) state - opened or closed flag; if value is opened, component is showing
       in mode, if closed, component is hidden; default value is closed
    3) constraint - represents position of top component in frame, optional,
       if missing, "center" value is used as default
    5) selected - flag saying if component is selected in context of container
        (usually tabbed pane)
-->
<!ELEMENT ui-type       EMPTY >
<!ATTLIST ui-type
    type (sdi | mdi | any) #REQUIRED
    state (opened | closed) #IMPLIED
    constraint (center | left | right | top | bottom) #IMPLIED
    selected (true | false) #IMPLIED
>
