<!--
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.0//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?) >
<!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
>

