package org.ovirt.engine.ui.webadmin.section.main.view;
import org.ovirt.engine.ui.webadmin.ApplicationConstants;
import org.ovirt.engine.ui.webadmin.ApplicationResources;
import org.ovirt.engine.ui.webadmin.idhandler.ElementIdHandler;
import org.ovirt.engine.ui.webadmin.idhandler.WithElementId;
import org.ovirt.engine.ui.webadmin.section.main.presenter.SearchPanelPresenterWidget;
import org.ovirt.engine.ui.webadmin.view.AbstractView;
import org.ovirt.engine.ui.webadmin.widget.autocomplete.SearchSuggestBox;
import org.ovirt.engine.ui.webadmin.widget.autocomplete.SearchSuggestOracle;
import org.ovirt.engine.ui.webadmin.widget.autocomplete.SearchSuggestionDisplay;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.dom.client.HasKeyDownHandlers;
import com.google.gwt.resources.client.CssResource;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.InlineLabel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.inject.Inject;
public class SearchPanelView extends AbstractView implements SearchPanelPresenterWidget.ViewDef {
interface ViewUiBinder extends UiBinder<Widget, SearchPanelView> {
ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class);
}
interface ViewIdHandler extends ElementIdHandler<SearchPanelView> {
ViewIdHandler idHandler = GWT.create(ViewIdHandler.class);
}
@UiField
InlineLabel searchLabel;
@UiField
Label searchStringPrefixLabel;
@UiField
VerticalPanel searchBoxPanel;
@UiField
FlowPanel searchBoxBookmark;
@UiField
HTML searchBoxLeft;
@UiField
HTML searchBoxRight;
@UiField(provided = true)
@WithElementId
final SearchSuggestBox searchStringInput;
@WithElementId
@UiField
Image bookmarkButton;
@WithElementId
@UiField
Image searchButton;
@UiField
Style style;
private final int SEARCH_PANEL_WIDTH = 1000;
private final SearchSuggestOracle oracle;
@Inject
public SearchPanelView(ApplicationConstants constants, ApplicationResources applicationResources) {
// Define the oracle that finds suggestions
oracle = new SearchSuggestOracle();
// Create suggest box widget
searchStringInput = new SearchSuggestBox(oracle);
searchStringInput.ensureDebugId("searchSuggestBox");
searchStringInput.setAutoSelectEnabled(false);
initWidget(ViewUiBinder.uiBinder.createAndBindUi(this));
localize(constants);
searchStringInput.setSearchBoxPanel(searchBoxPanel);
bookmarkButton.setResource(applicationResources.bookmarkImage());
searchButton.setResource(applicationResources.searchButtonImage());
ViewIdHandler.idHandler.generateAndSetIds(this);
}
void localize(ApplicationConstants constants) {
searchLabel.setText(constants.searchLabel());
}
@Override
public String getSearchString() {
return searchStringInput.getText();
}
@Override
public String getSearchPrefixString() {
return searchStringPrefixLabel.getText();
}
@Override
public void setSearchString(String searchString) {
searchStringInput.setText(searchString);
}
@Override
public void setSearchStringPrefix(String searchStringPrefix) {
searchStringPrefixLabel.setText(searchStringPrefix);
oracle.setSearchPrefix(searchStringPrefix);
// Set search input width
int searchStringInputWidth = SEARCH_PANEL_WIDTH - searchStringPrefixLabel.getElement().getOffsetWidth();
searchStringInput.getElement().getStyle().setWidth(searchStringInputWidth, Unit.PX);
}
@Override
public void setHasSearchStringPrefix(boolean hasSearchStringPrefix) {
searchStringPrefixLabel.setVisible(hasSearchStringPrefix);
}
@Override
public void setHasSelectedTags(boolean hasSelectedTags) {
if (hasSelectedTags) {
searchBoxLeft.addStyleName(style.searchBoxLeft_HasSelectedTags());
searchBoxRight.addStyleName(style.searchBoxRight_HasSelectedTags());
searchBoxPanel.addStyleName(style.searchBoxPanel_HasSelectedTags());
searchBoxBookmark.addStyleName(style.searchBoxBookmark_HasSelectedTags());
}
else {
searchBoxLeft.setStyleName(style.searchBoxLeft());
searchBoxRight.setStyleName(style.searchBoxRight());
searchBoxPanel.setStyleName(style.searchBoxPanel());
searchBoxBookmark.setStyleName(style.searchBoxBookmark());
}
}
@Override
public HasClickHandlers getBookmarkButton() {
return bookmarkButton;
}
@Override
public HasClickHandlers getSearchButton() {
return searchButton;
}
@Override
public HasKeyDownHandlers getSearchInputHandlers() {
return searchStringInput;
}
@Override
public void hideSuggestionBox() {
((SearchSuggestionDisplay) searchStringInput.getSuggestionDisplay()).hideSuggestions();
}
protected interface Style extends CssResource {
String searchBoxLeft();
String searchBoxLeft_HasSelectedTags();
String searchBoxRight();
String searchBoxRight_HasSelectedTags();
String searchBoxPanel();
String searchBoxPanel_HasSelectedTags();
String searchBoxBookmark();
String searchBoxBookmark_HasSelectedTags();
}
}