<?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:style>
    @eval trimColor com.google.gerrit.client.Gerrit.getTheme().trimColor;

    .wrapper {
      width: 100%;
      background-color: trimColor;
      overflow: hidden;
      font-size: 0; /* inline-block spacing fix */
    }

    .wrapper .box {
      width: 100%;
      text-align: center;
    }

    .leftWrapper {
      width: 50%;
      float: left;
    }

    .rightWrapper {
      width: 50%;
      overflow: hidden;
    }

    .leftBox {
      float:left;
    }

    .rightBox {
      float: right;
    }
  </ui:style>

  <g:HTMLPanel styleName="{style.wrapper}">
    <div class='{style.leftWrapper}'>
      <g:SimplePanel addStyleNames='{style.box} {style.leftBox}' ui:field='sideAPanel'/>
    </div>
    <div class='{style.rightWrapper}'>
      <g:SimplePanel addStyleNames='{style.box} {style.rightBox}' ui:field='sideBPanel'/>
    </div>
  </g:HTMLPanel>
</ui:UiBinder>

