<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (C) 2012 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.
-->
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
  xmlns:g='urn:import:com.google.gwt.user.client.ui'
  xmlns:gerrit='urn:import:com.google.gerrit.client'
  xmlns:u='urn:import:com.google.gerrit.client.ui'>
  <ui:style gss='false'>
    .panel {
      padding: 8px;
    }
    .avatar {
      padding-right: 4px;
      width: 100px;
      height: 100px;
    }
    .infoCell {
      vertical-align: top;
    }
    .userName {
      font-weight: bold;
    }
    .email {
      padding-bottom: 6px;
    }
    .userLinks {
      min-width: 250px;
    }
    .userLinksRight {
      float: right;
    }
    .switchAccount {
      border-right: 1px solid black;
      padding-right: 0.5em;
      margin-right: 0.5em;
    }
  </ui:style>

  <g:HTMLPanel styleName='{style.panel}'>
    <table><tr><td>
      <gerrit:AvatarImage ui:field='avatar' styleName='{style.avatar}' />
    </td><td class='{style.infoCell}'>
      <g:Label ui:field='userName' styleName="{style.userName}" />
      <g:Label ui:field='userEmail' styleName="{style.email}" />
    </td></tr></table>
    <div ui:field='userLinks' class='{style.userLinks}'>
      <u:InlineHyperlink ui:field='settings' targetHistoryToken='/settings/'>
        <ui:msg>Settings</ui:msg>
      </u:InlineHyperlink>
      <span class='{style.userLinksRight}'>
        <a ui:field='switchAccount' class='{style.switchAccount}'><ui:msg>Switch Account</ui:msg></a
        ><a ui:field='logout'><ui:msg>Sign Out</ui:msg></a>
      </span>
    </div>
  </g:HTMLPanel>
</ui:UiBinder>
