Skip to content
Snippets Groups Projects
Commit 642671f2 authored by buczekp's avatar buczekp
Browse files

[LMS-2117] improved advanced search UI

SVN: 21165
parent 94c3d96c
No related branches found
No related tags found
No related merge requests found
...@@ -56,6 +56,8 @@ abstract public class DetailedSearchCriteriaWidget extends VerticalPanel ...@@ -56,6 +56,8 @@ abstract public class DetailedSearchCriteriaWidget extends VerticalPanel
criteriaWidgets = new ArrayList<DetailedSearchCriterionWidget>(); criteriaWidgets = new ArrayList<DetailedSearchCriterionWidget>();
} }
protected abstract String getCriteriaLabel();
protected abstract SearchCriteriaConnection getConnection(); protected abstract SearchCriteriaConnection getConnection();
protected abstract void setConnection(SearchCriteriaConnection connection); protected abstract void setConnection(SearchCriteriaConnection connection);
......
...@@ -42,6 +42,12 @@ public class DetailedSearchMainCriteriaWidget extends DetailedSearchCriteriaWidg ...@@ -42,6 +42,12 @@ public class DetailedSearchMainCriteriaWidget extends DetailedSearchCriteriaWidg
viewContext.getMessage(Dict.MATCH_ANY)); viewContext.getMessage(Dict.MATCH_ANY));
} }
@Override
protected String getCriteriaLabel()
{
return "Main Criteria";
}
@Override @Override
protected void addInitialWidgets() protected void addInitialWidgets()
{ {
......
...@@ -16,8 +16,6 @@ ...@@ -16,8 +16,6 @@
package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.search; package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.search;
import com.extjs.gxt.ui.client.widget.Label;
import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync; import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync;
import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AssociatedEntityKind; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AssociatedEntityKind;
...@@ -44,10 +42,9 @@ public class DetailedSearchSubCriteriaWidget extends DetailedSearchCriteriaWidge ...@@ -44,10 +42,9 @@ public class DetailedSearchSubCriteriaWidget extends DetailedSearchCriteriaWidge
} }
@Override @Override
protected void addInitialWidgets() protected String getCriteriaLabel()
{ {
add(new Label(association.getDescription())); return association.getDescription();
super.addInitialWidgets();
} }
@Override @Override
......
...@@ -4,6 +4,7 @@ import java.util.ArrayList; ...@@ -4,6 +4,7 @@ import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import com.extjs.gxt.ui.client.Style.HideMode;
import com.extjs.gxt.ui.client.Style.Scroll; import com.extjs.gxt.ui.client.Style.Scroll;
import com.extjs.gxt.ui.client.event.ButtonEvent; import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.ComponentEvent; import com.extjs.gxt.ui.client.event.ComponentEvent;
...@@ -11,10 +12,16 @@ import com.extjs.gxt.ui.client.event.EventType; ...@@ -11,10 +12,16 @@ import com.extjs.gxt.ui.client.event.EventType;
import com.extjs.gxt.ui.client.event.KeyboardEvents; import com.extjs.gxt.ui.client.event.KeyboardEvents;
import com.extjs.gxt.ui.client.event.Listener; import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.event.SelectionListener; import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.util.Margins;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.Dialog; import com.extjs.gxt.ui.client.widget.Dialog;
import com.extjs.gxt.ui.client.widget.TabItem;
import com.extjs.gxt.ui.client.widget.TabPanel;
import com.extjs.gxt.ui.client.widget.button.Button; import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.button.ButtonBar; import com.extjs.gxt.ui.client.widget.button.ButtonBar;
import com.extjs.gxt.ui.client.widget.layout.FillLayout; import com.extjs.gxt.ui.client.widget.layout.FillLayout;
import com.extjs.gxt.ui.client.widget.layout.FitData;
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
import com.google.gwt.event.dom.client.KeyCodes; import com.google.gwt.event.dom.client.KeyCodes;
import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync; import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync;
...@@ -39,37 +46,39 @@ public class DetailedSearchWindow extends Dialog ...@@ -39,37 +46,39 @@ public class DetailedSearchWindow extends Dialog
{ {
public static final String SEARCH_BUTTON_ID = DataSetSearchHitGrid.BROWSER_ID + "search_button"; public static final String SEARCH_BUTTON_ID = DataSetSearchHitGrid.BROWSER_ID + "search_button";
// private static final int MARGIN = 5; private static final Margins MARGINS = new Margins(5, 10, 5, 10);
private static final int HEIGHT = 400; private static final int HEIGHT = 400;
private static final int WIDTH = 550; private static final int WIDTH = 550;
private DetailedSearchCriteriaWidget criteriaWidget; private final DetailedSearchCriteriaWidget criteriaWidget;
private List<DetailedSearchSubCriteriaWidget> subCriteriaWidgets = private final List<DetailedSearchSubCriteriaWidget> subCriteriaWidgets =
new ArrayList<DetailedSearchSubCriteriaWidget>(); new ArrayList<DetailedSearchSubCriteriaWidget>();
private DetailedSearchToolbar updateListener; private DetailedSearchToolbar updateListener;
private final TabPanel tabPanel;
public DetailedSearchWindow(final IViewContext<ICommonClientServiceAsync> viewContext, public DetailedSearchWindow(final IViewContext<ICommonClientServiceAsync> viewContext,
final EntityKind entityKind) final EntityKind entityKind)
{ {
setSize(WIDTH, HEIGHT); setSize(WIDTH, HEIGHT);
setModal(true); setModal(true);
setScrollMode(Scroll.AUTOY); setHeading("Sample Search Criteria");
setLayout(new FillLayout()); setLayout(new FillLayout());
setResizable(false); setResizable(false);
add(criteriaWidget = new DetailedSearchMainCriteriaWidget(viewContext, entityKind)); criteriaWidget = new DetailedSearchMainCriteriaWidget(viewContext, entityKind);
add(createMainCriteriaPanel());
add(tabPanel = new TabPanel());
for (AssociatedEntityKind association : getAssociatedEntityKinds(entityKind)) for (AssociatedEntityKind association : getAssociatedEntityKinds(entityKind))
{ {
DetailedSearchSubCriteriaWidget subCriteriaWidget = DetailedSearchSubCriteriaWidget subCriteriaWidget =
new DetailedSearchSubCriteriaWidget(viewContext, association); new DetailedSearchSubCriteriaWidget(viewContext, association);
subCriteriaWidgets.add(subCriteriaWidget); subCriteriaWidgets.add(subCriteriaWidget);
add(subCriteriaWidget); addSearchWidgetTab(subCriteriaWidget);
} }
// new FitData(MARGIN));
// new FitData(MARGIN));
addEnterListener(); addEnterListener();
final ButtonBar bar = getButtonBar(); final ButtonBar bar = getButtonBar();
bar.removeAll(); bar.removeAll();
...@@ -88,8 +97,7 @@ public class DetailedSearchWindow extends Dialog ...@@ -88,8 +97,7 @@ public class DetailedSearchWindow extends Dialog
@Override @Override
public void componentSelected(ButtonEvent ce) public void componentSelected(ButtonEvent ce)
{ {
criteriaWidget.reset(); for (DetailedSearchCriteriaWidget widget : getAllWidgets())
for (DetailedSearchCriteriaWidget widget : subCriteriaWidgets)
{ {
widget.reset(); widget.reset();
} }
...@@ -113,26 +121,59 @@ public class DetailedSearchWindow extends Dialog ...@@ -113,26 +121,59 @@ public class DetailedSearchWindow extends Dialog
createHelpPageIdentifier(entityKind)); createHelpPageIdentifier(entityKind));
} }
private ContentPanel createMainCriteriaPanel()
{
final ContentPanel mainPanel = new ContentPanel();
mainPanel.setHeaderVisible(false);
mainPanel.setLayout(new FitLayout());
mainPanel.setScrollMode(Scroll.AUTOY);
mainPanel.add(criteriaWidget, new FitData(MARGINS));
return mainPanel;
}
private void addSearchWidgetTab(final DetailedSearchSubCriteriaWidget searchWidget)
{
final TabItem tab = new TabItem();
tab.setClosable(false);
tab.setLayout(new FitLayout());
tab.setScrollMode(Scroll.AUTOY);
tab.setText(searchWidget.getCriteriaLabel());
tab.add(searchWidget, new FitData(MARGINS));
tab.setHideMode(HideMode.OFFSETS);
tabPanel.add(tab);
}
/** @return list containing main widget and all sub criteria widgets */
private List<DetailedSearchCriteriaWidget> getAllWidgets()
{
List<DetailedSearchCriteriaWidget> result =
new ArrayList<DetailedSearchCriteriaWidget>(subCriteriaWidgets);
result.add(criteriaWidget);
return result;
}
private void addEnterListener() private void addEnterListener()
{ {
criteriaWidget.addListener(KeyboardEvents.Enter, new Listener<ComponentEvent>() for (DetailedSearchCriteriaWidget widget : getAllWidgets())
{ {
public void handleEvent(ComponentEvent ce) widget.addListener(KeyboardEvents.Enter, new Listener<ComponentEvent>()
{ {
EventType type = ce.getType(); public void handleEvent(ComponentEvent ce)
switch (type.getEventCode())
{ {
case KeyCodes.KEY_ENTER: EventType type = ce.getType();
onSearch(); switch (type.getEventCode())
break; {
default: case KeyCodes.KEY_ENTER:
break; onSearch();
} break;
default:
break;
}
} }
}); });
// TODO improve }
} }
@Override @Override
...@@ -229,9 +270,8 @@ public class DetailedSearchWindow extends Dialog ...@@ -229,9 +270,8 @@ public class DetailedSearchWindow extends Dialog
private static List<AssociatedEntityKind> getAssociatedEntityKinds(final EntityKind sourceEntity) private static List<AssociatedEntityKind> getAssociatedEntityKinds(final EntityKind sourceEntity)
{ {
// TODO 2011-05-06, Piotr Buczek: use // TODO 2011-05-06, Piotr Buczek: after extending data set search use the following
// AssociatedEntityKind.getAssociatedEntityKinds(sourceEntity) // return AssociatedEntityKind.getAssociatedEntityKinds(sourceEntity)
// after extending data set search
if (sourceEntity == EntityKind.SAMPLE) if (sourceEntity == EntityKind.SAMPLE)
{ {
return AssociatedEntityKind.getAssociatedEntityKinds(sourceEntity); return AssociatedEntityKind.getAssociatedEntityKinds(sourceEntity);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment