<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (C) 2011 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:e='urn:import:com.google.gwt.editor.ui.client'
  xmlns:my='urn:import:com.google.gerrit.client.admin'
  ui:generateFormat='com.google.gwt.i18n.rebind.format.PropertiesFormat'
  ui:generateKeys='com.google.gwt.i18n.rebind.keygen.MD5KeyGenerator'
  ui:generateLocales='default,en'
  >
<ui:with field='res' type='com.google.gerrit.client.admin.AdminResources'/>
<ui:style gss='false'>
  @eval selectionColor com.google.gerrit.client.Gerrit.getTheme().selectionColor;
  @eval trimColor com.google.gerrit.client.Gerrit.getTheme().trimColor;

  .panel {
    width: 50em;
    position: relative;
  }

  .content {
    margin-top: 4px;
    margin-bottom: 4px;
    padding-bottom: 2px;
  }

  .normal {
    background-color: trimColor;
  }

  .deleted {
    padding-left: 7px;
    padding-bottom: 2px;
  }

  .header {
    padding-left: 5px;
    padding-right: 5px;
  }
  .headerText {
    vertical-align: top;
    white-space: nowrap;
    font-weight: bold;
  }
  .headerTable {
    border: 0;
    width: 100%;
    padding-right: 40px;
  }

  .header:hover {
    background-color: selectionColor;
  }

  .name {
    width: 100%;
  }
  .nameEdit {
    width: 100%;
  }

  .permissionList {
    margin-left: 5px;
    margin-right: 5px;
    margin-bottom: 5px;
  }

  .addContainer {
    padding-left: 16px;
    padding-right: 16px;
    font-size: 80%;
  }
  .addContainer:hover {
    background-color: selectionColor;
  }

  .deleteIcon {
    position: absolute;
    top: 5px;
    right: 17px;
  }

  .undoIcon {
    position: absolute;
    top: 2px;
    right: 17px;
  }
</ui:style>

<g:HTMLPanel styleName='{style.panel}'>
<div ui:field='normal' class='{style.normal} {style.content}'>
  <div class='{style.header}'>
    <table class='{style.headerTable}'><tr>
      <td class='{style.headerText}'>
        <span ui:field='sectionType'/>
      </td>
      <td width='100%'>
        <my:ValueEditor
            ui:field='name'
            addStyleNames='{style.name}'
            editTitle='Edit reference pattern'>
          <ui:attribute name='editTitle'/>
          <my:editor>
            <my:RefPatternBox styleName='{style.nameEdit}'/>
          </my:editor>
        </my:ValueEditor>
        <span ui:field='sectionName' class='{style.name}'/>
      </td>
    </tr></table>

    <g:Anchor
        ui:field='deleteSection'
        href='javascript:void'
        styleName='{style.deleteIcon} {res.css.deleteIcon}'
        title='Delete this section (and nested rules)'>
      <ui:attribute name='title'/>
    </g:Anchor>
  </div>

  <g:FlowPanel
      ui:field='permissionContainer'
      styleName='{style.permissionList}'/>
  <div ui:field='addContainer' class='{style.addContainer}'>
    <g:ValueListBox ui:field='permissionSelector'/>
  </div>
</div>

<div
    ui:field='deleted'
    class='{style.deleted} {res.css.deleted}'
    style='display: none'>
  <span ui:field='deletedName'/>
  <g:Anchor
      ui:field='undoDelete'
      href='javascript:void'
      styleName='{style.undoIcon} {res.css.undoIcon}'
      title='Undo deletion'>
    <ui:attribute name='title'/>
  </g:Anchor>
</div>
</g:HTMLPanel>
</ui:UiBinder>
