<!--
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.2//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?, slidingSide?, slideInSize*) >
<!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" or "sliding".
-->
<!ELEMENT kind      EMPTY >
<!ATTLIST kind
    type (editor | view | sliding) #REQUIRED
>

<!-- Element sliding side
    "side" direction of slide
-->
<!ELEMENT slidingSide      EMPTY >
<!ATTLIST slidingSide
    side (left | right | bottom) #REQUIRED
>


<!-- Element slide-in size
    "tc-id" TopComponent's ID
    "size" the size of the TopComponent (width or height) when it is slided-in
-->
<!ELEMENT slideInSize      EMPTY >
<!ATTLIST slideInSize
    tc-id CDATA #REQUIRED
    size CDATA #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
>
