<?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:with field='ico' type='com.google.gerrit.client.GerritResources'/>
  <ui:style gss='false'>
    @external .CodeMirror, .CodeMirror-cursor;

    .header {
      position: relative;
      height: 16px;
      line-height: 16px;
    }

    .header .CodeMirror div.CodeMirror-cursor {
      border-left: 2px solid black;
    }

    .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;
    }

    .preferences {
      position: relative;
      top: 2px;
      cursor: pointer;
      outline: none;
    }
  </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}'/>
         <g:Image
             ui:field='editSettings'
             styleName='{style.preferences}'
             resource='{ico.gear}'
             title='Edit screen preferences'>
            <ui:attribute name='title'/>
         </g:Image>
       </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>
