<!--
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 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
>

<!-- 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
>
