<?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'
    xmlns:c='urn:import:com.google.gwtexpui.globalkey.client'>
  <ui:with field='res' type='com.google.gerrit.client.change.Resources'/>
  <ui:style>
    .commitMessage {
      background-color: white;
      font-family: monospace;
    }
    .cancel { float: right; }
  </ui:style>
  <g:HTMLPanel>
    <div class='{res.style.section}'>
      <c:NpTextArea
         visibleLines='30'
         characterWidth='72'
         styleName='{style.commitMessage}'
         ui:field='message'/>
    </div>
    <div class='{res.style.section}'>
      <g:Button ui:field='save'
          title='Create new patch set with updated commit message'
          styleName='{res.style.button}'>
        <ui:attribute name='title'/>
        <div><ui:msg>Save</ui:msg></div>
      </g:Button>
      <g:Button ui:field='cancel'
          styleName='{res.style.button}'
          addStyleNames='{style.cancel}'>
          <div>Cancel</div>
      </g:Button>
    </div>
  </g:HTMLPanel>
</ui:UiBinder>
