<!--
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 Window Manager Properties 2.0//EN
-->

<!-- The root element for window manager properties. Consists of subelements
     for specific properties.
     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 windowmanager (main-window?, editor-area, screen?, active-mode?, maximized-mode?, toolbar?, tc-list?, imported-tcrefs?) >
<!ATTLIST windowmanager
    version CDATA #REQUIRED
>

<!-- Element "main-window" contains properties of main window.
-->
<!ELEMENT main-window   (joined-properties | separated-properties | 
                         (joined-properties, separated-properties) |
                         (separated-properties, joined-properties)) >
<!ATTLIST main-window
>

<!-- Element "joined-properties" contains properties of main window in joined state.
     "x" gives position of main window on screen on horizontal axis left is 0

     "y" gives position of main window on screen on vertical axis top is 0

     "width" gives absolute width of main window

     "height" gives absolute height of main window

     "relative-x" gives relative width of main window
     Either x or relative-x or centered-horizontally true must be specified.

     "relative-y" gives relative width of main window       
     Either y or relative-y or centered-vertically must be specified.

     "relative-width" gives relative width of main window
     Either width or relative-width must be specified.

     "relative-height" gives relative width of main window
     Either height or relative-height must be specified.

     "centered-horizontally" is true when main window is centered horizontally

     "centered-vertically" is true when main window is centered vertically

     "maximize-if-width-below" and

     "maximize-if-height-below" are optional,
     they specify limit on computed absolute width/height,
     IF min(screen.width, maximize-if-width-below) > main-window.width OR
        min(screen.height, maximize-if-height-below) > main-window.height THEN
         IF screen.width > maximize-if-width-below AND screen.height > maximize-if-height-below THEN
             set main window size to maximize-if-width-below, maximize-if-height-below
         ELSE
             let window maximized
         ENDIF
     ENDIF 
     It is to avoid main window size bigger than screen size (width or height).

     "frame-state" represents 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 joined-properties   EMPTY >
<!ATTLIST joined-properties
    x                     CDATA            #IMPLIED
    y                     CDATA            #IMPLIED
    width                 CDATA            #IMPLIED
    height                CDATA            #IMPLIED
    relative-x            CDATA            #IMPLIED
    relative-y            CDATA            #IMPLIED
    relative-width        CDATA            #IMPLIED
    relative-height       CDATA            #IMPLIED
    centered-horizontally (true | false)   #IMPLIED
    centered-vertically   (true | false)   #IMPLIED
    maximize-if-width-below  CDATA         #IMPLIED
    maximize-if-height-below CDATA         #IMPLIED
    frame-state           CDATA            #IMPLIED
>

<!-- Element "separated-properties" contains properties of main window in separated state.
     "x" gives position of main window on screen on horizontal axis left is 0

     "y" gives position of main window on screen on vertical axis top is 0

     "width" gives absolute width of main window

     "height" gives absolute height of main window

     "relative-x" gives relative width of main window
     Either x or relative-x or centered-horizontally true must be specified.

     "relative-y" gives relative width of main window
     Either y or relative-y or centered-vertically must be specified.

     "relative-width" gives relative width of main window
     Either width or relative-width must be specified.

     "relative-height" gives relative width of main window
     Either height or relative-height must be specified.

     "centered-horizontally" is true when main window is centered horizontally

     "centered-vertically" is true when main window is centered vertically

     "frame-state" represents 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 separated-properties   EMPTY >
<!ATTLIST separated-properties
    x                     CDATA            #IMPLIED
    y                     CDATA            #IMPLIED
    width                 CDATA            #IMPLIED
    height                CDATA            #IMPLIED
    relative-x            CDATA            #IMPLIED
    relative-y            CDATA            #IMPLIED
    relative-width        CDATA            #IMPLIED
    relative-height       CDATA            #IMPLIED
    centered-horizontally (true | false)   #IMPLIED
    centered-vertically   (true | false)   #IMPLIED
    frame-state           CDATA            #IMPLIED
>

<!-- Element "editor-area" contains bounds and constraints of editor area
     according to state of editor area.
     "state" sets state of editor area (desktop) joined when all windows are
     part of main window or separated when main window, windows and EA are separate
     into their own native windows.

     "frame-state" represents state of frame.
     It is represented as bitwise mask - integer value.
     See java.awt.Frame for possible values.
     Relevant for separated state of editor area when editor area resides in its own frame.
     Default value is Frame.NORMAL (0).
-->
<!ELEMENT editor-area   (constraints, (bounds | relative-bounds)?) >
<!ATTLIST editor-area
    state (joined | separated) #REQUIRED
    frame-state CDATA          #IMPLIED
>

<!-- Element "bounds" contains bounds of editor area.
     "x" gives position of editor area on screen on horizontal axis
     left is 0.
     "y" gives position of editor area on screen on vertical axis
     top is 0.
     "width" gives absolute width of editor area.
     "height" gives absolute height of editor area.
     Relevant only when editor area is separated from main window.
-->
<!ELEMENT bounds EMPTY >
<!ATTLIST bounds
    x CDATA #REQUIRED
    y CDATA #REQUIRED
    width  CDATA #REQUIRED
    height CDATA #REQUIRED
>

<!-- Relative (percentage) bounds of editor area, 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.
     Relative bounds can be used to define starting position of separated editor area
     in module layer (relative bounds are independent of screen size).
     Relevant only when editor area is separated from main window.
-->
<!ELEMENT relative-bounds    EMPTY >
<!ATTLIST relative-bounds
    x CDATA #REQUIRED
    y CDATA #REQUIRED
    width CDATA #REQUIRED
    height CDATA #REQUIRED
>

<!-- Constraints describes path of editor area in model tree.
     Path consists of array of values to describe path eg. [H1;V2].
     Relevant only for editor area 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
>

<!-- Element "screen" contains properties of screen.
     "width" is width of screen in pixels
     "height" is height of screen in pixels
-->
<!ELEMENT screen    EMPTY >
<!ATTLIST screen
    width  CDATA #REQUIRED
    height CDATA #REQUIRED
>

<!-- Element "active-mode" contains unique name of active mode or is empty
     when no mode is active.
     "name" unique name of active mode
-->
<!ELEMENT active-mode  EMPTY >
<!ATTLIST active-mode
    name CDATA #IMPLIED
>

<!-- Element "maximized-mode" contains unique name of maximized mode or is empty
     when no mode is maximized.
     "name" unique name of maximized mode. It is empty when no mode is maximized. -->
<!ELEMENT maximized-mode   EMPTY >
<!ATTLIST maximized-mode
    name CDATA #IMPLIED
>

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

<!-- Element "tc-list" contains ordered list of TopComponent Ids. Used to save state of
     RecentViewList. -->
<!ELEMENT tc-list (tc-id*) >
<!ATTLIST tc-list
>

<!-- Element "tc-id" contains TopComponent Id. It is part of element "tc-list".
     "id" is unique id of TopComponent -->
<!ELEMENT tc-id   EMPTY >
<!ATTLIST tc-id
    id CDATA #REQUIRED
>

<!-- Element "imported-tcrefs" contains list of imported TopComponent Ids with source
     workspace name and source mode name. -->
<!ELEMENT imported-tcrefs (tcref-item*) >
<!ATTLIST imported-tcrefs
>

<!-- Element "tcref-item" contains information about imported TopComponent.
     It is part of element "imported-tcrefs".
     "workspace" unique name of workspace from which TopComponent was imported
     "mode" unique name of mode from which TopComponent was imported
     "id" is unique id of imported TopComponent -->
<!ELEMENT tcref-item   EMPTY >
<!ATTLIST tcref-item
    workspace CDATA #REQUIRED
    mode      CDATA #REQUIRED
    id        CDATA #REQUIRED
>
