<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (C) 2014 The Android Open Source Project

Licensed 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.
-->
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
    xmlns:g='urn:import:com.google.gwt.user.client.ui'>
  <ui:style>
    .header {
      position: relative;
      height: 16px;
      line-height: 16px;
    }

    .headerLine {
      background-color: #f7f7f7;
      border-bottom: 1px solid #ddd;
      padding-left: 30px;
    }

    .headerButtons {
      display: inline-block;
      padding-right: 5px;
      border-right: 1px inset #ddd;
      margin-right: 5px;
    }

    .headerButtons button:disabled {
      background-color: #ddd;
      font-weight: normal;
      cursor: default;
    }

    .headerButtons button {
      margin: 2px 0 2px 0;
      text-align: center;
      font-size: 8pt;
      cursor: pointer;
      border: 1px solid;
      color: rgba(0, 0, 0, 0.15);
      background-color: #f5f5f5;
      -webkit-border-radius: 1px;
      -webkit-box-sizing: content-box;
    }

    .headerButtons button div {
      color: #444;
      min-width: 54px;
      white-space: nowrap;
      line-height: 8pt;
    }

    .save {
      font-weight: bold;
    }

    .path {
      white-space: nowrap;
    }

    .statusLine {
      position: fixed;
      bottom: 0;
      left: 0;
      width: 175px;
      height: 19px;
      background-color: #f7f7f7;
      border-top: 1px solid #ddd;
      border-right: 1px solid #ddd;
    }
    .statusLine div {
      height: inherit;
    }

    .cursorPosition {
      display: inline-block;
      margin: 0 5px 0 35px;
      white-space: nowrap;
    }

    .dirty {
      display: inline-block;
      margin: 0 5px 0 5px;
      padding: 0 0 0 5px;
      border-left: 1px solid #ddd;
      font-weight: bold;
    }

    .navigation {
      position: absolute;
      top: 0;
      right: 10px;
    }
    .linkPanel {
      float: left;
    }
    .linkPanel img {
      padding-top: 2px;
      padding-right: 3px;
    }
  </ui:style>
  <g:HTMLPanel styleName='{style.header}'>
    <div class='{style.headerLine}' ui:field='header'>
       <div class='{style.headerButtons}'>
         <g:Button ui:field='close'
             styleName=''
             title='Close file and return to change'>
           <ui:attribute name='title'/>
           <div><ui:msg>Close</ui:msg></div>
         </g:Button>
         <g:Button ui:field='save'
             styleName='{style.save}'
             title='Save'>
           <ui:attribute name='title'/>
           <div><ui:msg>Save</ui:msg></div>
         </g:Button>
       </div>
       <span class='{style.path}'><span ui:field='project'/> / <span ui:field='filePath'/></span>
       <div class='{style.navigation}'>
         <g:FlowPanel ui:field='linkPanel' styleName='{style.linkPanel}'/>
       </div>
    </div>
    <div ui:field='editor' />
    <div class='{style.statusLine}'>
      <div class='{style.cursorPosition}'><span ui:field='cursLine'/> : <span ui:field='cursCol'/></div>
      <div class='{style.dirty}' ui:field='dirty'>Unsaved</div>
    </div>
  </g:HTMLPanel>
</ui:UiBinder>
