<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (C) 2015 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:expui='urn:import:com.google.gwtexpui.globalkey.client'>
  <ui:with field='res' type='com.google.gerrit.client.GerritResources'/>

  <ui:style gss='false'>
    .errorHeader {
      font-weight: bold;
    }
    .errorText {
      white-space: pre-wrap;
      padding-bottom: 6px;
    }
  </ui:style>

  <g:HTMLPanel>
    <g:Widget ui:field='keys' addStyleNames='{res.css.sshKeyTable}'/>
    <g:FlowPanel>
      <g:Button ui:field='deleteKey'>
        <div><ui:msg>Delete</ui:msg></div>
      </g:Button>
      <g:Button ui:field='addKey'>
        <div><ui:msg>Add Key ...</ui:msg></div>
      </g:Button>
    </g:FlowPanel>
    <g:VerticalPanel ui:field='addKeyBlock'
        styleName='{res.css.addSshKeyPanel}'
        visible='false'>
      <g:Label>Add GPG Public Key</g:Label>
      <g:DisclosurePanel>
        <g:header>How to generate a GPG key</g:header>
        <g:HTMLPanel>
          <ol>
            <li>
              From the Terminal or Git Bash, run <em>gpg --gen-key</em> and
              follow the prompts to create the key.
            </li>
            <li>
              Use the default kind. Use the default (or higher) keysize. Choose
              any value for your expiration.
            </li>
            <li>
              The user ID should contain one of your registered email addresses.
            </li>
            <li>Setting a passphrase is strongly recommended.</li>
            <li>Note the ID of your new key.</li>
            <li>
              To export your key, run the following and paste the full output
              into the text box:
              <br/>
              <code>gpg --export -a &lt;key ID&gt;</code>
            </li>
          </ol>
        </g:HTMLPanel>
      </g:DisclosurePanel>
      <expui:NpTextArea
          visibleLines='12'
          characterWidth='80'
          spellCheck='false'
          ui:field='keyText'/>
      <g:VerticalPanel ui:field='errorPanel' visible='false'>
        <g:Label styleName='{style.errorHeader}'>Error adding GPG key:</g:Label>
        <g:Label styleName='{style.errorText}' ui:field='errorText'/>
      </g:VerticalPanel>
      <g:FlowPanel>
        <g:Button ui:field='clearButton'>
          <div><ui:msg>Clear</ui:msg></div>
        </g:Button>
        <g:Button ui:field='addButton'>
          <div><ui:msg>Add</ui:msg></div>
        </g:Button>
        <g:Button ui:field='closeButton'>
          <div><ui:msg>Close</ui:msg></div>
        </g:Button>
      </g:FlowPanel>
    </g:VerticalPanel>
  </g:HTMLPanel>
</ui:UiBinder>
