package org.ovirt.engine.ui.webadmin.section.main.view;
import org.ovirt.engine.ui.common.idhandler.ElementIdHandler;
import org.ovirt.engine.ui.common.idhandler.WithElementId;
import org.ovirt.engine.ui.common.view.AbstractView;
import org.ovirt.engine.ui.uicommonweb.models.CommonModel;
import org.ovirt.engine.ui.webadmin.section.main.presenter.SearchPanelPresenterWidget;
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.Element;
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.FocusPanel;
import com.google.gwt.user.client.ui.HorizontalPanel;
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);
}
protected interface Style extends CssResource {
String searchBoxPanel();
String searchBoxPanel_HasSelectedTags();
String searchBoxClear();
String searchBoxClear_HasSelectedTags();
}
@UiField
Label searchStringPrefixLabel;
@UiField
VerticalPanel searchBoxPanel;
@UiField
FocusPanel searchBoxClear;
@UiField
@WithElementId("bookmarkButton")
FocusPanel searchBoxBookmark;
@UiField
@WithElementId("searchButton")
FocusPanel searchBoxSearch;
@UiField(provided = true)
@WithElementId
final SearchSuggestBox searchStringInput;
@UiField
HorizontalPanel searchPanelContainer;
@UiField
HorizontalPanel searchBoxPanelContainer;
@UiField
Style style;
private final int SEARCH_PANEL_WIDTH = 1000;
private final SearchSuggestOracle oracle;
@Inject
public SearchPanelView() {
// Define the oracle that finds suggestions
oracle = new SearchSuggestOracle();
// Create suggest box widget
searchStringInput = new SearchSuggestBox(oracle);
searchStringInput.ensureDebugId("searchSuggestBox"); //$NON-NLS-1$
searchStringInput.setAutoSelectEnabled(false);
initWidget(ViewUiBinder.uiBinder.createAndBindUi(this));
addStyles();
searchStringInput.setSearchBoxPanel(searchBoxPanel);
searchPanelContainer.setCellWidth(searchBoxPanel, "1000px"); //$NON-NLS-1$
ViewIdHandler.idHandler.generateAndSetIds(this);
}
void addStyles() {
Element postfixElement = searchBoxPanelContainer.getElement().getElementsByTagName("td").getItem(2); //$NON-NLS-1$
postfixElement.getStyle().setWidth(100, Unit.PCT);
}
@Override
public String getSearchString() {
return searchStringInput.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) {
searchBoxPanel.addStyleName(style.searchBoxPanel_HasSelectedTags());
searchBoxClear.addStyleName(style.searchBoxClear_HasSelectedTags());
}
else {
searchBoxPanel.setStyleName(style.searchBoxPanel());
searchBoxClear.setStyleName(style.searchBoxClear());
}
}
@Override
public HasClickHandlers getBookmarkButton() {
return searchBoxBookmark;
}
@Override
public HasClickHandlers getClearButton() {
return searchBoxClear;
}
@Override
public HasClickHandlers getSearchButton() {
return searchBoxSearch;
}
@Override
public HasKeyDownHandlers getSearchInputHandlers() {
return searchStringInput;
}
@Override
public void hideSuggestionBox() {
((SearchSuggestionDisplay) searchStringInput.getSuggestionDisplay()).hideSuggestions();
}
@Override
public void setCommonModel(CommonModel commonModel) {
oracle.setCommonModel(commonModel);
}
@Override
public void enableSearchBar(boolean status) {
searchStringInput.setEnabled(status);
}
}