diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ScreeningDisplaySettingsManager.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ScreeningDisplaySettingsManager.java index fa3c8638ee4c0b8bb175d59d6b0954702540a150..319b3a8eff5d0e57cffe8d53b2fd6c94e84b03dc 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ScreeningDisplaySettingsManager.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ScreeningDisplaySettingsManager.java @@ -17,7 +17,9 @@ package ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application; import java.util.Arrays; +import java.util.HashMap; import java.util.List; +import java.util.Map; import ch.systemsx.cisd.common.shared.basic.utils.StringUtils; import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; @@ -81,4 +83,20 @@ public class ScreeningDisplaySettingsManager { return screeningSettings.getDefaultAnalysisProcedure(); } + + @SuppressWarnings("deprecation") + public Map<String, String> getDefaultTransformationsForChannels(String displayTypeId) + { + Map<String, String> transformations = + screeningSettings.getDefaultTransformations().get(displayTypeId); + + if (transformations == null) + { + transformations = new HashMap<String, String>(); + screeningSettings.getDefaultTransformations().put(displayTypeId, transformations); + } + + return transformations; + } + } diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ChannelChooser.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ChannelChooser.java index 1262833d15b79527dbf27f69e94895ce98641f63..d6151b9dc4ead32c2d5809803027eb345bc1bbfa 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ChannelChooser.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ChannelChooser.java @@ -79,6 +79,8 @@ class ChannelChooser private List<String> basicChannelCodes; + private String imageTransformationCodeOrNull; + public ChannelChooser(LogicalImageReference basicImage, IChanneledViewerFactory viewerFactory, IDefaultChannelState defaultChannelState) { @@ -102,11 +104,9 @@ class ChannelChooser /** Refreshes the displayed images, but not the rest of the GUI */ public void refresh() { - // TODO 2011-09-13, Tomasz Pylak: add transformation code for single channel if chosen - String imageTransformationCode = null; LogicalImageChannelsReference state = new LogicalImageChannelsReference(basicImage, basicChannelCodes, - imageTransformationCode, selectedOverlayChannels); + imageTransformationCodeOrNull, selectedOverlayChannels); Widget view = viewerFactory.create(state); imageContainer.removeAll(); imageContainer.add(view); @@ -124,9 +124,10 @@ class ChannelChooser } // basic channels List<String> channels = basicImage.getChannelsCodes(); + if (channels.size() > 1) { - Widget channelChooserWithLabel = createBasicChannelChooser(channels); + Widget channelChooserWithLabel = createBasicChannelChooser(channels, viewContext); container.add(channelChooserWithLabel); } // images @@ -271,17 +272,21 @@ class ChannelChooser channelCode); } - private Widget createBasicChannelChooser(List<String> channels) + private Widget createBasicChannelChooser(List<String> channels, IViewContext<?> viewContext) { final ChannelChooserPanel channelChooser = - new ChannelChooserPanel(defaultChannelState, channels, basicChannelCodes); + new ChannelChooserPanel(viewContext, defaultChannelState, channels, + basicChannelCodes, basicImage.getImagetParameters()); channelChooser .addSelectionChangedListener(new ChannelChooserPanel.ChannelSelectionListener() { - public void selectionChanged(List<String> newlySelectedChannels) + public void selectionChanged(List<String> newlySelectedChannels, + @SuppressWarnings("hiding") String imageTransformationCodeOrNull) { basicChannelCodes = newlySelectedChannels; + ChannelChooser.this.imageTransformationCodeOrNull = + imageTransformationCodeOrNull; refresh(); } }); diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ChannelChooserPanel.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ChannelChooserPanel.java index 1c92c18e5cbe9982a3095d9095e46ace1e15f523..fdeafed9432538ca9c2d1aae901e263701a0f67f 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ChannelChooserPanel.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ChannelChooserPanel.java @@ -18,7 +18,11 @@ package ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application. import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; +import java.util.LinkedHashSet; import java.util.List; +import java.util.Map; +import java.util.Set; import com.extjs.gxt.ui.client.event.BaseEvent; import com.extjs.gxt.ui.client.event.Events; @@ -28,8 +32,17 @@ import com.extjs.gxt.ui.client.widget.form.CheckBox; import com.extjs.gxt.ui.client.widget.form.CheckBoxGroup; import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction; import com.extjs.gxt.ui.client.widget.form.Field; +import com.extjs.gxt.ui.client.widget.form.LabelField; +import com.extjs.gxt.ui.client.widget.form.MultiField; import com.extjs.gxt.ui.client.widget.form.SimpleComboBox; - +import com.extjs.gxt.ui.client.widget.form.SimpleComboValue; +import com.google.gwt.user.client.ui.Widget; + +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.LabeledItem; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.SimpleModelComboBox; +import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IMessageProvider; +import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ImageDatasetParameters; +import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ImageTransformationInfo; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ScreeningConstants; /** @@ -39,27 +52,50 @@ import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ScreeningConst */ public class ChannelChooserPanel extends LayoutContainer { + private static class ComboBoxGroup extends MultiField<Widget> + { + private ComboBoxGroup() + { + super(); + + this.setSpacing(5); + } + } /** * Can be used from external classes wishing to be notified when the channel selection changes. */ public static interface ChannelSelectionListener { - void selectionChanged(List<String> channels); + void selectionChanged(List<String> channels, String imageTransformationCodeOrNull); } + private static final String DEFAULT_CODE = "$DEFAULT$"; + + private static final LabeledItem<ImageTransformationInfo> DEFAULT_TRANSFORMATION = + convertToLabeledItem(new ImageTransformationInfo(DEFAULT_CODE, "Default", + "Default transformation or original picture if not tranformed.", "", false)); + + private final IMessageProvider messageProvider; + private IDefaultChannelState defaultChannelState; private CheckBoxGroup channelsCheckBoxGroup; private SimpleComboBox<String> channelsComboBox; + private SimpleModelComboBox<ImageTransformationInfo> transformationsComboBox; + + private LabelField adjustLabel = new LabelField("Adjust:"); + + private Map<String, Set<ImageTransformationInfo>> transformationsForChannels = + new HashMap<String, Set<ImageTransformationInfo>>(); + private List<ChannelSelectionListener> channelSelectionListeners = new ArrayList<ChannelSelectionListener>(); private final Listener<BaseEvent> selectionChangeListener = new Listener<BaseEvent>() { - public void handleEvent(BaseEvent be) { selectionChanged(); @@ -67,26 +103,55 @@ public class ChannelChooserPanel extends LayoutContainer }; - public ChannelChooserPanel(IDefaultChannelState defChannelState) + private final Listener<BaseEvent> transformationSelection = new Listener<BaseEvent>() + { + public void handleEvent(BaseEvent be) + { + defaultChannelState.setDefaultTransformation(getSelectedValues().get(0), + transformationsComboBox.getSimpleValue().getItem().getCode()); + notifySelectionListeners(getSelectedValues(), tryGetSelectedTransformationCode()); + } + + }; + + public ChannelChooserPanel(IMessageProvider messageProvider, + IDefaultChannelState defChannelState) { - this(defChannelState, Collections.<String> emptyList(), Collections.<String> emptyList()); + this(messageProvider, defChannelState, Collections.<String> emptyList(), Collections + .<String> emptyList(), null); } - public ChannelChooserPanel(IDefaultChannelState defChannelState, List<String> names, - List<String> selectedChannelsOrNull) + public ChannelChooserPanel(IMessageProvider messageProvider, + IDefaultChannelState defChannelState, List<String> names, + List<String> selectedChannelsOrNull, ImageDatasetParameters imageDatasetParameters) { + this.messageProvider = messageProvider; this.defaultChannelState = defChannelState; setAutoHeight(true); setAutoWidth(true); channelsComboBox = createChannelsComboBox(); - add(channelsComboBox); + + transformationsComboBox = + new SimpleModelComboBox<ImageTransformationInfo>(this.messageProvider, + new ArrayList<LabeledItem<ImageTransformationInfo>>(), null); + transformationsComboBox.setTriggerAction(TriggerAction.ALL); + transformationsComboBox.setAllowBlank(false); + transformationsComboBox.setEditable(false); + transformationsComboBox.addListener(Events.SelectionChange, transformationSelection); + + ComboBoxGroup group = new ComboBoxGroup(); + group.add(channelsComboBox); + group.add(adjustLabel); + group.add(transformationsComboBox); + + add(group); channelsCheckBoxGroup = createCheckBoxGroup(); add(channelsCheckBoxGroup); - addChannels(names); + addChannels(names, imageDatasetParameters); updateChannelSelection(selectedChannelsOrNull); } @@ -102,13 +167,12 @@ public class ChannelChooserPanel extends LayoutContainer return comboBox; } - private CheckBoxGroup createCheckBoxGroup() { CheckBoxGroup group = new CheckBoxGroup(); return group; - } + } /** * adds a {@link ChannelSelectionListener} that will be receiving notifications when the @@ -122,9 +186,9 @@ public class ChannelChooserPanel extends LayoutContainer /** * a quite specific method, currently only needed by the well-search grid. */ - public void addCodes(List<String> codes) + public void addCodes(ImageDatasetParameters imageParameters) { - addChannels(codes); + addChannels(imageParameters.getChannelsCodes(), imageParameters); updateChannelSelection(null); } @@ -174,7 +238,7 @@ public class ChannelChooserPanel extends LayoutContainer return channels; } - private void addChannels(List<String> codes) + private void addChannels(List<String> codes, ImageDatasetParameters imageParameters) { addCodeToComboBox(ScreeningConstants.MERGED_CHANNELS); if (codes == null || codes.isEmpty()) @@ -186,6 +250,20 @@ public class ChannelChooserPanel extends LayoutContainer for (String code : codes) { boolean codeAdded = addCodeToComboBox(code); + + if (imageParameters != null) + { + Set<ImageTransformationInfo> transformationsForChannel = + transformationsForChannels.get(code); + if (transformationsForChannel == null) + { + transformationsForChannel = new LinkedHashSet<ImageTransformationInfo>(); + transformationsForChannels.put(code, transformationsForChannel); + } + transformationsForChannel.addAll(imageParameters + .getAvailableImageTransformationsFor(code)); + } + if (codeAdded) { // also add a checkBockbox for the channel @@ -227,8 +305,8 @@ public class ChannelChooserPanel extends LayoutContainer } channelsComboBox.setSimpleValue(comboBoxValue); - initializeCheckBoxValues(channels); + updateTransformationComboBox(); } private void initializeCheckBoxValues(List<String> selectedChannels) @@ -254,14 +332,36 @@ public class ChannelChooserPanel extends LayoutContainer channelsCheckBoxGroup.setVisible(showCheckBoxGroup); ensureAtLeastOneCheckboxChecked(); - notifySelectionListeners(selection); + updateTransformationComboBox(); + + notifySelectionListeners(selection, tryGetSelectedTransformationCode()); } - private void notifySelectionListeners(List<String> selection) + public String tryGetSelectedTransformationCode() + { + if (transformationsComboBox.isVisible()) + { + String code = + transformationsComboBox.getSelection().get(0).getValue().getItem().getCode(); + + if (DEFAULT_CODE.equals(code)) + { + return null; + } else + { + return code; + } + } + + return null; + } + + private void notifySelectionListeners(List<String> selection, + String imageTransformationCodeOrNull) { for (ChannelSelectionListener listener : channelSelectionListeners) { - listener.selectionChanged(selection); + listener.selectionChanged(selection, imageTransformationCodeOrNull); } } @@ -340,4 +440,92 @@ public class ChannelChooserPanel extends LayoutContainer } return result; } + + private void updateTransformationComboBox() + { + List<String> selectedValues = getSelectedValues(); + + transformationsComboBox.removeAll(); + transformationsComboBox.clearState(); + + List<LabeledItem<ImageTransformationInfo>> model = + new ArrayList<LabeledItem<ImageTransformationInfo>>(); + Set<ImageTransformationInfo> infos = null; + if (selectedValues.size() == 1 + && (infos = transformationsForChannels.get(selectedValues.get(0))) != null + && infos.size() > 0) + { + model.add(DEFAULT_TRANSFORMATION); + for (ImageTransformationInfo imageTransformationInfo : infos) + { + model.add(convertToLabeledItem(imageTransformationInfo)); + } + if (model.size() <= 1) + { + transformationsComboBox.setVisible(false); + adjustLabel.setVisible(false); + return; + } + transformationsComboBox.add(model); + setTransformationsVisible(true); + + selectTransformation(selectedValues.get(0)); + } else + { + setTransformationsVisible(false); + } + } + + private void setTransformationsVisible(boolean visible) + { + transformationsComboBox.setVisible(visible); + adjustLabel.setVisible(visible); + } + + private void selectTransformation(String channelCode) + { + boolean selected = false; + String code = defaultChannelState.tryGetDefaultTransformation(channelCode); + if (code != null) + { + for (SimpleComboValue<LabeledItem<ImageTransformationInfo>> info : transformationsComboBox + .getStore().getModels()) + { + if (info.getValue().getItem().getCode().equals(code)) + { + selected = true; + // transformationsComboBox.select(info); + transformationsComboBox.setSelection(Collections.singletonList(info)); + break; + } + } + } + if (false == selected) + { + for (SimpleComboValue<LabeledItem<ImageTransformationInfo>> info : transformationsComboBox + .getStore().getModels()) + { + if (info.getValue().getItem().isDefault()) + { + // transformationsComboBox.select(info); + transformationsComboBox.setSelection(Collections.singletonList(info)); + selected = true; + break; + } + } + } + + if (false == selected) + { + transformationsComboBox.setSelection(Collections.singletonList(transformationsComboBox + .getStore().getModels().get(0))); + } + } + + private static LabeledItem<ImageTransformationInfo> convertToLabeledItem( + ImageTransformationInfo imageTransformationInfo) + { + return new LabeledItem<ImageTransformationInfo>(imageTransformationInfo, + imageTransformationInfo.getLabel(), imageTransformationInfo.getDescription()); + } } \ No newline at end of file diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ChannelWidgetWithListener.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ChannelWidgetWithListener.java index ca23453a81eb7435b80602b2efb7102d936231ce..36ea11bcd9c541f165e18668525096bed154000b 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ChannelWidgetWithListener.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/ChannelWidgetWithListener.java @@ -25,7 +25,7 @@ import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.u /** * Allows to create a {@link Widget} ({@link #asWidget()}) containing channel view and allows to - * manually update visible channel via the ({@link #selectionChanged(List)}) method. + * manually update visible channel via the ({@link #selectionChanged(List, String)}) method. * * @author Izabela Adamczyk */ @@ -37,7 +37,7 @@ public class ChannelWidgetWithListener implements ChannelChooserPanel.ChannelSel interface ISimpleChanneledViewerFactory { - Widget create(List<String> channelCodes); + Widget create(List<String> channelCodes, String imageTransformationCodeOrNull); } public ChannelWidgetWithListener(final ISimpleChanneledViewerFactory viewerFactory) @@ -51,11 +51,12 @@ public class ChannelWidgetWithListener implements ChannelChooserPanel.ChannelSel return container; } - public void selectionChanged(List<String> channelNames) + public void selectionChanged(List<String> channelNames, String imageTransformationCodeOrNull) { if (channelNames != null) { - GuiUtils.replaceLastItem(container, viewerFactory.create(channelNames)); + GuiUtils.replaceLastItem(container, + viewerFactory.create(channelNames, imageTransformationCodeOrNull)); } } } \ No newline at end of file diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/DefaultChannelState.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/DefaultChannelState.java index a8fc04d34965589ca66d10a8fba6ae8fa7f6af46..6a95f560a3ce9bb8e830e5c0007bb3a25b081ddb 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/DefaultChannelState.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/DefaultChannelState.java @@ -17,6 +17,7 @@ package ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.detailviewers; import java.util.List; +import java.util.Map; import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext; import ch.systemsx.cisd.openbis.plugin.screening.client.web.client.application.ScreeningDisplaySettingsManager; @@ -52,4 +53,19 @@ public class DefaultChannelState implements IDefaultChannelState return ScreeningViewContext.getTechnologySpecificDisplaySettingsManager(viewContext); } + public void setDefaultTransformation(String channel, String codes) + { + getTransformations().put(channel, codes); + } + + public String tryGetDefaultTransformation(String channel) + { + return getTransformations().get(channel); + } + + private Map<String, String> getTransformations() + { + return getDisplaySettingManager().getDefaultTransformationsForChannels(displayTypeId); + } + } diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/IDefaultChannelState.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/IDefaultChannelState.java index 3c0187b92b04b0b27e73d79b49689c4211382b91..11ab1a7bc0321bdebf1cd67d890134e99d6e3ad9 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/IDefaultChannelState.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/IDefaultChannelState.java @@ -12,4 +12,8 @@ public interface IDefaultChannelState public List<String> tryGetDefaultChannels(); public void setDefaultChannels(List<String> channels); + + public void setDefaultTransformation(String channel, String code); + + public String tryGetDefaultTransformation(String channel); } \ No newline at end of file diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialReplicaSummaryComponent.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialReplicaSummaryComponent.java index d82e2c734fb93bf1005d97da7d29c8184d05ba81..da722cbf04f06c9c87404daddd090affb068fba2 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialReplicaSummaryComponent.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/MaterialReplicaSummaryComponent.java @@ -88,7 +88,7 @@ public class MaterialReplicaSummaryComponent AnalysisProcedureListenerHolder analysisProcedureListenerHolder) { return new MaterialReplicaSummaryComponent(screeningViewContext, - restrictGlobalScopeLinkToProject, experiment, null).createViewer(material, + restrictGlobalScopeLinkToProject, experiment, null).createViewer(material, analysisProcedureListenerHolder); } @@ -154,7 +154,8 @@ public class MaterialReplicaSummaryComponent String displayTypeId = ScreeningDisplayTypeIDGenerator.EXPERIMENT_CHANNEL.createID(null); final IDefaultChannelState defaultChannelState = new DefaultChannelState(screeningViewContext, displayTypeId); - ChannelChooserPanel channelChooser = new ChannelChooserPanel(defaultChannelState); + ChannelChooserPanel channelChooser = + new ChannelChooserPanel(screeningViewContext, defaultChannelState); LayoutContainer panel = new NotScrollableContainer(); panel.setLayout(new RowLayout()); panel.add(channelChooser); @@ -342,18 +343,19 @@ public class MaterialReplicaSummaryComponent assert image.tryGetImageDataset() != null; final ISimpleChanneledViewerFactory viewerFactory = new ISimpleChanneledViewerFactory() { - public Widget create(List<String> channels) + public Widget create(List<String> channels, String imageTransformationCodeOrNull) { return WellContentDialog.createImageViewerForChannel(screeningViewContext, - image, oneImageSizeFactorPx, channels); + image, oneImageSizeFactorPx, channels, imageTransformationCodeOrNull); } }; ChannelWidgetWithListener widgetWithListener = new ChannelWidgetWithListener(viewerFactory); - widgetWithListener.selectionChanged(channelChooser.getSelectedValues()); + widgetWithListener.selectionChanged(channelChooser.getSelectedValues(), + channelChooser.tryGetSelectedTransformationCode()); ImageDatasetParameters imageParameters = image.tryGetImageDataset().getImageParameters(); channelChooser.addSelectionChangedListener(widgetWithListener); - channelChooser.addCodes(imageParameters.getChannelsCodes()); + channelChooser.addCodes(imageParameters); return widgetWithListener.asWidget(); } diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellContentDialog.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellContentDialog.java index 839c9fc7221bf9fae9c8dafe1efa41775057fbbe..c29b7eb99ac1b5badbe44e1978888db081e254f6 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellContentDialog.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellContentDialog.java @@ -137,7 +137,8 @@ public class WellContentDialog extends Dialog */ public static Widget createImageViewerForChannel( final IViewContext<IScreeningClientServiceAsync> viewContext, - final WellImage wellImage, int imageSizePx, List<String> channels) + final WellImage wellImage, int imageSizePx, List<String> channels, + String imageTransformationCodeOrNull) { final ImageDatasetEnrichedReference imageDataset = tryGetImageDataset(wellImage); if (imageDataset == null) @@ -160,11 +161,9 @@ public class WellContentDialog extends Dialog String sessionId = getSessionId(viewContext); final LogicalImageReference wellImages = new LogicalImageReference(imageDataset, locationOrNull); - // TODO 2011-09-13, Tomasz Pylak: add transformation code for single channel if chosen - String imageTransformationCode = null; LogicalImageChannelsReference channelReferences = LogicalImageChannelsReference.createWithoutOverlays(wellImages, channels, - imageTransformationCode); + imageTransformationCodeOrNull); LayoutContainer staticTilesGrid = LogicalImageViewer.createTilesGrid(channelReferences, sessionId, imageSizePx, createImageLinks); diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellSearchGrid.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellSearchGrid.java index e2fa872fec8711bd0ac6e6ba56b20c43e373a000..0c52c37663c0207d28bec74209507af289fa8d42 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellSearchGrid.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/WellSearchGrid.java @@ -232,8 +232,7 @@ public class WellSearchGrid extends TypedTableGrid<WellContent> implements { WellSearchGrid reviewer = new WellSearchGrid(viewContext, experimentCriteriaOrNull, materialCriteria, - analysisProcedureCriteria, - restrictGlobalScopeLinkToProject); + analysisProcedureCriteria, restrictGlobalScopeLinkToProject); final ToolBar toolbar = reviewer.createToolbar(); return reviewer.asDisposableWithToolbar(new IDisposableComponent() { @@ -288,7 +287,7 @@ public class WellSearchGrid extends TypedTableGrid<WellContent> implements final IDefaultChannelState defaultChannelState = createDefaultChannelState(viewContext, experimentCriteriaOrNull); - channelChooser = new ChannelChooserPanel(defaultChannelState); + channelChooser = new ChannelChooserPanel(screeningViewContext, defaultChannelState); linkExperiment(); linkPlate(); linkWell(); @@ -533,7 +532,8 @@ public class WellSearchGrid extends TypedTableGrid<WellContent> implements { if (entityOrNull != null) { - new OpenEntityDetailsTabAction(entityOrNull, getViewContext(), specialKeyPressed).execute(); + new OpenEntityDetailsTabAction(entityOrNull, getViewContext(), specialKeyPressed) + .execute(); } } @@ -568,7 +568,6 @@ public class WellSearchGrid extends TypedTableGrid<WellContent> implements }; } - private AnalysisProcedureChooser createAnalysisProcedureChooser() { AnalysisProcedureChooser analysisProcedureChooser = @@ -614,19 +613,22 @@ public class WellSearchGrid extends TypedTableGrid<WellContent> implements final ISimpleChanneledViewerFactory viewerFactory = new ISimpleChanneledViewerFactory() { - public Widget create(List<String> channels) + public Widget create(List<String> channels, + String imageTransformationCodeOrNull) { return WellContentDialog.createImageViewerForChannel( - getViewContext(), entity, IMAGE_SIZE_PX, channels); + getViewContext(), entity, IMAGE_SIZE_PX, channels, + imageTransformationCodeOrNull); } }; ChannelWidgetWithListener widgetWithListener = new ChannelWidgetWithListener(viewerFactory); - widgetWithListener.selectionChanged(channelChooser.getSelectedValues()); + widgetWithListener.selectionChanged(channelChooser.getSelectedValues(), + channelChooser.tryGetSelectedTransformationCode()); ImageDatasetParameters imageParameters = images.getImageParameters(); channelChooser.addSelectionChangedListener(widgetWithListener); - channelChooser.addCodes(imageParameters.getChannelsCodes()); + channelChooser.addCodes(imageParameters); return widgetWithListener.asWidget(); } diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/dto/LogicalImageReference.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/dto/LogicalImageReference.java index 2bed12ee1400b19e6a3e22aeffe29b5d34b16975..b78f1265d32f774ea31030c96c0fdf9614e3b565 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/dto/LogicalImageReference.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/dto/LogicalImageReference.java @@ -135,4 +135,9 @@ public class LogicalImageReference { return overlayDatasets; } + + public ImageDatasetParameters getImagetParameters() + { + return this.imageParameters; + } } diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/ImageTransformationInfo.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/ImageTransformationInfo.java index f1a4e3a326ea68d7f378d3fee2d2d19e7ed85dfe..73c7c5eccefd908eb45c9b72e2b2523d752597a0 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/ImageTransformationInfo.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/ImageTransformationInfo.java @@ -87,4 +87,22 @@ public class ImageTransformationInfo implements ISerializable { this.isDefault = isDefault; } + + @Override + public int hashCode() + { + return code.hashCode(); + } + + @Override + public boolean equals(Object o) + { + if (o instanceof ImageTransformationInfo) + { + ImageTransformationInfo other = (ImageTransformationInfo) o; + return other.code.equals(other.code); + } + + return false; + } } diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/ScreeningDisplaySettings.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/ScreeningDisplaySettings.java index cb1e0423ad585d287cc81221ce175c4937d9f3d2..b09d3f8edcc7ef33884f519018a33e0006ca7c32 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/ScreeningDisplaySettings.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/shared/basic/dto/ScreeningDisplaySettings.java @@ -31,7 +31,10 @@ public class ScreeningDisplaySettings implements ISerializable private static final long serialVersionUID = 1L; private Map<String/* displayTypeID */, String/* channel name */> defaultChannels = - new HashMap<String, String>(); + new HashMap<String, String>(); + + private Map<String, Map<String, String>> defaultTransformations = + new HashMap<String, Map<String, String>>(); private String defaultAnalysisProcedure; @@ -67,4 +70,24 @@ public class ScreeningDisplaySettings implements ISerializable { return this.defaultAnalysisProcedure; } + + /** @deprecated Should be used only by ScreeningDisplaySettingsManager. */ + @Deprecated + public Map<String, Map<String, String>> getDefaultTransformations() + { + if (defaultTransformations == null) + { + this.defaultTransformations = new HashMap<String, Map<String, String>>(); + } + + return defaultTransformations; + } + + // for serialization + + @SuppressWarnings("unused") + private void setDefaultTransformations(Map<String, Map<String, String>> defaultTransformations) + { + this.defaultTransformations = defaultTransformations; + } }