示例#1
0
  /**
   * Add search widget to tab menu
   *
   * @param searchEvent event triggered when user click on search button
   * @param title displayed on button hover
   * @return ExtendedTextBox textbox widget
   */
  public ExtendedTextBox addSearchWidget(final PerunSearchEvent searchEvent, final String title) {

    final ExtendedTextBox textBox = new ExtendedTextBox();

    final CustomButton button = getPredefinedButton(ButtonType.SEARCH, title);

    // trigger search on ENTER
    textBox
        .getTextBox()
        .addKeyUpHandler(
            new KeyUpHandler() {
              public void onKeyUp(KeyUpEvent event) {
                if (!textBox.getTextBox().getText().trim().isEmpty()) {
                  button.setEnabled(true);
                  if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) {
                    searchEvent.searchFor(textBox.getTextBox().getText().trim());
                  }
                } else {
                  button.setEnabled(false);
                }
              }
            });
    textBox
        .getTextBox()
        .addBlurHandler(
            new BlurHandler() {
              @Override
              public void onBlur(BlurEvent event) {
                // fake some meaningless KeyUpEvent
                DomEvent.fireNativeEvent(
                    Document.get().createKeyUpEvent(false, false, false, false, KeyCodes.KEY_DOWN),
                    textBox.getTextBox());
              }
            });
    textBox
        .getTextBox()
        .addValueChangeHandler(
            new ValueChangeHandler<String>() {
              @Override
              public void onValueChange(ValueChangeEvent<String> event) {
                // fake some meaningless KeyUpEvent
                DomEvent.fireNativeEvent(
                    Document.get().createKeyUpEvent(false, false, false, false, KeyCodes.KEY_DOWN),
                    textBox.getTextBox());
              }
            });

    // button click triggers action
    button.addClickHandler(
        new ClickHandler() {
          @Override
          public void onClick(ClickEvent clickEvent) {
            if (UiElements.searchStingCantBeEmpty(textBox.getTextBox().getText().trim())) {
              searchEvent.searchFor(textBox.getTextBox().getText().trim());
            }
          }
        });

    // button is active only if there is "search string"
    button.setEnabled(false);

    this.addWidget(textBox);
    this.addWidget(button);

    // always focus search widget
    Scheduler.get()
        .scheduleDeferred(
            new Command() {
              @Override
              public void execute() {
                textBox.getTextBox().setFocus(true);
              }
            });

    return textBox;
  }