// Copyright (C) 2008 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.

package com.google.gerrit.client.ui;

import com.google.gerrit.client.Gerrit;
import com.google.gerrit.client.admin.Util;
import com.google.gwt.event.dom.client.BlurEvent;
import com.google.gwt.event.dom.client.BlurHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.FocusEvent;
import com.google.gwt.event.dom.client.FocusHandler;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyPressEvent;
import com.google.gwt.event.dom.client.KeyPressHandler;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.SuggestBox;
import com.google.gwtexpui.globalkey.client.NpTextBox;

public class AddMemberBox extends Composite {
  private final FlowPanel addPanel;
  private final Button addMember;
  private final NpTextBox nameTxtBox;
  private final SuggestBox nameTxt;

  public AddMemberBox() {
    addPanel = new FlowPanel();
    addMember = new Button(Util.C.buttonAddGroupMember());
    nameTxtBox = new NpTextBox();
    nameTxt = new SuggestBox(new AccountSuggestOracle(), nameTxtBox);

    nameTxtBox.setVisibleLength(50);
    nameTxtBox.setText(Util.C.defaultAccountName());
    nameTxtBox.addStyleName(Gerrit.RESOURCES.css().inputFieldTypeHint());
    nameTxtBox.addFocusHandler(new FocusHandler() {
      @Override
      public void onFocus(final FocusEvent event) {
        if (Util.C.defaultAccountName().equals(nameTxtBox.getText())) {
          nameTxtBox.setText("");
          nameTxtBox.removeStyleName(Gerrit.RESOURCES.css().inputFieldTypeHint());
        }
      }
    });
    nameTxtBox.addBlurHandler(new BlurHandler() {
      @Override
      public void onBlur(final BlurEvent event) {
        if ("".equals(nameTxtBox.getText())) {
          nameTxtBox.setText(Util.C.defaultAccountName());
          nameTxtBox.addStyleName(Gerrit.RESOURCES.css().inputFieldTypeHint());
        }
      }
    });
    nameTxtBox.addKeyPressHandler(new KeyPressHandler() {
      @Override
      public void onKeyPress(KeyPressEvent event) {
        if (event.getCharCode() == KeyCodes.KEY_ENTER) {
          addMember.fireEvent(new ClickEvent() {});
        }
      }
    });

    addPanel.add(nameTxt);
    addPanel.add(addMember);

    initWidget(addPanel);
  }

  public void setAddButtonText(final String text) {
    addMember.setText(text);
  }

  public void addClickHandler(final ClickHandler handler) {
    addMember.addClickHandler(handler);
  }

  public String getText() {
    String s = nameTxtBox.getText();
    if (s == null || s.equals(Util.C.defaultAccountName())) {
      s = "";
    }
    return s;
  }

  public void setEnabled(boolean enabled) {
    addMember.setEnabled(enabled);
    nameTxtBox.setEnabled(enabled);
  }

  public void setText(String text) {
    nameTxtBox.setText(text);
  }

}

@@ -1185,32 +1185,152 @@
 eyPressHandler;%0A
+import com.google.gwt.event.logical.shared.SelectionEvent;%0Aimport com.google.gwt.event.logical.shared.SelectionHandler;%0A
 import com.googl
@@ -1358,16 +1358,16 @@
 Button;%0A
-
 import c
@@ -1503,16 +1503,79 @@
 estBox;%0A
+import com.google.gwt.user.client.ui.SuggestOracle.Suggestion;%0A
 import c
@@ -1811,16 +1811,53 @@
 nameTxt;
+%0A  private boolean submitOnSelection;
 %0A%0A  publ
@@ -3017,32 +3017,68 @@
 sEvent event) %7B%0A
+        submitOnSelection = false;%0A%0A
         if (even
@@ -3132,47 +3132,402 @@
     
-addMember.fireEvent(new ClickEvent() %7B%7D
+if (nameTxt.isSuggestionListShowing()) %7B%0A            submitOnSelection = true;%0A          %7D else %7B%0A            doAdd();%0A          %7D%0A        %7D%0A      %7D%0A    %7D);%0A    nameTxt.addSelectionHandler(new SelectionHandler%3CSuggestion%3E() %7B%0A      @Override%0A      public void onSelection(SelectionEvent%3CSuggestion%3E event) %7B%0A        if (submitOnSelection) %7B%0A          submitOnSelection = false;%0A          doAdd(
 );%0A 
@@ -4189,10 +4189,85 @@
 );%0A  %7D%0A%0A
+  private void doAdd() %7B%0A    addMember.fireEvent(new ClickEvent() %7B%7D);%0A  %7D%0A
 %7D%0A

Fix enter with completion in add reviewer box