package org.geogebra.web.web.gui.browser;
import java.util.ArrayList;
import java.util.List;
import org.geogebra.common.main.Localization;
import org.geogebra.common.move.operations.NetworkOperation;
import org.geogebra.common.move.views.BooleanRenderable;
import org.geogebra.web.html5.gui.FastButton;
import org.geogebra.web.html5.gui.FastClickHandler;
import org.geogebra.web.html5.gui.textbox.GTextBox;
import org.geogebra.web.html5.main.AppW;
import org.geogebra.web.web.gui.util.StandardButton;
import com.google.gwt.event.dom.client.BlurEvent;
import com.google.gwt.event.dom.client.BlurHandler;
import com.google.gwt.event.dom.client.FocusEvent;
import com.google.gwt.event.dom.client.FocusHandler;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.KeyDownEvent;
import com.google.gwt.event.dom.client.KeyDownHandler;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;
/**
* Panel for Search in GeoGebraTube
*
* @author Stefanie Bogner
*
*/
public class SearchPanel extends FlowPanel implements BooleanRenderable {
public interface SearchListener {
void onSearch(String query);
}
// private FlowPanel searchPanel;
private TextBox query;
private FastButton cancelButton;
private final List<SearchListener> listeners;
private NetworkOperation op;
protected final Localization loc;
public SearchPanel(AppW app) {
this.setStyleName("searchDiv");
this.listeners = new ArrayList<SearchListener>();
this.loc = app.getLocalization();
this.op = app.getNetworkOperation();
this.query = new GTextBox();
this.query.addStyleName("searchTextBox");
this.query.addKeyDownHandler(new KeyDownHandler() {
@Override
public void onKeyDown(final KeyDownEvent event) {
if (event.getNativeKeyCode() == KeyCodes.KEY_TAB) {
event.preventDefault();
return;
} else if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) {
doSearch();
}
}
});
this.query.addFocusHandler(new FocusHandler() {
@Override
public void onFocus(final FocusEvent event) {
onFocusQuery();
}
});
this.query.addBlurHandler(new BlurHandler() {
@Override
public void onBlur(final BlurEvent event) {
onBlurQuery();
}
});
StandardButton searchButton = new StandardButton(
BrowseResources.INSTANCE.search());
searchButton.addStyleName("searchButton");
searchButton.addFastClickHandler(new FastClickHandler() {
@Override
public void onClick(Widget source) {
doSearch();
}
});
this.cancelButton = new StandardButton(BrowseResources.INSTANCE.dialog_cancel());
this.cancelButton.addStyleName("cancelButton");
this.cancelButton.setVisible(false);
this.cancelButton.addFastClickHandler(new FastClickHandler() {
@Override
public void onClick(Widget source) {
onCancel();
}
});
this.add(searchButton);
this.add(this.query);
this.add(this.cancelButton);
if (this.op != null) {
this.op.getView().add(this);
}
setLabels();
}
void doSearch() {
fireSearchEvent();
if (this.query.getText().equals("")) {
this.cancelButton.setVisible(false);
}
this.query.setFocus(false);
}
void onCancel() {
this.query.setFocus(false);
this.cancelButton.setVisible(false);
this.query.setText("");
this.query.getElement().setAttribute("placeholder",loc.getMenu("search_geogebra_materials"));
}
void onFocusQuery() {
this.query.setFocus(true);
this.cancelButton.setVisible(true);
}
void onBlurQuery() {
if (this.query.getText().equals("")) {
this.query.setFocus(false);
this.cancelButton.setVisible(false);
}
}
private void fireSearchEvent() {
for (final SearchListener s : this.listeners) {
s.onSearch(this.query.getText());
}
}
@Override
public void render(boolean b) {
/*this.setText("Infotext" + (b ? "" : " (Offline)"));*/
}
// private void setText(String string) {
// info.setText(string);
// }
public void setLabels() {
this.query.getElement().setAttribute("placeholder", loc.getMenu("search_geogebra_materials"));
render(this.op.isOnline());
}
public boolean addSearchListener(SearchListener searchListener) {
return this.listeners.add(searchListener);
}
}