<!--
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 http://www.netbeans.org/cddl.html
or http://www.netbeans.org/cddl.txt.

When distributing Covered Code, include this CDDL Header Notice in each file
and include the License file at http://www.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 Mode Properties 2.0//EN
-->

<!-- The root element for mode properties. Consists of name, optional
     module information and several property sets for various types of
     user interface.
     Attribute "version" is 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 mode (module?, name, kind, state, constraints?, (bounds | relative-bounds)?, frame?, active-tc?, empty-behavior?) >
<!ATTLIST mode
    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 mode defined by module if module is disabled.
    If you want your module's mode 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 name
    "unique" represents unique ID of mode
-->
<!ELEMENT name      EMPTY >
<!ATTLIST name
    unique CDATA #REQUIRED
>

<!-- Element kind
    "type" kind of mode "editor" or "view".
-->
<!ELEMENT kind      EMPTY >
<!ATTLIST kind
    type (editor | view) #REQUIRED
>

<!-- Element state
    "type" state of mode "joined" (is inside of main window) or "separated" 
    (is in its own native window separated from main window).
-->
<!ELEMENT state      EMPTY >
<!ATTLIST state
    type (joined | separated) #REQUIRED
>

<!-- Absolute bounds rectangle of the mode, stored in attributes
     x, y, width, height, where x, y is location of left top point of bounds 
     rectangle.
     Relevant only for separate mode (window).
-->
<!ELEMENT bounds    EMPTY >
<!ATTLIST bounds
    x CDATA #REQUIRED
    y CDATA #REQUIRED
    width CDATA #REQUIRED
    height CDATA #REQUIRED
>

<!-- Relative (percentage) bounds rectangle of the mode, stored in attributes
     x, y, width, height, where x, y is location of left top point of bounds
     rectangle, it is relative to width of main window and height of area below
     main window.
     Relevant only for separate mode (window).
-->
<!ELEMENT relative-bounds    EMPTY >
<!ATTLIST relative-bounds
    x CDATA #REQUIRED
    y CDATA #REQUIRED
    width CDATA #REQUIRED
    height CDATA #REQUIRED
>

<!-- Frame properties.
    Relevant only for separate mode (window).
    Attribute "state" represents current state of frame.
    It is represented as bitwise mask - integer value.
    See java.awt.Frame for possible values.
    Default value is Frame.NORMAL (0).
-->
<!ELEMENT frame    EMPTY >
<!ATTLIST frame
    state CDATA #IMPLIED
>

<!-- Constraints describes path of mode in model tree.
     Path consists of array of values to describe path eg. [H1;V2].
     Relevant only for mode inside desktop
-->
<!ELEMENT constraints  (path*) >
<!ATTLIST constraints
>

<!-- Kind of mode.
     Attribute "kind" is kind of mode. It is either "editor" or "view".
-->
<!ELEMENT mode-kind    EMPTY >
<!ATTLIST mode-kind
    kind (editor | view) #REQUIRED
>

<!-- Path describe path to mode in model tree.
     "orientation" sets orientation of splitter. "horizontal" means splitting
     along x axis - components are from left to right. "vertical" means splitting
     along y axis - components are from top to bottom.
     "number" sets number of cell in given split cell. It is integer number. Number defines
     position of given cell in array of cells. It is possible to define for example
     20 for first cell and 40 for second cell. Later it is possible to insert third cell between
     first and second by using 30 for third cell. It is usefull for platform to allow third party
     modules to modify (insert) their own modes to existing layout.
     Cells are counted from left to right in case of vertical split and
     from top to bottom in case of horizontal split.
     "weight" is double number from 0 to 1. It sets relative size of cell
     in given splitter. Default value is 0.5.
-->
<!ELEMENT path   EMPTY >
<!ATTLIST path
    orientation (horizontal | vertical) #REQUIRED
    number CDATA #REQUIRED
    weight CDATA #IMPLIED
>

<!-- Active TopComponent.
     "id" stores unique ID of active TopComponent
-->
<!ELEMENT active-tc  EMPTY >
<!ATTLIST active-tc
    id CDATA #IMPLIED
>

<!-- Element "empty-behavior" describes behavior of mode when it is empty ie. does not contain
     any opened TopComponent.
     Attribute "permanent" can be "true" of "false". "true" means that mode remains in window
     system when it is empty ie. it does not contain any opened TopComponent. "false" means that
     mode is completely destroyed when it is empty. 
     Optional attribute, default value is "true".
     When mode is defined in module layer it is usually permanent ie. "true" is used.
-->
<!ELEMENT empty-behavior   EMPTY >
<!ATTLIST empty-behavior
    permanent (true | false) #IMPLIED
>
