diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/search/DetailedSearchCriteriaWidget.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/search/DetailedSearchCriteriaWidget.java index 8dad169ce09e2015636c09a6f60b13498ed6e64f..fcb2c1612eca36ac039bf2c1dbec6d4b831568da 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/search/DetailedSearchCriteriaWidget.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/search/DetailedSearchCriteriaWidget.java @@ -56,6 +56,8 @@ abstract public class DetailedSearchCriteriaWidget extends VerticalPanel criteriaWidgets = new ArrayList<DetailedSearchCriterionWidget>(); } + protected abstract String getCriteriaLabel(); + protected abstract SearchCriteriaConnection getConnection(); protected abstract void setConnection(SearchCriteriaConnection connection); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/search/DetailedSearchMainCriteriaWidget.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/search/DetailedSearchMainCriteriaWidget.java index 5b525b561192111354d19f786319b91677731d0a..2c8f5f9cb344117240493c74fc4d344d81f1cc57 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/search/DetailedSearchMainCriteriaWidget.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/search/DetailedSearchMainCriteriaWidget.java @@ -42,6 +42,12 @@ public class DetailedSearchMainCriteriaWidget extends DetailedSearchCriteriaWidg viewContext.getMessage(Dict.MATCH_ANY)); } + @Override + protected String getCriteriaLabel() + { + return "Main Criteria"; + } + @Override protected void addInitialWidgets() { diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/search/DetailedSearchSubCriteriaWidget.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/search/DetailedSearchSubCriteriaWidget.java index 8998f04c74dd88503ce1e5359db21ce04d7237e0..9b17f0d108990856dc75ee1ef0c9be421b5bc3b4 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/search/DetailedSearchSubCriteriaWidget.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/search/DetailedSearchSubCriteriaWidget.java @@ -16,8 +16,6 @@ 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.application.IViewContext; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AssociatedEntityKind; @@ -44,10 +42,9 @@ public class DetailedSearchSubCriteriaWidget extends DetailedSearchCriteriaWidge } @Override - protected void addInitialWidgets() + protected String getCriteriaLabel() { - add(new Label(association.getDescription())); - super.addInitialWidgets(); + return association.getDescription(); } @Override diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/search/DetailedSearchWindow.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/search/DetailedSearchWindow.java index a5181449e0b45c3c70f8e1349039b6ced047b4cf..0e9eed376e7e0a883f45160c16684425d915f80a 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/search/DetailedSearchWindow.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/search/DetailedSearchWindow.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.Collections; 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.event.ButtonEvent; import com.extjs.gxt.ui.client.event.ComponentEvent; @@ -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.Listener; 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.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.ButtonBar; 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 ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync; @@ -39,37 +46,39 @@ public class DetailedSearchWindow extends Dialog { 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 WIDTH = 550; - private DetailedSearchCriteriaWidget criteriaWidget; + private final DetailedSearchCriteriaWidget criteriaWidget; - private List<DetailedSearchSubCriteriaWidget> subCriteriaWidgets = + private final List<DetailedSearchSubCriteriaWidget> subCriteriaWidgets = new ArrayList<DetailedSearchSubCriteriaWidget>(); private DetailedSearchToolbar updateListener; + private final TabPanel tabPanel; + public DetailedSearchWindow(final IViewContext<ICommonClientServiceAsync> viewContext, final EntityKind entityKind) { setSize(WIDTH, HEIGHT); setModal(true); - setScrollMode(Scroll.AUTOY); + setHeading("Sample Search Criteria"); setLayout(new FillLayout()); setResizable(false); - add(criteriaWidget = new DetailedSearchMainCriteriaWidget(viewContext, entityKind)); + criteriaWidget = new DetailedSearchMainCriteriaWidget(viewContext, entityKind); + add(createMainCriteriaPanel()); + add(tabPanel = new TabPanel()); for (AssociatedEntityKind association : getAssociatedEntityKinds(entityKind)) { DetailedSearchSubCriteriaWidget subCriteriaWidget = new DetailedSearchSubCriteriaWidget(viewContext, association); subCriteriaWidgets.add(subCriteriaWidget); - add(subCriteriaWidget); + addSearchWidgetTab(subCriteriaWidget); } - // new FitData(MARGIN)); - // new FitData(MARGIN)); addEnterListener(); final ButtonBar bar = getButtonBar(); bar.removeAll(); @@ -88,8 +97,7 @@ public class DetailedSearchWindow extends Dialog @Override public void componentSelected(ButtonEvent ce) { - criteriaWidget.reset(); - for (DetailedSearchCriteriaWidget widget : subCriteriaWidgets) + for (DetailedSearchCriteriaWidget widget : getAllWidgets()) { widget.reset(); } @@ -113,26 +121,59 @@ public class DetailedSearchWindow extends Dialog 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() { - criteriaWidget.addListener(KeyboardEvents.Enter, new Listener<ComponentEvent>() - { - public void handleEvent(ComponentEvent ce) + for (DetailedSearchCriteriaWidget widget : getAllWidgets()) + { + widget.addListener(KeyboardEvents.Enter, new Listener<ComponentEvent>() { - EventType type = ce.getType(); - switch (type.getEventCode()) + public void handleEvent(ComponentEvent ce) { - case KeyCodes.KEY_ENTER: - onSearch(); - break; - default: - break; - } + EventType type = ce.getType(); + switch (type.getEventCode()) + { + case KeyCodes.KEY_ENTER: + onSearch(); + break; + default: + break; + } - } + } - }); - // TODO improve + }); + } } @Override @@ -229,9 +270,8 @@ public class DetailedSearchWindow extends Dialog private static List<AssociatedEntityKind> getAssociatedEntityKinds(final EntityKind sourceEntity) { - // TODO 2011-05-06, Piotr Buczek: use - // AssociatedEntityKind.getAssociatedEntityKinds(sourceEntity) - // after extending data set search + // TODO 2011-05-06, Piotr Buczek: after extending data set search use the following + // return AssociatedEntityKind.getAssociatedEntityKinds(sourceEntity) if (sourceEntity == EntityKind.SAMPLE) { return AssociatedEntityKind.getAssociatedEntityKinds(sourceEntity);