From 505211e383633e085bd95aaad38868d9262a10aa Mon Sep 17 00:00:00 2001
From: pkupczyk <pkupczyk>
Date: Tue, 13 May 2014 09:11:47 +0000
Subject: [PATCH] SSDM-274 : Javascript-based Microscopy Data Viewer: -
 listener for data set change event - allow to customize data set chooser view
 - removed unused classes - updated example webapp

SVN: 31492
---
 .../image-viewer/html/image-viewer.html       | 21 ++++++-
 .../components/imageviewer/AbstractWidget.js  | 37 ++++++++++-
 .../imageviewer/DataSetChooserView.js         | 54 ++++++++++++++++
 .../imageviewer/DataSetChooserWidget.js       | 50 +--------------
 .../imageviewer/DataSetImageViewerView.js     | 33 ----------
 .../imageviewer/DataSetImageViewerWidget.js   | 61 -------------------
 6 files changed, 109 insertions(+), 147 deletions(-)
 create mode 100644 screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/DataSetChooserView.js
 delete mode 100644 screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/DataSetImageViewerView.js
 delete mode 100644 screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/DataSetImageViewerWidget.js

diff --git a/screening/source/core-plugins/microscopy/1/as/webapps/image-viewer/html/image-viewer.html b/screening/source/core-plugins/microscopy/1/as/webapps/image-viewer/html/image-viewer.html
index 2571c51e2b6..e336ce30c25 100644
--- a/screening/source/core-plugins/microscopy/1/as/webapps/image-viewer/html/image-viewer.html
+++ b/screening/source/core-plugins/microscopy/1/as/webapps/image-viewer/html/image-viewer.html
@@ -14,15 +14,30 @@
 </head>
 <body>
 	<script>
-		require([ "jquery", "openbis-screening", "components/imageviewer/ImageViewerChooserWidget" ], function($, openbis, ImageViewerChooserWidget) {
+		require([ "jquery", "openbis-screening", "components/imageviewer/ImageViewerWidget" ], function($, openbis, ImageViewerWidget) {
 
 			$(document).ready(function() {
-				var facade = new openbis();
 
+				var facade = new openbis();
 				facade.login("admin", "password", function(response) {
-					var widget = new ImageViewerChooserWidget(facade, [ "20140415140347875-53", "20140506132344798-146" ]);
+
+					var widget = new ImageViewerWidget(facade, [ "20140415140347875-53", "20140429125614418-59", "20140506132344798-146" ]);
+
+					widget.addLoadListener(function() {
+						var view = widget.getDataSetChooserWidget().getView();
+
+						view.getDataSetText = function(dataSetCode) {
+							return "My data set: " + dataSetCode;
+						};
+
+						widget.getDataSetChooserWidget().addChangeListener(function(event) {
+							console.log("data set changed from: " + event.getOldValue() + " to: " + event.getNewValue());
+						});
+					});
+
 					$("#container").append(widget.render());
 				});
+
 			});
 		});
 	</script>
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/AbstractWidget.js b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/AbstractWidget.js
index 7e2100fa8b6..83c7b5f89ad 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/AbstractWidget.js
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/AbstractWidget.js
@@ -26,12 +26,24 @@ define([ "jquery", "components/common/ListenerManager" ], function($, ListenerMa
 
 			var thisWidget = this;
 
-			this.load(function() {
+			var doRender = function() {
+				thisWidget.panel.empty();
 				if (thisWidget.getView()) {
 					thisWidget.panel.append(thisWidget.getView().render());
 					thisWidget.rendered = true;
+					thisWidget.notifyRenderListeners();
 				}
-			});
+			};
+
+			if (this.loaded) {
+				doRender();
+			} else {
+				this.load(function() {
+					thisWidget.loaded = true;
+					thisWidget.notifyLoadListeners();
+					doRender();
+				});
+			}
 
 			return this.panel;
 		},
@@ -76,7 +88,10 @@ define([ "jquery", "components/common/ListenerManager" ], function($, ListenerMa
 
 		setView : function(view) {
 			this.view = view;
-			this.refresh();
+			if (this.rendered) {
+				this.rendered = false;
+				this.render();
+			}
 		},
 
 		addListener : function(eventType, listener) {
@@ -93,6 +108,22 @@ define([ "jquery", "components/common/ListenerManager" ], function($, ListenerMa
 
 		notifyChangeListeners : function(event) {
 			this.notifyListeners("change", event);
+		},
+
+		addLoadListener : function(listener) {
+			this.addListener("load", listener);
+		},
+
+		notifyLoadListeners : function() {
+			this.notifyListeners("load");
+		},
+
+		addRenderListener : function(listener) {
+			this.addListener("render", listener);
+		},
+
+		notifyRenderListeners : function() {
+			this.notifyListeners("render");
 		}
 
 	});
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/DataSetChooserView.js b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/DataSetChooserView.js
new file mode 100644
index 00000000000..456c9c6ca66
--- /dev/null
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/DataSetChooserView.js
@@ -0,0 +1,54 @@
+define([ "jquery", "components/imageviewer/AbstractView" ], function($, AbstractView) {
+
+	//
+	// DATA SET CHOOSER VIEW
+	//
+
+	function DataSetChooserView(controller) {
+		this.init(controller);
+	}
+
+	$.extend(DataSetChooserView.prototype, AbstractView.prototype, {
+
+		init : function(controller) {
+			AbstractView.prototype.init.call(this, controller);
+			this.panel = $("<div>").addClass("dataSetChooser");
+		},
+
+		render : function() {
+			var thisView = this;
+			var widget = $("<div>").addClass("form-group");
+
+			$("<label>").text("Data set").attr("for", "dataSetChooserSelect").appendTo(widget);
+
+			var select = $("<select>").attr("id", "dataSetChooserSelect").addClass("form-control").appendTo(widget);
+
+			this.controller.getDataSetCodes().forEach(function(dataSetCode) {
+				var text = thisView.getDataSetText(dataSetCode);
+				$("<option>").attr("value", dataSetCode).text(text).appendTo(select);
+			});
+
+			select.change(function() {
+				thisView.controller.setSelectedDataSetCode(select.val());
+			});
+
+			return widget;
+		},
+
+		getDataSetText : function(dataSetCode) {
+			return dataSetCode;
+		},
+
+		refresh : function() {
+			var select = this.panel.find("select");
+
+			if (this.controller.getSelectedDataSetCode() != null) {
+				select.val(this.controller.getSelectedDataSetCode());
+			}
+		}
+
+	});
+
+	return DataSetChooserView;
+
+});
\ No newline at end of file
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/DataSetChooserWidget.js b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/DataSetChooserWidget.js
index bc124ccbe86..32b90673167 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/DataSetChooserWidget.js
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/DataSetChooserWidget.js
@@ -1,52 +1,8 @@
-define([ "jquery", "components/common/ChangeEvent", "components/imageviewer/AbstractView", "components/imageviewer/AbstractWidget" ], function($,
-		ChangeEvent, AbstractView, AbstractWidget) {
+define([ "jquery", "components/common/ChangeEvent", "components/imageviewer/AbstractWidget", "components/imageviewer/DataSetChooserView" ], function(
+		$, ChangeEvent, AbstractWidget, DataSetChooserView) {
 
 	//
-	// DATA SET CHOOSER VIEW
-	//
-
-	function DataSetChooserView(controller) {
-		this.init(controller);
-	}
-
-	$.extend(DataSetChooserView.prototype, AbstractView.prototype, {
-
-		init : function(controller) {
-			AbstractView.prototype.init.call(this, controller);
-			this.panel = $("<div>").addClass("dataSetChooser");
-		},
-
-		render : function() {
-			var thisView = this;
-			var widget = $("<div>").addClass("form-group");
-
-			$("<label>").text("Data set").attr("for", "dataSetChooserSelect").appendTo(widget);
-
-			var select = $("<select>").attr("id", "dataSetChooserSelect").addClass("form-control").appendTo(widget);
-
-			this.controller.getDataSetCodes().forEach(function(dataSetCode) {
-				$("<option>").attr("value", dataSetCode).text(dataSetCode).appendTo(select);
-			});
-
-			select.change(function() {
-				thisView.controller.setSelectedDataSetCode(select.val());
-			});
-
-			return widget;
-		},
-
-		refresh : function() {
-			var select = this.panel.find("select");
-
-			if (this.controller.getSelectedDataSetCode() != null) {
-				select.val(this.controller.getSelectedDataSetCode());
-			}
-		}
-
-	});
-
-	//
-	// DATA SET CHOOSER
+	// DATA SET CHOOSER WIDGET
 	//
 
 	function DataSetChooserWidget(dataSetCodes) {
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/DataSetImageViewerView.js b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/DataSetImageViewerView.js
deleted file mode 100644
index 39965b6a4a0..00000000000
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/DataSetImageViewerView.js
+++ /dev/null
@@ -1,33 +0,0 @@
-define([ "jquery", "components/imageviewer/AbstractView", "components/imageviewer/ImageLoader", "components/imageviewer/ImageWidget" ], function($,
-		AbstractView, ImageLoader, ImageWidget) {
-
-	//
-	// DATA SET IMAGE VIEWER VIEW
-	//
-
-	function DataSetImageViewerView(controller) {
-		this.init(controller);
-	}
-
-	$.extend(DataSetImageViewerView.prototype, AbstractView.prototype, {
-		init : function(controller) {
-			AbstractView.prototype.init.call(this, controller);
-			this.imageLoader = new ImageLoader();
-			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 DataSetImageViewerView;
-
-});
\ No newline at end of file
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/DataSetImageViewerWidget.js b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/DataSetImageViewerWidget.js
deleted file mode 100644
index f07935a0ebb..00000000000
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/public/resources/components/imageviewer/DataSetImageViewerWidget.js
+++ /dev/null
@@ -1,61 +0,0 @@
-define([ "jquery", "components/imageviewer/AbstractWidget", "components/imageviewer/DataSetImageViewerView",
-		"components/imageviewer/ChannelChooserWidget", "components/imageviewer/ResolutionChooserWidget",
-		"components/imageviewer/ChannelStackChooserWidget" ], function($, AbstractWidget, DataSetImageViewerView, ChannelChooserWidget,
-		ResolutionChooserWidget, ChannelStackChooserWidget) {
-
-	//
-	// DATA SET IMAGE VIEWER WIDGET
-	//
-
-	function DataSetImageViewerWidget(imageInfo, imageResolutions) {
-		this.init(imageInfo, imageResolutions);
-	}
-
-	$.extend(DataSetImageViewerWidget.prototype, AbstractWidget.prototype, {
-		init : function(imageInfo, imageResolutions, imageLoader) {
-			AbstractWidget.prototype.init.call(this, new DataSetImageViewerView(this));
-			this.imageInfo = imageInfo;
-			this.imageResolutions = imageResolutions;
-		},
-
-		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 DataSetImageViewerWidget;
-
-});
\ No newline at end of file
-- 
GitLab