<!--
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 Workspace Properties 1.1//EN
-->

<!-- The root element for workspace properties. Consists of name, optional
    module information and workspace property sets for various types of user
    interface.
    Atribute "version" is optional versioning attribute, which in fact specifies
    version of this DTD. Attribute is used to perform simple versioning
    without the need to use time-consuming xml validation using this DTD.
-->
<!ELEMENT workspace (name, description?, module?, ui-type+) >
<!ATTLIST workspace
    version CDATA #IMPLIED
>

<!-- Element for user interface type, holds property set for workspace for
    specific user interface type. UI type is identified by its only attribute "type",
    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 workspace will have same properties. -->
<!ELEMENT ui-type (cascade?, active?, order?, mode?, toolbar?, desktop?) >
<!ATTLIST ui-type
    type (sdi | mdi | any) #REQUIRED
>

<!-- Optional element for module information. Module information is used for
    automatic removal of workspace defined by module if module is unistalled.
    If you want your module's workspace 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
>

<!-- Element name has four attributes:
    1) "unique" represents UID of the workspace
    2) "display" represents optional display name of the workspace.
       If display name is not specified, unique name is used as display name
       too. If "from-bundle" flag is enabled, this attribute must contain
       bundle key where to find localized display name.
    3) "from-bundle" flag to control if display name is taken from bundle or not
    4) "bundle" identifies bundle from which localized display name will be read.
       Format is the same like for fully qualified classes. For example, 
       localization bundle named "Bundle" in package "my.package" can be pointed
       to by value "my.package.Bundle".
       Attributes "bundle" and "display" together give fully qualified bundle
       pointer. This attribute is optional, has no meaning if "from-bundle" is false
-->
<!ELEMENT name      EMPTY >
<!ATTLIST name
    unique CDATA #REQUIRED
    display CDATA #IMPLIED
    from-bundle (true | false) #IMPLIED
    bundle CDATA #IMPLIED
>

<!-- Optional element description has two attributes
    1) "display" represents bundle key where to find localized 
        workspace description. (example value: "CTL_MyWorkspaceDescription")
    2) "bundle" identifies bundle from which localized description will be read.
       Format is the same like for fully qualified classes. For example, 
       localization bundle named "Bundle" in package "my.package" can be pointed
       to by value "my.package.Bundle".
       Attributes "bundle" and "display" together give fully qualified bundle
       pointer.
-->
<!ELEMENT description EMPTY >
<!ATTLIST description
    display CDATA #REQUIRED
    bundle CDATA #REQUIRED
>

<!-- Cascading value for placing new frames. 
     "origin-x" x coordinate where cascading starts
     "origin-y" y coordinate where cascading starts
     "step-x" x step added to coordinates for new frame
     "step-y" y step added to coordinates for new frame
     "count" number of steps already performed
     "current-x" x coordinate of current frame
     "current-y" y coordinate of current frame
-->
<!ELEMENT cascade    EMPTY >
<!ATTLIST cascade
    origin-x CDATA #REQUIRED
    origin-y CDATA #REQUIRED
    step-x CDATA #REQUIRED
    step-y CDATA #REQUIRED
    count CDATA #REQUIRED
    current-x CDATA #REQUIRED
    current-y CDATA #REQUIRED
>

<!-- Active mode (frame) in workspace.
     "mode" ID of active mode in workspace
-->
<!ELEMENT active    EMPTY >
<!ATTLIST active
    mode CDATA #REQUIRED
>

<!-- z-order of frames in workspace.
     "z-order" gives Z-order of frames in workspace given by comma separated list of mode's IDs
-->
<!ELEMENT mode   EMPTY >
<!ATTLIST mode
    z-order CDATA #REQUIRED
>

<!-- Toolbar attributes.
     "configuration" name of toolbar configuration -->
<!ELEMENT toolbar   EMPTY >
<!ATTLIST toolbar
    configuration CDATA #IMPLIED
>

<!-- Inner desktop attributes. Valid only for mdi ui type.
     "maximized" true if inner desktop contains maximized frames -->
<!ELEMENT desktop   EMPTY >
<!ATTLIST maximized
    maximized CDATA #IMPLIED
>
