 <!--

    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.

-->
<!-- Document Type Declaration for toolbar configuration xml files. -->

  <!-- Root element of toolbar configuration. It's a list of Rows. -->
  <!ELEMENT Configuration (Row+)>

  <!-- Toolbar configuration row. It's a list of Toolbars. -->
  <!ELEMENT Row (Toolbar*)>

  <!-- Toolbar configuration Toolbar. It contains name of toolbar,
  it's position and switch of toolbar visibility. -->
  <!ELEMENT Toolbar EMPTY>
  <!ATTLIST Toolbar
    name CDATA #REQUIRED
    visible (true | false) #IMPLIED
    align (left | right) #IMPLIED
    draggable (true | false) #IMPLIED
  >
