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 index e68bf5e00571258a8e29b14cc0610edef6811e98..9407fd42b80d1238ccda47f29b084cd8ff0396cc 100644 --- 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 @@ -1,7 +1,5 @@ -define([ "jquery", "components/common/DelayedExecutor", "components/imageviewer/AbstractWidget", - "components/imageviewer/ChannelStackMatrixChooserView", "components/imageviewer/MovieButtonsWidget", - "components/imageviewer/ChannelStackManager" ], function($, DelayedExecutor, AbstractWidget, ChannelStackMatrixChooserView, - MovieButtonsWidget, ChannelStackManager) { +define([ "jquery", "components/common/DelayedExecutor", "components/imageviewer/AbstractWidget", "components/imageviewer/ChannelStackMatrixChooserView", "components/imageviewer/MovieButtonsWidget", + "components/imageviewer/ChannelStackManager" ], function($, DelayedExecutor, AbstractWidget, ChannelStackMatrixChooserView, MovieButtonsWidget, ChannelStackManager) { // // CHANNEL STACK MATRIX CHOOSER WIDGET @@ -127,6 +125,7 @@ define([ "jquery", "components/common/DelayedExecutor", "components/imageviewer/ if (this.getSelectedDepth() != depth) { this.selectedDepth = depth; + this.getDepthButtonsWidget().setSelectedFrame(this.getDepths().indexOf(depth)); this.refresh(); if (delayed) { diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/OpenbisFacade.js b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/OpenbisFacade.js index a226f5e679050885b92ed3f851425e7649cf8886..4d7a0b5b86f59acabbeec10628e5279902c53c5a 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/OpenbisFacade.js +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/OpenbisFacade.js @@ -39,8 +39,94 @@ define([ "jquery" ], function($) { }, getImageResolutions : function(dataSetCodes, callback) { - this.openbis.getImageResolutions(dataSetCodes, callback); + var thisFacade = this; + + this.openbis.getDatasetIdentifiers(dataSetCodes, function(response) { + if (response.error) { + callback(response); + } else { + thisFacade.openbis.listAvailableImageRepresentationFormats(response.result, function(response) { + if (response.error) { + callback(response); + } else { + var map = {}; + + response.result.forEach(function(result) { + var formats = result.imageRepresentationFormats; + + thisFacade._maybeAddThumbnailRepresentationFormat(formats); + thisFacade._removeDuplicatedRepresentationFormats(formats); + thisFacade._sortRepresentationFormats(formats); + + map[result.dataset.datasetCode] = formats; + }); + + callback({ + "error" : null, + "result" : map + }); + } + }); + } + }); + }, + + _maybeAddThumbnailRepresentationFormat : function(formats) { + var hasThumbnails = formats.some(function(format) { + return false == format.original; + }); + + if (false == hasThumbnails) { + var originals = formats.filter(function(format) { + return format.original; + }); + + if (originals && originals.length > 0) { + var original = originals[0]; + + if (original.width && original.height) { + formats.push({ + "original" : false, + "width" : Math.round(original.width / 4), + "height" : Math.round(original.height / 4) + }); + } + } + } + }, + + _removeDuplicatedRepresentationFormats : function(formats) { + var resolutions = {}; + var newFormats = []; + + formats.forEach(function(format, index) { + var resolution = format.width + "x" + format.height; + if (!resolutions[resolution]) { + resolutions[resolution] = format; + newFormats.push(format); + } + }); + + formats.splice(0, formats.length); + Array.prototype.push.apply(formats, newFormats); + }, + + _sortRepresentationFormats : function(formats) { + formats.sort(function(o1, o2) { + var compare = function(v1, v2) { + if (v1 > v2) { + return 1; + } else if (v1 < v2) { + return -1; + } else { + return 0; + } + } + + return compare(o1.width, o2.width) * 10 + compare(o1.height, o2.height); + }); } + }); return OpenbisFacade; diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ResolutionChooserView.js b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ResolutionChooserView.js index bbd68f3ed0f6e1cf84af2c1a6bb301c21cb249fb..5bc9477e6e6ed2ddce577048b8ee47d3f84cf2ee 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ResolutionChooserView.js +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/ResolutionChooserView.js @@ -21,7 +21,6 @@ define([ "jquery", "components/imageviewer/AbstractView" ], function($, Abstract $("<label>").text("Resolution").attr("for", "resolutionChooserSelect").appendTo(this.panel); var select = $("<select>").attr("id", "resolutionChooserSelect").addClass("form-control").appendTo(this.panel); - $("<option>").attr("value", "").text("Default").appendTo(select); this.controller.getResolutionsCodes().forEach(function(resolution) { $("<option>").attr("value", resolution).text(resolution).appendTo(select); 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 0b5e5afd492c9e4cdc5f77078c0d55ae72829a36..c822ed057f8fb09691c8604b351803830dc54961 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 @@ -1,5 +1,4 @@ -define([ "jquery", "components/imageviewer/AbstractWidget", "components/imageviewer/ResolutionChooserView" ], function($, AbstractWidget, - ResolutionChooserView) { +define([ "jquery", "components/imageviewer/AbstractWidget", "components/imageviewer/ResolutionChooserView" ], function($, AbstractWidget, ResolutionChooserView) { // // RESOLUTION CHOOSER WIDGET @@ -79,6 +78,11 @@ define([ "jquery", "components/imageviewer/AbstractWidget", "components/imagevie if (this.getResolutions().toString() != resolutions.toString()) { this.resolutions = resolutions; + + if (this.getResolutionsCodes().length > 0) { + this.setSelectedResolution(this.getResolutionsCodes()[0]); + } + this.refresh(); this.notifyChangeListeners(); }