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 bf6b212aa42aa924063a7dcf169533702953c093..4d2f3b6703f697c777af4bf68608c6985674e65e 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 @@ -2,7 +2,7 @@ define([ "jquery", "components/imageviewer/AbstractWidget", "components/imagevie ChannelChooserView) { // - // CHANNEL CHOOSER + // CHANNEL CHOOSER WIDGET // function ChannelChooserWidget(channels) { 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 560cc13f100e319465108a8e80384469f76870b1..6d20bbd3aa3ab0c2c7252efb25e9429c2c727250 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 @@ -18,12 +18,10 @@ define([ "jquery", "bootstrap", "bootstrap-slider", "components/imageviewer/Abst render : function() { var thisView = this; - var slidersRow = $("<div>").addClass("row").appendTo(this.panel); - $("<div>").addClass("col-md-6").append(this.createTimePointWidget()).appendTo(slidersRow); - $("<div>").addClass("col-md-6").append(this.createDepthWidget()).appendTo(slidersRow); - - var buttonsRow = $("<div>").appendTo(this.panel); - buttonsRow.append(this.controller.getTimePointButtonsWidget().render()); + this.panel.append(this.createTimePointWidget()); + this.panel.append(this.controller.getTimePointButtonsWidget().render()); + this.panel.append(this.createDepthWidget()); + this.panel.append(this.controller.getDepthButtonsWidget().render()); this.refresh(); 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 f670e728efc89d0882eea19d4787d0522ed4b519..ec2547bdd48dc9b75afdf060591223b515220499 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 @@ -3,7 +3,7 @@ define([ "jquery", "components/imageviewer/AbstractWidget", "components/imagevie ChannelStackMatrixChooserView, MovieButtonsWidget, ChannelStackManager) { // - // CHANNEL STACK MATRIX CHOOSER + // CHANNEL STACK MATRIX CHOOSER WIDGET // function ChannelStackMatrixChooserWidget(channelStacks) { @@ -23,12 +23,14 @@ define([ "jquery", "components/imageviewer/AbstractWidget", "components/imagevie doGetState : function(state) { state.timePointButtonsState = this.getTimePointButtonsWidget().getState(); + state.depthButtonsState = this.getDepthButtonsWidget().getState(); state.selectedTimePoint = this.getSelectedTimePoint(); state.selectedDepth = this.getSelectedDepth(); }, doSetState : function(state) { this.getTimePointButtonsWidget().setState(state.timePointButtonsState); + this.getDepthButtonsWidget().setState(state.depthButtonsState); this.setSelectedTimePoint(state.selectedTimePoint); this.setSelectedDepth(state.selectedDepth); }, @@ -139,6 +141,30 @@ define([ "jquery", "components/imageviewer/AbstractWidget", "components/imagevie } return this.timeButtonsWidget; + }, + + getDepthButtonsWidget : function() { + if (this.depthButtonsWidget == null) { + var thisWidget = this; + + var widget = new MovieButtonsWidget(this.getDepths().length); + + widget.setFrameContentLoader(function(frameIndex, callback) { + var depth = thisWidget.getDepths()[frameIndex]; + var timePoint = thisWidget.getSelectedTimePoint(); + var channelStack = thisWidget.getChannelStackByTimePointAndDepth(timePoint, depth); + thisWidget.loadChannelStackContent(channelStack, callback); + }); + + widget.addChangeListener(function() { + var depth = thisWidget.getDepths()[widget.getSelectedFrame()]; + thisWidget.setSelectedDepth(depth); + }); + + this.depthButtonsWidget = widget; + } + + return this.depthButtonsWidget; } }); 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 index 5557d781dd592bcdf009ab05fcd908796760bb66..0163e550159495eae2b4710863608678cf7746eb 100644 --- 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 @@ -3,7 +3,7 @@ define([ "jquery", "components/imageviewer/AbstractWidget", "components/imagevie ChannelStackSeriesChooserView, MovieButtonsWidget, ChannelStackManager) { // - // CHANNEL STACK SERIES CHOOSER + // CHANNEL STACK SERIES CHOOSER WIDGET // function ChannelStackSeriesChooserWidget(channelStacks) { diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/MovieButtonsView.js b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/MovieButtonsView.js new file mode 100644 index 0000000000000000000000000000000000000000..431883e4b0375376567c5807931723e3554ccb22 --- /dev/null +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/MovieButtonsView.js @@ -0,0 +1,100 @@ +define([ "jquery", "components/imageviewer/AbstractView" ], function($, AbstractView) { + + // + // MOVIE BUTTONS VIEW + // + + function MovieButtonsView(controller) { + this.init(controller); + } + + $.extend(MovieButtonsView.prototype, AbstractView.prototype, { + + init : function(controller) { + AbstractView.prototype.init.call(this, controller); + this.panel = $("<div>").addClass("movieButtonsWidget").addClass("form-group"); + }, + + render : function() { + var thisView = this; + + var row = $("<div>").addClass("row").appendTo(this.panel); + + var buttonsRow = $("<div>").addClass("buttons").addClass("row").appendTo(this.panel); + var delayRow = $("<div>").addClass("delay").addClass("form-inline").appendTo(this.panel); + + $("<div>").addClass("col-md-6").append(buttonsRow).appendTo(row); + $("<div>").addClass("col-md-6").append(delayRow).appendTo(row); + + var play = $("<button>").addClass("play").addClass("btn").addClass("btn-primary"); + $("<span>").addClass("glyphicon").addClass("glyphicon-play").appendTo(play); + $("<div>").addClass("col-md-3").append(play).appendTo(buttonsRow); + + play.click(function() { + thisView.controller.play(); + }); + + var stop = $("<button>").addClass("stop").addClass("btn").addClass("btn-primary"); + $("<span>").addClass("glyphicon").addClass("glyphicon-stop").appendTo(stop); + $("<div>").addClass("col-md-3").append(stop).appendTo(buttonsRow); + + stop.click(function() { + thisView.controller.stop(); + }); + + var prev = $("<button>").addClass("prev").addClass("btn").addClass("btn-default"); + $("<span>").addClass("glyphicon").addClass("glyphicon-backward").appendTo(prev); + $("<div>").addClass("col-md-3").append(prev).appendTo(buttonsRow); + + prev.click(function() { + thisView.controller.prev(); + }); + + var next = $("<button>").addClass("next").addClass("btn").addClass("btn-default"); + $("<span>").addClass("glyphicon").addClass("glyphicon-forward").appendTo(next); + $("<div>").addClass("col-md-3").append(next).appendTo(buttonsRow); + + next.click(function() { + thisView.controller.next(); + }); + + var delayTable = $("<table>").appendTo(delayRow); + var delayTr = $("<tr>").appendTo(delayTable); + + $("<td>").append($("<span>").addClass("delayLabel").text("delay:").attr("for", "delayInput")).appendTo(delayTr); + + var delay = $("<input>").attr("id", "delayInput").attr("type", "text").addClass("delay").addClass("form-control"); + delay.change(function() { + thisView.controller.setSelectedDelay(delay.val()); + }); + $("<td>").attr("width", "100%").append(delay).appendTo(delayTr); + + $("<td>").append($("<span>").addClass("delayUnit").text("ms")).appendTo(delayTr); + + this.refresh(); + + return this.panel; + }, + + refresh : function() { + var play = this.panel.find("button.play"); + play.prop("disabled", this.controller.isPlaying()); + + var stop = this.panel.find("button.stop"); + stop.prop("disabled", this.controller.isStopped()); + + var prev = this.panel.find("button.prev"); + prev.prop("disabled", this.controller.isFirstFrameSelected()); + + var next = this.panel.find("button.next"); + next.prop("disabled", this.controller.isLastFrameSelected()); + + var delay = this.panel.find("input.delay"); + delay.val(this.controller.getSelectedDelay()); + } + + }); + + return MovieButtonsView; + +}); \ No newline at end of file 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 633189813a9ce08fce837fdffd3169a2f9f18be4..467829422ccd13bad7e2ae3c227bcd61e81a3cc8 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 @@ -1,234 +1,140 @@ -define([ "jquery", "components/imageviewer/AbstractView", "components/imageviewer/AbstractWidget" ], function($, AbstractView, AbstractWidget) { +define([ "jquery", "components/imageviewer/MovieButtonsView", "components/imageviewer/AbstractWidget" ], + function($, MovieButtonsView, AbstractWidget) { - // - // MOVIE BUTTONS VIEW - // + // + // MOVIE BUTTONS WIDGET + // - function MovieButtonsView(controller) { - this.init(controller); - } - - $.extend(MovieButtonsView.prototype, AbstractView.prototype, { - - init : function(controller) { - AbstractView.prototype.init.call(this, controller); - this.panel = $("<div>").addClass("movieButtonsWidget").addClass("form-group"); - }, - - render : function() { - var thisView = this; - - var row = $("<div>").addClass("row").appendTo(this.panel); - - var buttonsRow = $("<div>").addClass("buttons").addClass("row").appendTo(this.panel); - var delayRow = $("<div>").addClass("delay").addClass("form-inline").appendTo(this.panel); - - $("<div>").addClass("col-md-6").append(buttonsRow).appendTo(row); - $("<div>").addClass("col-md-6").append(delayRow).appendTo(row); - - var play = $("<button>").addClass("play").addClass("btn").addClass("btn-primary"); - $("<span>").addClass("glyphicon").addClass("glyphicon-play").appendTo(play); - $("<div>").addClass("col-md-3").append(play).appendTo(buttonsRow); - - play.click(function() { - thisView.controller.play(); - }); - - var stop = $("<button>").addClass("stop").addClass("btn").addClass("btn-primary"); - $("<span>").addClass("glyphicon").addClass("glyphicon-stop").appendTo(stop); - $("<div>").addClass("col-md-3").append(stop).appendTo(buttonsRow); - - stop.click(function() { - thisView.controller.stop(); - }); - - var prev = $("<button>").addClass("prev").addClass("btn").addClass("btn-default"); - $("<span>").addClass("glyphicon").addClass("glyphicon-backward").appendTo(prev); - $("<div>").addClass("col-md-3").append(prev).appendTo(buttonsRow); - - prev.click(function() { - thisView.controller.prev(); - }); - - var next = $("<button>").addClass("next").addClass("btn").addClass("btn-default"); - $("<span>").addClass("glyphicon").addClass("glyphicon-forward").appendTo(next); - $("<div>").addClass("col-md-3").append(next).appendTo(buttonsRow); - - next.click(function() { - thisView.controller.next(); - }); - - var delayTable = $("<table>").appendTo(delayRow); - var delayTr = $("<tr>").appendTo(delayTable); - - $("<td>").append($("<span>").addClass("delayLabel").text("delay:").attr("for", "delayInput")).appendTo(delayTr); - - var delay = $("<input>").attr("id", "delayInput").attr("type", "text").addClass("delay").addClass("form-control"); - delay.change(function() { - thisView.controller.setSelectedDelay(delay.val()); - }); - $("<td>").attr("width", "100%").append(delay).appendTo(delayTr); - - $("<td>").append($("<span>").addClass("delayUnit").text("ms")).appendTo(delayTr); - - this.refresh(); - - return this.panel; - }, - - refresh : function() { - var play = this.panel.find("button.play"); - play.prop("disabled", this.controller.isPlaying()); - - var stop = this.panel.find("button.stop"); - stop.prop("disabled", this.controller.isStopped()); - - var prev = this.panel.find("button.prev"); - prev.prop("disabled", this.controller.isFirstFrameSelected()); - - var next = this.panel.find("button.next"); - next.prop("disabled", this.controller.isLastFrameSelected()); - - var delay = this.panel.find("input.delay"); - delay.val(this.controller.getSelectedDelay()); - } - - }); - - // - // MOVIE BUTTONS WIDGET - // - - function MovieButtonsWidget(frameCount) { - this.init(frameCount); - } - - $.extend(MovieButtonsWidget.prototype, AbstractWidget.prototype, { - - init : function(frameCount) { - AbstractWidget.prototype.init.call(this, new MovieButtonsView(this)); - this.frameCount = frameCount; - this.frameContentLoader = function(frameIndex, callback) { - callback(); - }; - this.frameAction = null; - this.selectedDelay = 100; - this.selectedFrame = 0; - }, - - doGetState : function(state) { - state.selectedFrame = this.getSelectedFrame(); - state.selectedDelay = this.getSelectedDelay(); - }, - - doSetState : function(state) { - this.setSelectedFrame(state.selectedFrame); - this.setSelectedDelay(state.selectedDelay); - }, - - play : function() { - if (this.frameAction) { - return; + function MovieButtonsWidget(frameCount) { + this.init(frameCount); } - if (this.getSelectedFrame() == this.frameCount - 1) { - this.setSelectedFrame(0); - } - - var thisButtons = this; - - this.frameAction = function() { - if (thisButtons.getSelectedFrame() < thisButtons.frameCount - 1) { - var frame = thisButtons.getSelectedFrame() + 1; - var startTime = Date.now(); - - thisButtons.setSelectedFrame(frame, function() { - var prefferedDelay = thisButtons.selectedDelay; - var actualDelay = Date.now() - startTime; - - setTimeout(function() { - if (thisButtons.frameAction) { - thisButtons.frameAction(); - } - }, Math.max(1, prefferedDelay - actualDelay)); - }); - } else { - thisButtons.stop(); - thisButtons.setSelectedFrame(0); + $.extend(MovieButtonsWidget.prototype, AbstractWidget.prototype, { + + init : function(frameCount) { + AbstractWidget.prototype.init.call(this, new MovieButtonsView(this)); + this.frameCount = frameCount; + this.frameContentLoader = function(frameIndex, callback) { + callback(); + }; + this.frameAction = null; + this.selectedDelay = 100; + this.selectedFrame = 0; + }, + + doGetState : function(state) { + state.selectedFrame = this.getSelectedFrame(); + state.selectedDelay = this.getSelectedDelay(); + }, + + doSetState : function(state) { + this.setSelectedFrame(state.selectedFrame); + this.setSelectedDelay(state.selectedDelay); + }, + + play : function() { + if (this.frameAction) { + return; + } + + if (this.getSelectedFrame() == this.frameCount - 1) { + this.setSelectedFrame(0); + } + + var thisButtons = this; + + this.frameAction = function() { + if (thisButtons.getSelectedFrame() < thisButtons.frameCount - 1) { + var frame = thisButtons.getSelectedFrame() + 1; + var startTime = Date.now(); + + thisButtons.setSelectedFrame(frame, function() { + var prefferedDelay = thisButtons.selectedDelay; + var actualDelay = Date.now() - startTime; + + setTimeout(function() { + if (thisButtons.frameAction) { + thisButtons.frameAction(); + } + }, Math.max(1, prefferedDelay - actualDelay)); + }); + } else { + thisButtons.stop(); + thisButtons.setSelectedFrame(0); + } + }; + + this.frameAction(); + this.refresh(); + }, + + stop : function() { + if (this.frameAction) { + this.frameAction = null; + this.refresh(); + } + }, + + prev : function() { + this.setSelectedFrame(this.getSelectedFrame() - 1); + }, + + next : function() { + this.setSelectedFrame(this.getSelectedFrame() + 1); + }, + + isPlaying : function() { + return this.frameAction != null; + }, + + isStopped : function() { + return this.frameAction == null; + }, + + isFirstFrameSelected : function() { + return this.getSelectedFrame() == 0; + }, + + isLastFrameSelected : function() { + return this.getSelectedFrame() == (this.frameCount - 1) + }, + + getSelectedDelay : function() { + return this.selectedDelay; + }, + + setSelectedDelay : function(delay) { + if (this.selectedDelay != delay) { + this.selectedDelay = delay; + this.refresh(); + } + }, + + getSelectedFrame : function() { + return this.selectedFrame; + }, + + setSelectedFrame : function(frame, callback) { + frame = Math.min(Math.max(0, frame), this.frameCount - 1); + + if (this.selectedFrame != frame) { + this.selectedFrame = frame; + this.frameContentLoader(frame, callback); + this.refresh(); + this.notifyChangeListeners(); + } + }, + + setFrameContentLoader : function(frameContentLoader) { + this.frameContentLoader = frameContentLoader; + }, + + getFrameContentLoader : function(frameContentLoader) { + return this.frameContentLoader; } - }; - - this.frameAction(); - this.refresh(); - }, - - stop : function() { - if (this.frameAction) { - this.frameAction = null; - this.refresh(); - } - }, - - prev : function() { - this.setSelectedFrame(this.getSelectedFrame() - 1); - }, - - next : function() { - this.setSelectedFrame(this.getSelectedFrame() + 1); - }, - isPlaying : function() { - return this.frameAction != null; - }, - - isStopped : function() { - return this.frameAction == null; - }, - - isFirstFrameSelected : function() { - return this.getSelectedFrame() == 0; - }, - - isLastFrameSelected : function() { - return this.getSelectedFrame() == (this.frameCount - 1) - }, - - getSelectedDelay : function() { - return this.selectedDelay; - }, - - setSelectedDelay : function(delay) { - if (this.selectedDelay != delay) { - this.selectedDelay = delay; - this.refresh(); - } - }, - - getSelectedFrame : function() { - return this.selectedFrame; - }, - - setSelectedFrame : function(frame, callback) { - frame = Math.min(Math.max(0, frame), this.frameCount - 1); - - if (this.selectedFrame != frame) { - this.selectedFrame = frame; - this.frameContentLoader(frame, callback); - this.refresh(); - this.notifyChangeListeners(); - } - }, - - setFrameContentLoader : function(frameContentLoader) { - this.frameContentLoader = frameContentLoader; - }, - - getFrameContentLoader : function(frameContentLoader) { - return this.frameContentLoader; - } - - }); + }); - return MovieButtonsWidget; + return MovieButtonsWidget; -}); \ No newline at end of file + }); \ No newline at end of file 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 e91722700615edf565b4e6338fcfcebd27c14dfc..ea50fd622c985ba931f672d2a34aca4af502f75b 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 @@ -2,7 +2,7 @@ define([ "jquery", "components/imageviewer/AbstractWidget", "components/imagevie ResolutionChooserView) { // - // RESOLUTION CHOOSER + // RESOLUTION CHOOSER WIDGET // function ResolutionChooserWidget(resolutions) {