<?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.
-->

<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
    xmlns:g='urn:import:com.google.gwt.user.client.ui'>


  <ui:with field='res' type='com.google.gerrit.client.GerritResources'/>
  <ui:with field='cons' type='com.google.gerrit.client.patches.PatchConstants'/>
  <ui:style type='com.google.gerrit.client.patches.PatchSetSelectBox.BoxStyle'>
    @eval selectionColor com.google.gerrit.client.Gerrit.getTheme().selectionColor;
    @eval trimColor com.google.gerrit.client.Gerrit.getTheme().trimColor;
    @eval backgroundColor com.google.gerrit.client.Gerrit.getTheme().backgroundColor;

    .wrapper {
      width: 100%;
      text-align: center;
      font-size: 0; /* inline-block spacing fix */
    }

    .linkPanel {
      display: inline-block;
    }

    .linkPanel > div {
      display: inline-block;
      float: left;
    }

    .linkPanel {
      overflow: hidden; /* div clear fix */
      font-size: 12px;
    }

    .linkPanel > a {
      padding: 3px;
      display: inline-block;
      text-decoration: none;
      float: left;
    }

    .patchSetLabel {
      font-weight: bold;
      float: left;
      padding: 3px;
    }

    .sideMarker {
      padding: 3px;
    }

    .downloadLink {
      float: left;
      padding: 1px !important;
      margin-left: 3px;
    }

    .downloadLink > a {
      text-size: 0;
    }

    .selected {
      font-weight: bold;
      background-color: selectionColor;
    }

    .sideMarker {
      font-family: monospace;
      float: left;
    }

    .hidden {
      visibility: hidden;
    }
  </ui:style>

  <g:HTMLPanel styleName='wrapper'>
    <g:HTMLPanel styleName='{style.linkPanel}' ui:field='linkPanel'>
      <div class='{style.patchSetLabel}'><ui:text from="{cons.patchSet}" /></div>
      <div class='{style.sideMarker}' ui:field='sideMarker'></div>
    </g:HTMLPanel>
  </g:HTMLPanel>
</ui:UiBinder>

