summaryrefslogtreecommitdiffstats
path: root/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/GroupReferenceBox.java
diff options
context:
space:
mode:
Diffstat (limited to 'gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/GroupReferenceBox.java')
-rw-r--r--gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/GroupReferenceBox.java143
1 files changed, 143 insertions, 0 deletions
diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/GroupReferenceBox.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/GroupReferenceBox.java
new file mode 100644
index 0000000000..9da9c22cb6
--- /dev/null
+++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/GroupReferenceBox.java
@@ -0,0 +1,143 @@
+// 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.
+
+package com.google.gerrit.client.admin;
+
+import com.google.gerrit.client.ui.AccountGroupSuggestOracle;
+import com.google.gerrit.client.ui.RPCSuggestOracle;
+import com.google.gerrit.common.data.GroupReference;
+import com.google.gwt.editor.client.LeafValueEditor;
+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.event.dom.client.KeyUpEvent;
+import com.google.gwt.event.dom.client.KeyUpHandler;
+import com.google.gwt.event.logical.shared.CloseEvent;
+import com.google.gwt.event.logical.shared.CloseHandler;
+import com.google.gwt.event.logical.shared.HasCloseHandlers;
+import com.google.gwt.event.logical.shared.HasSelectionHandlers;
+import com.google.gwt.event.logical.shared.SelectionEvent;
+import com.google.gwt.event.logical.shared.SelectionHandler;
+import com.google.gwt.event.shared.HandlerRegistration;
+import com.google.gwt.user.client.ui.Composite;
+import com.google.gwt.user.client.ui.Focusable;
+import com.google.gwt.user.client.ui.SuggestBox;
+import com.google.gwt.user.client.ui.SuggestBox.DefaultSuggestionDisplay;
+import com.google.gwt.user.client.ui.SuggestOracle.Suggestion;
+import com.google.gwtexpui.globalkey.client.NpTextBox;
+
+public class GroupReferenceBox extends Composite implements
+ LeafValueEditor<GroupReference>, HasSelectionHandlers<GroupReference>,
+ HasCloseHandlers<GroupReferenceBox>, Focusable {
+ private final DefaultSuggestionDisplay suggestions;
+ private final NpTextBox textBox;
+ private final AccountGroupSuggestOracle oracle;
+ private final SuggestBox suggestBox;
+
+ private boolean submitOnSelection;
+
+ public GroupReferenceBox() {
+ suggestions = new DefaultSuggestionDisplay();
+ textBox = new NpTextBox();
+ oracle = new AccountGroupSuggestOracle();
+ suggestBox = new SuggestBox( //
+ new RPCSuggestOracle(oracle), //
+ textBox, //
+ suggestions);
+ initWidget(suggestBox);
+
+ textBox.addKeyPressHandler(new KeyPressHandler() {
+ @Override
+ public void onKeyPress(KeyPressEvent event) {
+ submitOnSelection = false;
+
+ if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) {
+ if (suggestions.isSuggestionListShowing()) {
+ submitOnSelection = true;
+ } else {
+ SelectionEvent.fire(GroupReferenceBox.this, getValue());
+ }
+ }
+ }
+ });
+ suggestBox.addKeyUpHandler(new KeyUpHandler() {
+ @Override
+ public void onKeyUp(KeyUpEvent event) {
+ if (event.getNativeKeyCode() == KeyCodes.KEY_ESCAPE) {
+ suggestBox.setText("");
+ CloseEvent.fire(GroupReferenceBox.this, GroupReferenceBox.this);
+ }
+ }
+ });
+ suggestBox.addSelectionHandler(new SelectionHandler<Suggestion>() {
+ @Override
+ public void onSelection(SelectionEvent<Suggestion> event) {
+ if (submitOnSelection) {
+ submitOnSelection = false;
+ SelectionEvent.fire(GroupReferenceBox.this, getValue());
+ }
+ }
+ });
+ }
+
+ public void setVisibleLength(int len) {
+ textBox.setVisibleLength(len);
+ }
+
+ @Override
+ public HandlerRegistration addSelectionHandler(
+ SelectionHandler<GroupReference> handler) {
+ return addHandler(handler, SelectionEvent.getType());
+ }
+
+ @Override
+ public HandlerRegistration addCloseHandler(
+ CloseHandler<GroupReferenceBox> handler) {
+ return addHandler(handler, CloseEvent.getType());
+ }
+
+ @Override
+ public GroupReference getValue() {
+ String name = suggestBox.getText();
+ if (name != null && !name.isEmpty()) {
+ return new GroupReference(oracle.getUUID(name), name);
+ } else {
+ return null;
+ }
+ }
+
+ @Override
+ public void setValue(GroupReference value) {
+ suggestBox.setText(value != null ? value.getName() : "");
+ }
+
+ @Override
+ public int getTabIndex() {
+ return suggestBox.getTabIndex();
+ }
+
+ @Override
+ public void setTabIndex(int index) {
+ suggestBox.setTabIndex(index);
+ }
+
+ public void setFocus(boolean focused) {
+ suggestBox.setFocus(focused);
+ }
+
+ @Override
+ public void setAccessKey(char key) {
+ suggestBox.setAccessKey(key);
+ }
+}