/** * 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; }