<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (C) 2013 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>
    #change_actions {
      padding-top: 2px;
      padding-bottom: 20px;
    }

    #change_actions button {
      margin: 6px 3px 0 0;
      border-color: rgba(0, 0, 0, 0.1);
      text-align: center;
      font-size: 8pt;
      font-weight: bold;
      border: 1px solid;
      cursor: pointer;
      color: #444;
      background-color: #f5f5f5;
      background-image: -webkit-linear-gradient(top, #f5f5f5, #f1f1f1);
      -webkit-border-radius: 2px;
      -webkit-box-sizing: content-box;
    }
    #change_actions button div {
      color: #444; 
      height: 10px;
      min-width: 54px;
      line-height: 10px;
      white-space: nowrap;
    }

    #change_actions button {
      color: #444;
      background-color: #f5f5f5;
      background-image: -webkit-linear-gradient(top, #f5f5f5, #f1f1f1);
    }
    #change_actions button div {color: #444;}

    #change_actions button.red {
      color: #d14836;
      background-color: #d14836;
      background-image: -webkit-linear-gradient(top, #d14836, #d14836);
    }
    #change_actions button.red div {color: #fff;}

    #change_actions button.submit {
      float: right;
      background-color: #4d90fe;
      background-image: -webkit-linear-gradient(top, #4d90fe, #4d90fe);
    }
    #change_actions button.submit div {color: #fff;}

    #change_actions button:disabled {
      font-weight: normal;
      background-color: #999;
      background-image: -webkit-linear-gradient(top, #999, #999);
    }
  </ui:style>

  <g:FlowPanel>
    <g:Button ui:field='cherrypick' styleName='' visible='false'>
      <div><ui:msg>Cherry Pick</ui:msg></div>
    </g:Button>
    <g:Button ui:field='rebase' styleName='' visible='false'>
      <div><ui:msg>Rebase</ui:msg></div>
    </g:Button>
    <g:Button ui:field='revert' styleName='' visible='false'>
      <div><ui:msg>Revert</ui:msg></div>
    </g:Button>
    <g:Button ui:field='deleteChange' styleName='' visible='false'>
      <div><ui:msg>Delete Change</ui:msg></div>
    </g:Button>
    <g:Button ui:field='deleteRevision' styleName='' visible='false'>
      <div><ui:msg>Delete Revision</ui:msg></div>
    </g:Button>
    <g:Button ui:field='publish' styleName='' visible='false'>
      <div><ui:msg>Publish</ui:msg></div>
    </g:Button>

    <g:Button ui:field='abandon' styleName='{style.red}' visible='false'>
      <div><ui:msg>Abandon</ui:msg></div>
    </g:Button>
    <g:Button ui:field='restore' styleName='{style.red}' visible='false'>
      <div><ui:msg>Restore</ui:msg></div>
    </g:Button>

    <g:Button ui:field='submit' styleName='{style.submit}' visible='false'>
      <div><ui:msg>Submit</ui:msg></div>
    </g:Button>
  </g:FlowPanel>
</ui:UiBinder>
