// PathVisio,
// a tool for data visualization and analysis using Biological Pathways
// Copyright 2006-2011 BiGCaT Bioinformatics
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
package org.pathvisio.wikipathways.client;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.DockPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.KeyboardListenerAdapter;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;
/**
* Base class for the search panel. This panel displays a single text box and search button.
* Subclasses can implement {@link #createOptionsPanel()} and {@link #createInfoPanel()} to
* add custom widgets.
* @author thomas
*/
public class SearchPanel extends DockPanel {
private TextBox searchText;
private WikiPathwaysSearch search;
public SearchPanel(final WikiPathwaysSearch search) {
this.search = search;
setStylePrimaryName(STYLE_SEARCH_PANEL);
//Add info/example panel
Widget info = createInfoPanel();
info.setStylePrimaryName(STYLE_SEARCH_INFO);
add(info, NORTH);
//Search panel
Panel searchPanel = new HorizontalPanel();
searchPanel.setStylePrimaryName(STYLE_SEARCH_CONTAINER);
//Add search text
searchText = createSearchText();
searchText.setStylePrimaryName(STYLE_SEARCH_TEXT);
searchPanel.add(searchText);
//Add options panel
Widget options = createOptionsPanel();
if(options != null) {
options.setStylePrimaryName(STYLE_SEARCH_OPTIONS);
searchPanel.add(options);
}
//Add search button
Button searchButton = new Button(LABEL_SEARCH_BUTTON);
searchButton.setStylePrimaryName(STYLE_SEARCH_BUTTON);
searchButton.addClickListener(new ClickListener() {
public void onClick(Widget sender) {
search.search(getQuery());
}
});
searchPanel.add(searchButton);
add(searchPanel, CENTER);
}
/**
* Create a panel that will be displayed above the
* search box and provides info/examples.
*/
protected Widget createInfoPanel() {
return new HTML(
"Search by keyword. Example: apoptosis"
);
}
/**
* Override this method to create an optional
* panel between the search text and button.
* Default implementation returns null.
*/
protected Widget createOptionsPanel() {
return null;
}
/**
* Creates the search text box, including the necessary
* keyboard listeners.
*/
protected TextBox createSearchText() {
final TextBox searchText = new TextBox();
searchText.setFocus(true);
searchText.addKeyboardListener(new KeyboardListenerAdapter() {
public void onKeyDown(Widget sender, char keyCode, int modifiers) {
if(keyCode == KEY_ENTER) {
search.search(getQuery());
}
}
});
return searchText;
}
/**
* Get the query based on the current widget states. Default
* implementation adds the text in the search box to the
* query.
* Subclasses may override this method to add additional information
* to the query or change the query type.
*/
protected Query getQuery() {
return new Query(Query.TYPE_TEXT, searchText.getText());
}
/**
* Set the widget states to reflect the given query.
* Subclasses may override this method to set the state of
* custom widgets
*/
protected void setQuery(Query query) {
searchText.setText(query.getField(Query.FIELD_TEXT));
}
protected TextBox getSearchText() {
return searchText;
}
protected WikiPathwaysSearch getSearchEngine() {
return search;
}
private static final String LABEL_SEARCH_BUTTON = "Search";
private static final String STYLE_SEARCH_CONTAINER = "searchpanel-container";
private static final String STYLE_SEARCH_TEXT = "searchpanel-text";
private static final String STYLE_SEARCH_OPTIONS = "searchpanel-options";
private static final String STYLE_SEARCH_BUTTON = "searchpanel-button";
private static final String STYLE_SEARCH_PANEL = "searchpanel";
private static final String STYLE_SEARCH_INFO = "searchpanel-info";
}