diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ChannelChooserWidget.js b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ChannelChooserWidget.js index c5f7884500c79e3bb224f3d1c3a38c73ba848247..68cd9e355911cf4c6d6fb98042518903c4ee6595 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ChannelChooserWidget.js +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ChannelChooserWidget.js @@ -16,6 +16,20 @@ define([ "jquery", "components/imageviewer/AbstractWidget", "components/imagevie this.setChannels(channels); }, + getState : function() { + var state = {}; + state.selectedChannel = this.getSelectedChannel(); + state.selectedMergedChannels = this.getSelectedMergedChannels(); + return state; + }, + + setState : function(state) { + if (state) { + this.setSelectedChannel(state.selectedChannel); + this.setSelectedMergedChannels(state.selectedMergedChannels); + } + }, + getSelectedChannel : function() { if (this.selectedChannel) { return this.selectedChannel; diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ChannelStackChooserView.js b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ChannelStackChooserView.js new file mode 100644 index 0000000000000000000000000000000000000000..9a346227d567b9e7eb45af7ba8114f40c777b942 --- /dev/null +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ChannelStackChooserView.js @@ -0,0 +1,27 @@ +define([ "jquery", "components/imageviewer/AbstractView" ], function($, AbstractView) { + + // + // CHANNEL STACK CHOOSER VIEW + // + + function ChannelStackChooserView(controller) { + this.init(controller); + } + + $.extend(ChannelStackChooserView.prototype, AbstractView.prototype, { + + init : function(controller) { + AbstractView.prototype.init.call(this, controller); + this.panel = $("<div>"); + }, + + render : function() { + this.panel.append(this.controller.getWidget().render()); + return this.panel; + } + + }); + + return ChannelStackChooserView; + +}); \ No newline at end of file diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ChannelStackChooserWidget.js b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ChannelStackChooserWidget.js index 03342503b6916598c1d17d89d4ff91c8db2b8e93..0dc8a2af485fbe4cef8bb17ffc6b4bd6c3206cca 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ChannelStackChooserWidget.js +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ChannelStackChooserWidget.js @@ -1,9 +1,10 @@ -define([ "jquery", "components/imageviewer/AbstractWidget", "components/imageviewer/ChannelStackMatrixChooserView", - "components/imageviewer/ChannelStackSeriesChooserView", "components/imageviewer/ChannelStackManager" ], function($, AbstractWidget, - ChannelStackMatrixChooserView, ChannelStackSeriesChooserView, ChannelStackManager) { +define([ "jquery", "components/imageviewer/AbstractWidget", "components/imageviewer/ChannelStackChooserView", + "components/imageviewer/ChannelStackMatrixChooserWidget", "components/imageviewer/ChannelStackSeriesChooserWidget", + "components/imageviewer/ChannelStackManager" ], function($, AbstractWidget, ChannelStackChooserView, ChannelStackMatrixChooserWidget, + ChannelStackSeriesChooserWidget, ChannelStackManager) { // - // CHANNEL STACK CHOOSER + // CHANNEL STACK CHOOSER WIDGET // function ChannelStackChooserWidget(channelStacks) { @@ -13,133 +14,48 @@ define([ "jquery", "components/imageviewer/AbstractWidget", "components/imagevie $.extend(ChannelStackChooserWidget.prototype, AbstractWidget.prototype, { init : function(channelStacks) { + AbstractWidget.prototype.init.call(this, new ChannelStackChooserView(this)); this.channelStackManager = new ChannelStackManager(channelStacks); if (this.channelStackManager.isMatrix()) { - AbstractWidget.prototype.init.call(this, new ChannelStackMatrixChooserView(this)); + this.widget = new ChannelStackMatrixChooserWidget(channelStacks); } else { - AbstractWidget.prototype.init.call(this, new ChannelStackSeriesChooserView(this)); + this.widget = new ChannelStackSeriesChooserWidget(channelStacks); } - if (channelStacks && channelStacks.length > 0) { - this.setSelectedChannelStack(channelStacks[0]); - } - }, - - getTimePoints : function() { - return this.channelStackManager.getTimePoints(); - }, - - getDepths : function() { - return this.channelStackManager.getDepths(); - }, - - getChannelStacks : function() { - return this.channelStackManager.getChannelStacks(); - }, - - getChannelStackIndex : function(channelStackId) { - return this.channelStackManager.getChannelStackIndex(channelStackId); - }, + var thisWidget = this; - getChannelStackById : function(channelStackId) { - return this.channelStackManager.getChannelStackById(channelStackId); + this.widget.addChangeListener(function() { + thisWidget.notifyChangeListeners(); + }); }, - getChannelStackByTimePointAndDepth : function(timePoint, depth) { - return this.channelStackManager.getChannelStackByTimePointAndDepth(timePoint, depth); + getState : function() { + return this.widget.getState(); }, - loadChannelStackContent : function(channelStack, callback) { - this.getChannelStackContentLoader()(channelStack, callback); + setState : function(state) { + this.widget.setState(state); }, getChannelStackContentLoader : function() { - if (this.channelStackContentLoader) { - return this.channelStackContentLoader; - } else { - return function(channelStack, callback) { - callback(); - } - } + return this.widget.getChannelStackContentLoader(); }, setChannelStackContentLoader : function(channelStackContentLoader) { - this.channelStackContentLoader = channelStackContentLoader; + this.widget.setChannelStackContentLoader(channelStackContentLoader); }, getSelectedChannelStackId : function() { - return this.selectedChannelStackId; + return this.widget.getSelectedChannelStackId(); }, setSelectedChannelStackId : function(channelStackId) { - if (this.selectedChannelStackId != channelStackId) { - this.selectedChannelStackId = channelStackId; - this.refresh(); - this.notifyChangeListeners(); - } - }, - - getSelectedChannelStack : function() { - var channelStackId = this.getSelectedChannelStackId(); - - if (channelStackId != null) { - return this.channelStackManager.getChannelStackById(channelStackId); - } else { - return null; - } - }, - - setSelectedChannelStack : function(channelStack) { - if (channelStack != null) { - this.setSelectedChannelStackId(channelStack.id); - } else { - this.setSelectedChannelStackId(null); - } - }, - - getSelectedTimePoint : function() { - var channelStack = this.getSelectedChannelStack(); - if (channelStack != null) { - return channelStack.timePointOrNull; - } else { - return null; - } - }, - - setSelectedTimePoint : function(timePoint) { - if (timePoint != null && $.inArray(timePoint, this.getTimePoints()) == -1) { - timePoint = this.getTimePoints().length > 0 ? this.getTimePoints()[0] : null; - } - - if (timePoint != null && this.getSelectedDepth() != null) { - var channelStack = this.channelStackManager.getChannelStackByTimePointAndDepth(timePoint, this.getSelectedDepth()); - this.setSelectedChannelStack(channelStack); - } else { - this.setSelectedChannelStack(null); - } - }, - - getSelectedDepth : function() { - var channelStack = this.getSelectedChannelStack(); - if (channelStack != null) { - return channelStack.depthOrNull; - } else { - return null; - } + this.widget.setSelectedChannelStackId(channelStackId); }, - setSelectedDepth : function(depth) { - if (depth != null && $.inArray(depth, this.getDepths()) == -1) { - depth = this.getDepths().length > 0 ? this.getDepths()[0] : null; - } - - if (depth != null && this.getSelectedTimePoint() != null) { - var channelStack = this.channelStackManager.getChannelStackByTimePointAndDepth(this.getSelectedTimePoint(), depth); - this.setSelectedChannelStack(channelStack); - } else { - this.setSelectedChannelStack(null); - } + getWidget : function() { + return this.widget; } }); diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ChannelStackMatrixChooserView.js b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ChannelStackMatrixChooserView.js index f3853bb26bfd646beecb558c42555e17c553a775..560cc13f100e319465108a8e80384469f76870b1 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ChannelStackMatrixChooserView.js +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ChannelStackMatrixChooserView.js @@ -1,5 +1,4 @@ -define([ "jquery", "bootstrap", "bootstrap-slider", "components/imageviewer/AbstractView", "components/imageviewer/MovieButtonsWidget" ], function($, - bootstrap, bootstrapSlider, AbstractView, MovieButtonsWidget) { +define([ "jquery", "bootstrap", "bootstrap-slider", "components/imageviewer/AbstractView" ], function($, bootstrap, bootstrapSlider, AbstractView) { // // CHANNEL STACK MATRIX CHOOSER VIEW @@ -24,7 +23,7 @@ define([ "jquery", "bootstrap", "bootstrap-slider", "components/imageviewer/Abst $("<div>").addClass("col-md-6").append(this.createDepthWidget()).appendTo(slidersRow); var buttonsRow = $("<div>").appendTo(this.panel); - buttonsRow.append(this.createTimePointButtonsWidget()); + buttonsRow.append(this.controller.getTimePointButtonsWidget().render()); this.refresh(); @@ -42,8 +41,6 @@ define([ "jquery", "bootstrap", "bootstrap-slider", "components/imageviewer/Abst timeLabel.text("Time: " + time + " sec (" + (timeIndex + 1) + "/" + timeCount + ")"); timeInput.slider("setValue", time); - - this.timePointButtons.setSelectedFrame(timeIndex); } var depth = this.controller.getSelectedDepth(); @@ -109,27 +106,6 @@ define([ "jquery", "bootstrap", "bootstrap-slider", "components/imageviewer/Abst }); return widget; - }, - - createTimePointButtonsWidget : function() { - var thisView = this; - - var buttons = new MovieButtonsWidget(this.controller.getTimePoints().length); - - buttons.setFrameContentLoader(function(frameIndex, callback) { - var timePoint = thisView.controller.getTimePoints()[frameIndex]; - var depth = thisView.controller.getSelectedDepth(); - var channelStack = thisView.controller.getChannelStackByTimePointAndDepth(timePoint, depth); - thisView.controller.loadChannelStackContent(channelStack, callback); - }); - - buttons.addChangeListener(function() { - var timePoint = thisView.controller.getTimePoints()[buttons.getSelectedFrame()]; - thisView.controller.setSelectedTimePoint(timePoint); - }); - - this.timePointButtons = buttons; - return buttons.render(); } }); diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ChannelStackMatrixChooserWidget.js b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ChannelStackMatrixChooserWidget.js new file mode 100644 index 0000000000000000000000000000000000000000..5ec6f87f57a6356ac8ab4798e4afc6be1e92e375 --- /dev/null +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ChannelStackMatrixChooserWidget.js @@ -0,0 +1,152 @@ +define([ "jquery", "components/imageviewer/AbstractWidget", "components/imageviewer/ChannelStackMatrixChooserView", + "components/imageviewer/MovieButtonsWidget", "components/imageviewer/ChannelStackManager" ], function($, AbstractWidget, + ChannelStackMatrixChooserView, MovieButtonsWidget, ChannelStackManager) { + + // + // CHANNEL STACK MATRIX CHOOSER + // + + function ChannelStackMatrixChooserWidget(channelStacks) { + this.init(channelStacks); + } + + $.extend(ChannelStackMatrixChooserWidget.prototype, AbstractWidget.prototype, { + + init : function(channelStacks) { + AbstractWidget.prototype.init.call(this, new ChannelStackMatrixChooserView(this)); + this.channelStackManager = new ChannelStackManager(channelStacks); + + if (channelStacks && channelStacks.length > 0) { + this.setSelectedChannelStackId(channelStacks[0].id); + } + }, + + getState : function() { + var state = {}; + state.timePointButtonsState = this.getTimePointButtonsWidget().getState(); + state.selectedTimePoint = this.getSelectedTimePoint(); + state.selectedDepth = this.getSelectedDepth(); + return state; + }, + + setState : function(state) { + if (state) { + this.getTimePointButtonsWidget().setState(state.timePointButtonsState); + this.setSelectedTimePoint(state.selectedTimePoint); + this.setSelectedDepth(state.selectedDepth); + } + }, + + getTimePoints : function() { + return this.channelStackManager.getTimePoints(); + }, + + getDepths : function() { + return this.channelStackManager.getDepths(); + }, + + getChannelStackByTimePointAndDepth : function(timePoint, depth) { + return this.channelStackManager.getChannelStackByTimePointAndDepth(timePoint, depth); + }, + + loadChannelStackContent : function(channelStack, callback) { + this.getChannelStackContentLoader()(channelStack, callback); + }, + + getChannelStackContentLoader : function() { + if (this.channelStackContentLoader) { + return this.channelStackContentLoader; + } else { + return function(channelStack, callback) { + callback(); + } + } + }, + + setChannelStackContentLoader : function(channelStackContentLoader) { + this.channelStackContentLoader = channelStackContentLoader; + }, + + getSelectedChannelStackId : function() { + var channelStack = this.getChannelStackByTimePointAndDepth(this.getSelectedTimePoint(), this.getSelectedDepth()); + return channelStack != null ? channelStack.id : null; + }, + + setSelectedChannelStackId : function(channelStackId) { + var channelStack = this.channelStackManager.getChannelStackById(channelStackId); + if (channelStack != null) { + this.setSelectedTimePoint(channelStack.timePointOrNull); + this.setSelectedDepth(channelStack.depthOrNull); + } + }, + + getSelectedTimePoint : function() { + if (this.selectedTimePoint != undefined) { + return this.selectedTimePoint; + } else { + return null; + } + }, + + setSelectedTimePoint : function(timePoint) { + if ($.inArray(timePoint, this.getTimePoints()) == -1) { + timePoint = this.getTimePoints().length > 0 ? this.getTimePoints()[0] : null; + } + + if (this.getSelectedTimePoint() != timePoint) { + this.selectedTimePoint = timePoint; + this.getTimePointButtonsWidget().setSelectedFrame(this.getTimePoints().indexOf(timePoint)); + this.refresh(); + this.notifyChangeListeners(); + } + }, + + getSelectedDepth : function() { + if (this.selectedDepth != undefined) { + return this.selectedDepth; + } else { + return null; + } + }, + + setSelectedDepth : function(depth) { + if ($.inArray(depth, this.getDepths()) == -1) { + depth = this.getDepths().length > 0 ? this.getDepths()[0] : null; + } + + if (this.getSelectedDepth() != depth) { + this.selectedDepth = depth; + this.refresh(); + this.notifyChangeListeners(); + } + }, + + getTimePointButtonsWidget : function() { + if (this.timeButtonsWidget == null) { + var thisWidget = this; + + var widget = new MovieButtonsWidget(this.getTimePoints().length); + + widget.setFrameContentLoader(function(frameIndex, callback) { + var timePoint = thisWidget.getTimePoints()[frameIndex]; + var depth = thisWidget.getSelectedDepth(); + var channelStack = thisWidget.getChannelStackByTimePointAndDepth(timePoint, depth); + thisWidget.loadChannelStackContent(channelStack, callback); + }); + + widget.addChangeListener(function() { + var timePoint = thisWidget.getTimePoints()[widget.getSelectedFrame()]; + thisWidget.setSelectedTimePoint(timePoint); + }); + + this.timeButtonsWidget = widget; + } + + return this.timeButtonsWidget; + } + + }); + + return ChannelStackMatrixChooserWidget; + +}); diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ChannelStackSeriesChooserView.js b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ChannelStackSeriesChooserView.js index 5698f29021d1ac8cffb8b3ef7a9242aad4383569..5607a98973065af3c4283a091ac300d5ee0f52b6 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ChannelStackSeriesChooserView.js +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ChannelStackSeriesChooserView.js @@ -1,5 +1,4 @@ -define([ "jquery", "bootstrap", "bootstrap-slider", "components/imageviewer/AbstractView", "components/imageviewer/MovieButtonsWidget", ], function( - $, bootstrap, bootstrapSlider, AbstractView, MovieButtonsWidget) { +define([ "jquery", "bootstrap", "bootstrap-slider", "components/imageviewer/AbstractView" ], function($, bootstrap, bootstrapSlider, AbstractView) { // // CHANNEL STACK SERIES CHOOSER VIEW @@ -20,7 +19,7 @@ define([ "jquery", "bootstrap", "bootstrap-slider", "components/imageviewer/Abst var thisView = this; this.panel.append(this.createSliderWidget()); - this.panel.append(this.createButtonsWidget()); + this.panel.append(this.controller.getButtonsWidget().render()); this.refresh(); @@ -39,8 +38,6 @@ define([ "jquery", "bootstrap", "bootstrap-slider", "components/imageviewer/Abst var sliderInput = this.panel.find(".sliderWidget input"); sliderInput.slider("setValue", index); - - this.buttons.setSelectedFrame(index); } }, @@ -68,25 +65,6 @@ define([ "jquery", "bootstrap", "bootstrap-slider", "components/imageviewer/Abst }); return widget; - }, - - createButtonsWidget : function() { - var thisView = this; - - var buttons = new MovieButtonsWidget(this.controller.getChannelStacks().length); - - buttons.setFrameContentLoader(function(frameIndex, callback) { - var channelStack = thisView.controller.getChannelStacks()[frameIndex]; - thisView.controller.loadChannelStackContent(channelStack, callback); - }); - - buttons.addChangeListener(function() { - var channelStack = thisView.controller.getChannelStacks()[buttons.getSelectedFrame()]; - thisView.controller.setSelectedChannelStackId(channelStack.id); - }); - - this.buttons = buttons; - return buttons.render(); } }); diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ChannelStackSeriesChooserWidget.js b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ChannelStackSeriesChooserWidget.js new file mode 100644 index 0000000000000000000000000000000000000000..640355ec3ad46bba50f46cef605d40b5a2bf7add --- /dev/null +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ChannelStackSeriesChooserWidget.js @@ -0,0 +1,130 @@ +define([ "jquery", "components/imageviewer/AbstractWidget", "components/imageviewer/ChannelStackSeriesChooserView", + "components/imageviewer/MovieButtonsWidget", "components/imageviewer/ChannelStackManager" ], function($, AbstractWidget, + ChannelStackSeriesChooserView, MovieButtonsWidget, ChannelStackManager) { + + // + // CHANNEL STACK SERIES CHOOSER + // + + function ChannelStackSeriesChooserWidget(channelStacks) { + this.init(channelStacks); + } + + $.extend(ChannelStackSeriesChooserWidget.prototype, AbstractWidget.prototype, { + + init : function(channelStacks) { + AbstractWidget.prototype.init.call(this, new ChannelStackSeriesChooserView(this)); + this.channelStackManager = new ChannelStackManager(channelStacks); + + if (channelStacks && channelStacks.length > 0) { + this.setSelectedChannelStackId(channelStacks[0].id); + } + }, + + getState : function() { + var state = {}; + state.buttonsWidget = this.getButtonsWidget().getState(); + state.selectedChannelStackIndex = this.getSelectedChannelStackIndex(); + return state; + }, + + setState : function(state) { + if (state) { + this.getButtonsWidget().setState(state.buttonsWidget); + this.setSelectedChannelStackIndex(state.selectedChannelStackIndex); + } + }, + + getChannelStacks : function() { + return this.channelStackManager.getChannelStacks(); + }, + + getChannelStackIndex : function(channelStackId) { + return this.channelStackManager.getChannelStackIndex(channelStackId); + }, + + loadChannelStackContent : function(channelStack, callback) { + this.getChannelStackContentLoader()(channelStack, callback); + }, + + getChannelStackContentLoader : function() { + if (this.channelStackContentLoader) { + return this.channelStackContentLoader; + } else { + return function(channelStack, callback) { + callback(); + } + } + }, + + setChannelStackContentLoader : function(channelStackContentLoader) { + this.channelStackContentLoader = channelStackContentLoader; + }, + + getSelectedChannelStackIndex : function() { + return this.channelStackManager.getChannelStackIndex(this.getSelectedChannelStackId()); + }, + + setSelectedChannelStackIndex : function(index) { + index = Math.min(Math.max(0, index), this.channelStackManager.getChannelStacks().length - 1); + if (index > 0) { + var channelStack = this.channelStackManager.getChannelStacks()[index]; + this.setSelectedChannelStackId(channelStack.id); + } else { + this.setSelectedChannelStackId(null); + } + }, + + getSelectedChannelStackId : function() { + if (this.selectedChannelStackId != undefined) { + return this.selectedChannelStackId; + } else { + return null; + } + }, + + setSelectedChannelStackId : function(channelStackId) { + var channelStack = this.channelStackManager.getChannelStackById(channelStackId); + var channelStackId = null; + + if (channelStack == null) { + channelStackId = this.getChannelStacks().length > 0 ? this.getChannelStacks()[0].id : null; + } else { + channelStackId = channelStack.id; + } + + if (this.getSelectedChannelStackId() != channelStackId) { + this.selectedChannelStackId = channelStackId; + this.getButtonsWidget().setSelectedFrame(this.getSelectedChannelStackIndex()); + this.refresh(); + this.notifyChangeListeners(); + } + }, + + getButtonsWidget : function() { + if (this.buttonsWidget == null) { + var thisWidget = this; + + var widget = new MovieButtonsWidget(this.getChannelStacks().length); + + widget.setFrameContentLoader(function(frameIndex, callback) { + var channelStack = thisWidget.getChannelStacks()[frameIndex]; + thisWidget.loadChannelStackContent(channelStack, callback); + }); + + widget.addChangeListener(function() { + var channelStack = thisWidget.getChannelStacks()[widget.getSelectedFrame()]; + thisWidget.setSelectedChannelStackId(channelStack.id); + }); + + this.buttonsWidget = widget; + } + + return this.buttonsWidget; + } + + }); + + return ChannelStackSeriesChooserWidget; + +}); diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ImageParametersView.js b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ImageParametersView.js new file mode 100644 index 0000000000000000000000000000000000000000..636eb5563ed2c97a34dff1005686c645e5bda0f3 --- /dev/null +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ImageParametersView.js @@ -0,0 +1,31 @@ +define([ "jquery", "components/imageviewer/AbstractView" ], function($, AbstractView) { + + // + // IMAGE PARAMETERS VIEW + // + + function ImageParametersView(controller) { + this.init(controller); + } + + $.extend(ImageParametersView.prototype, AbstractView.prototype, { + init : function(controller) { + AbstractView.prototype.init.call(this, controller); + this.panel = $("<div>").addClass("imageViewer"); + }, + + render : function() { + this.panel.append(this.controller.getChannelChooserWidget().render()); + this.panel.append(this.controller.getResolutionChooserWidget().render()); + this.panel.append(this.controller.getChannelStackChooserWidget().render()); + + this.refresh(); + + return this.panel; + } + + }); + + return ImageParametersView; + +}); \ No newline at end of file diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ImageParametersWidget.js b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ImageParametersWidget.js new file mode 100644 index 0000000000000000000000000000000000000000..fcbd6226d86393f4fb0a800fd2ab69440997e694 --- /dev/null +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ImageParametersWidget.js @@ -0,0 +1,77 @@ +define([ "jquery", "components/imageviewer/AbstractWidget", "components/imageviewer/ImageParametersView", + "components/imageviewer/ChannelChooserWidget", "components/imageviewer/ResolutionChooserWidget", + "components/imageviewer/ChannelStackChooserWidget" ], function($, AbstractWidget, ImageParametersView, ChannelChooserWidget, + ResolutionChooserWidget, ChannelStackChooserWidget) { + + // + // IMAGE PARAMETERS WIDGET + // + + function ImageParametersWidget(imageInfo, imageResolutions) { + this.init(imageInfo, imageResolutions); + } + + $.extend(ImageParametersWidget.prototype, AbstractWidget.prototype, { + init : function(imageInfo, imageResolutions, imageLoader) { + AbstractWidget.prototype.init.call(this, new ImageParametersView(this)); + this.imageInfo = imageInfo; + this.imageResolutions = imageResolutions; + }, + + getState : function() { + var state = {}; + state.channelChooserState = this.getChannelChooserWidget().getState(); + state.resolutionChooserState = this.getResolutionChooserWidget().getState(); + state.channelStackChooserState = this.getChannelStackChooserWidget().getState(); + return state; + }, + + setState : function(state) { + if (state) { + this.getChannelChooserWidget().setState(state.channelChooserState); + this.getResolutionChooserWidget().setState(state.resolutionChooserState); + this.getChannelStackChooserWidget().setState(state.channelStackChooserState); + } + }, + + getChannelChooserWidget : function() { + if (this.channelChooserWidget == null) { + var thisWidget = this; + this.channelChooserWidget = new ChannelChooserWidget(this.imageInfo.imageDataset.imageDataset.imageParameters.channels); + this.channelChooserWidget.addChangeListener(function() { + thisWidget.refresh(); + thisWidget.notifyChangeListeners(); + }); + } + return this.channelChooserWidget; + }, + + getResolutionChooserWidget : function() { + if (this.resolutionChooserWidget == null) { + var thisWidget = this; + this.resolutionChooserWidget = new ResolutionChooserWidget(this.imageResolutions); + this.resolutionChooserWidget.addChangeListener(function() { + thisWidget.refresh(); + thisWidget.notifyChangeListeners(); + }); + } + return this.resolutionChooserWidget; + }, + + getChannelStackChooserWidget : function() { + if (this.channelStackChooserWidget == null) { + var thisWidget = this; + this.channelStackChooserWidget = new ChannelStackChooserWidget(this.imageInfo.channelStacks); + this.channelStackChooserWidget.addChangeListener(function() { + thisWidget.refresh(); + thisWidget.notifyChangeListeners(); + }); + } + return this.channelStackChooserWidget; + } + + }); + + return ImageParametersWidget; + +}); \ No newline at end of file diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ImageViewerView.js b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ImageViewerView.js index 15ae117bfdf3133341ae62788208fa59ce13de5f..0c4c8c85f42f56ff5d81075e3d1fd746c5dc0d99 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ImageViewerView.js +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ImageViewerView.js @@ -17,7 +17,7 @@ define([ "jquery", "components/imageviewer/AbstractView" ], function($, Abstract render : function() { this.panel.append(this.renderDataSetChooserWidget()); - this.panel.append(this.renderDataSetImageViewerWidget()); + this.panel.append(this.renderImageParametersWidget()); this.panel.append(this.renderImageWidget()); this.refresh(); @@ -26,26 +26,26 @@ define([ "jquery", "components/imageviewer/AbstractView" ], function($, Abstract }, refresh : function() { - this.refreshDataSetImageViewerWidget(); + this.refreshImageParametersWidget(); }, renderDataSetChooserWidget : function() { return this.controller.getDataSetChooserWidget().render(); }, - renderDataSetImageViewerWidget : function() { - return $("<div>").addClass("dataSetImageViewerContainer"); + renderImageParametersWidget : function() { + return $("<div>").addClass("imageParametersWidgetContainer"); }, renderImageWidget : function() { return this.controller.getImageWidget().render(); }, - refreshDataSetImageViewerWidget : function() { - var container = this.panel.find(".dataSetImageViewerContainer"); - var imageViewer = this.controller.getDataSetImageViewerWidget(this.controller.getSelectedDataSetCode()); + refreshImageParametersWidget : function() { + var container = this.panel.find(".imageParametersWidgetContainer"); + var widget = this.controller.getImageParametersWidget(this.controller.getSelectedDataSetCode()); container.children().detach(); - container.append(imageViewer.render()); + container.append(widget.render()); } }); diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ImageViewerWidget.js b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ImageViewerWidget.js index 001262d4b0b4ee6f4722dd09b46db06df974b68f..a35088b5850a1df5d57716ef6d77baa666f46afc 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ImageViewerWidget.js +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ImageViewerWidget.js @@ -1,7 +1,7 @@ define([ "jquery", "components/common/CallbackManager", "components/imageviewer/AbstractWidget", "components/imageviewer/ImageViewerView", - "components/imageviewer/DataSetChooserWidget", "components/imageviewer/DataSetImageViewerWidget", "components/imageviewer/ImageWidget", + "components/imageviewer/DataSetChooserWidget", "components/imageviewer/ImageParametersWidget", "components/imageviewer/ImageWidget", "components/imageviewer/ImageLoader", "components/imageviewer/ImageData", "components/imageviewer/OpenbisFacade" ], function($, - CallbackManager, AbstractWidget, ImageViewerView, DataSetChooserWidget, DataSetImageViewerWidget, ImageWidget, ImageLoader, ImageData, + CallbackManager, AbstractWidget, ImageViewerView, DataSetChooserWidget, ImageParametersWidget, ImageWidget, ImageLoader, ImageData, OpenbisFacade) { // @@ -80,37 +80,42 @@ define([ "jquery", "components/common/CallbackManager", "components/imageviewer/ }, getSelectedChannel : function() { - var viewer = this.getDataSetImageViewerWidget(this.getSelectedDataSetCode()); + var viewer = this.getImageParametersWidget(this.getSelectedDataSetCode()); return viewer.getChannelChooserWidget().getSelectedChannel(); }, + setSelectedChannel : function(channel) { + var viewer = this.getImageParametersWidget(this.getSelectedDataSetCode()); + return viewer.getChannelChooserWidget().setSelectedChannel(channel); + }, + getSelectedMergedChannels : function() { - var viewer = this.getDataSetImageViewerWidget(this.getSelectedDataSetCode()); + var viewer = this.getImageParametersWidget(this.getSelectedDataSetCode()); return viewer.getChannelChooserWidget().getSelectedMergedChannels(); }, setSelectedMergedChannels : function(channels) { - var viewer = this.getDataSetImageViewerWidget(this.getSelectedDataSetCode()); + var viewer = this.getImageParametersWidget(this.getSelectedDataSetCode()); return viewer.getChannelChooserWidget().setSelectedMergedChannels(channels); }, getSelectedResolution : function() { - var viewer = this.getDataSetImageViewerWidget(this.getSelectedDataSetCode()); + var viewer = this.getImageParametersWidget(this.getSelectedDataSetCode()); return viewer.getResolutionChooserWidget().getSelectedResolution(); }, setSelectedResolution : function(resolution) { - var viewer = this.getDataSetImageViewerWidget(this.getSelectedDataSetCode()); + var viewer = this.getImageParametersWidget(this.getSelectedDataSetCode()); return viewer.getResolutionChooserWidget().setSelectedResolution(resolution); }, getSelectedChannelStackId : function() { - var viewer = this.getDataSetImageViewerWidget(this.getSelectedDataSetCode()); + var viewer = this.getImageParametersWidget(this.getSelectedDataSetCode()); return viewer.getChannelStackChooserWidget().getSelectedChannelStackId(); }, setSelectedChannelStackId : function(channelStackId) { - var viewer = this.getDataSetImageViewerWidget(this.getSelectedDataSetCode()); + var viewer = this.getImageParametersWidget(this.getSelectedDataSetCode()); return viewer.getChannelStackChooserWidget().setSelectedChannelStackId(channelStackId); }, @@ -137,14 +142,10 @@ define([ "jquery", "components/common/CallbackManager", "components/imageviewer/ var widget = new DataSetChooserWidget(this.getDataSetCodes()); widget.addChangeListener(function(event) { - var oldViewer = thisWidget.getDataSetImageViewerWidget(event.getOldValue()); - var newViewer = thisWidget.getDataSetImageViewerWidget(event.getNewValue()); + var oldWidget = thisWidget.getImageParametersWidget(event.getOldValue()); + var newWidget = thisWidget.getImageParametersWidget(event.getNewValue()); - newViewer.getChannelChooserWidget().setSelectedChannel(oldViewer.getChannelChooserWidget().getSelectedChannel()); - newViewer.getChannelChooserWidget().setSelectedMergedChannels(oldViewer.getChannelChooserWidget().getSelectedMergedChannels()); - newViewer.getResolutionChooserWidget().setSelectedResolution(oldViewer.getResolutionChooserWidget().getSelectedResolution()); - newViewer.getChannelStackChooserWidget().setSelectedTimePoint(oldViewer.getChannelStackChooserWidget().getSelectedTimePoint()); - newViewer.getChannelStackChooserWidget().setSelectedDepth(oldViewer.getChannelStackChooserWidget().getSelectedDepth()); + newWidget.setState(oldWidget.getState()); thisWidget.getImageWidget().setImageData(thisWidget.getSelectedImageData()); thisWidget.refresh(); @@ -156,7 +157,7 @@ define([ "jquery", "components/common/CallbackManager", "components/imageviewer/ return this.dataSetChooserWidget; }, - getDataSetImageViewerWidget : function(dataSetCode) { + getImageParametersWidget : function(dataSetCode) { var thisWidget = this; if (!this.imageViewerMap) { @@ -164,7 +165,7 @@ define([ "jquery", "components/common/CallbackManager", "components/imageviewer/ } if (!this.imageViewerMap[dataSetCode]) { - var widget = new DataSetImageViewerWidget(this.getImageInfo(dataSetCode), this.getImageResolutions(dataSetCode)); + var widget = new ImageParametersWidget(this.getImageInfo(dataSetCode), this.getImageResolutions(dataSetCode)); widget.getChannelStackChooserWidget().setChannelStackContentLoader(function(channelStack, callback) { var imageData = thisWidget.getSelectedImageData(); @@ -174,7 +175,6 @@ define([ "jquery", "components/common/CallbackManager", "components/imageviewer/ widget.addChangeListener(function() { thisWidget.getImageWidget().setImageData(thisWidget.getSelectedImageData()); - thisWidget.refresh(); }); this.imageViewerMap[dataSetCode] = widget; diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/MovieButtonsWidget.js b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/MovieButtonsWidget.js index fb3b4b3c5c4a6290015ad805780418813828776a..4444583bffea9950ac79428d606fa9e227c5d7a4 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/MovieButtonsWidget.js +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/MovieButtonsWidget.js @@ -116,6 +116,20 @@ define([ "jquery", "components/imageviewer/AbstractView", "components/imageviewe this.selectedFrame = 0; }, + getState : function() { + var state = {}; + state.selectedFrame = this.getSelectedFrame(); + state.selectedDelay = this.getSelectedDelay(); + return state; + }, + + setState : function(state) { + if (state) { + this.setSelectedFrame(state.selectedFrame); + this.setSelectedDelay(state.selectedDelay); + } + }, + play : function() { if (this.frameAction) { return; @@ -202,7 +216,6 @@ define([ "jquery", "components/imageviewer/AbstractView", "components/imageviewe frame = Math.min(Math.max(0, frame), this.frameCount - 1); if (this.selectedFrame != frame) { - // log("Selected frame: " + frame); this.selectedFrame = frame; this.frameContentLoader(frame, callback); this.refresh(); diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ResolutionChooserWidget.js b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ResolutionChooserWidget.js index d8f5652e9b90901a70ac782ecbeff189c11f383b..29bb0f6bafde691cc23d8e031d07767d9ba80803 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ResolutionChooserWidget.js +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ResolutionChooserWidget.js @@ -16,6 +16,18 @@ define([ "jquery", "components/imageviewer/AbstractWidget", "components/imagevie this.setResolutions(resolutions); }, + getState : function() { + var state = {}; + state.selectedResolution = this.getSelectedResolution(); + return state; + }, + + setState : function(state) { + if (state) { + this.setSelectedResolution(state.selectedResolution); + } + }, + getSelectedResolution : function() { return this.selectedResolution; },