From 9696571bd7817f41dc61dd99ef424da19fc702de Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Fri, 26 Sep 2014 13:00:32 +0200
Subject: [PATCH] OO-1219: update the preview of questions after clicking the
 breadcrumb

---
 .../gui/components/AbstractComponent.java     |  5 ++++-
 .../olat/core/gui/components/Component.java   |  2 ++
 .../ui/QuestionItemDetailsController.java     | 20 ++++++++++++++++---
 3 files changed, 23 insertions(+), 4 deletions(-)

diff --git a/src/main/java/org/olat/core/gui/components/AbstractComponent.java b/src/main/java/org/olat/core/gui/components/AbstractComponent.java
index c574fef0658..45d432acfea 100644
--- a/src/main/java/org/olat/core/gui/components/AbstractComponent.java
+++ b/src/main/java/org/olat/core/gui/components/AbstractComponent.java
@@ -256,6 +256,7 @@ public abstract class AbstractComponent implements Component {
 	 * 
 	 * @return a list of the controllers listening (normally only one)
 	 */
+	@Override
 	public List<ComponentEventListener> debuginfoGetListeners() {
 		return listeners;
 	}
@@ -263,6 +264,7 @@ public abstract class AbstractComponent implements Component {
 	/**
 	 * @param controller
 	 */
+	@Override
 	public void addListener(ComponentEventListener controller) {
 		// tests if the same controller was already registered to avoid
 		// double-firing.
@@ -272,7 +274,8 @@ public abstract class AbstractComponent implements Component {
 				+ "', controller was: " + controller.toString());
 		listeners.add(controller);
 	}
-	
+
+	@Override
 	public void removeListener(ComponentEventListener controller) {
 		listeners.remove(controller);
 	}
diff --git a/src/main/java/org/olat/core/gui/components/Component.java b/src/main/java/org/olat/core/gui/components/Component.java
index a60e5eee07c..3518cbed0b2 100644
--- a/src/main/java/org/olat/core/gui/components/Component.java
+++ b/src/main/java/org/olat/core/gui/components/Component.java
@@ -78,6 +78,8 @@ public interface Component {
 	
 	public void addListener(ComponentEventListener controller);
 	
+	public void removeListener(ComponentEventListener controller);
+	
 	public List<ComponentEventListener> debuginfoGetListeners();
 	
 	public void dispatchRequest(UserRequest ureq);
diff --git a/src/main/java/org/olat/modules/qpool/ui/QuestionItemDetailsController.java b/src/main/java/org/olat/modules/qpool/ui/QuestionItemDetailsController.java
index 44d5c3be45f..dbfabfbeec8 100644
--- a/src/main/java/org/olat/modules/qpool/ui/QuestionItemDetailsController.java
+++ b/src/main/java/org/olat/modules/qpool/ui/QuestionItemDetailsController.java
@@ -32,6 +32,7 @@ import org.olat.core.gui.components.link.Link;
 import org.olat.core.gui.components.link.LinkFactory;
 import org.olat.core.gui.components.stack.BreadcrumbPanel;
 import org.olat.core.gui.components.stack.BreadcrumbPanelAware;
+import org.olat.core.gui.components.stack.PopEvent;
 import org.olat.core.gui.components.velocity.VelocityContainer;
 import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.Event;
@@ -71,6 +72,7 @@ public class QuestionItemDetailsController extends BasicController implements Br
 	private CloseableModalController cmc;
 	private final VelocityContainer mainVC;
 	private DialogBoxController confirmDeleteBox;
+	private LayoutMain3ColsController editMainCtrl;
 	private SelectBusinessGroupController selectGroupCtrl;
 	private final MetadatasController metadatasCtrl;
 	private final UserCommentsAndRatingsController commentsAndRatingCtr;
@@ -141,11 +143,16 @@ public class QuestionItemDetailsController extends BasicController implements Br
 	
 	@Override
 	protected void doDispose() {
-		//
+		if(stackPanel != null) {
+			stackPanel.removeListener(this);
+		}
 	}
 
 	@Override
 	public void setBreadcrumbPanel(BreadcrumbPanel stackPanel) {
+		if(stackPanel != null) {
+			stackPanel.addListener(this);
+		}
 		this.stackPanel = stackPanel;
 	}
 
@@ -167,6 +174,13 @@ public class QuestionItemDetailsController extends BasicController implements Br
 			fireEvent(ureq, new QItemEvent("next", metadatasCtrl.getItem()));
 		} else if(source == previousItem) {
 			fireEvent(ureq, new QItemEvent("previous", metadatasCtrl.getItem()));
+		} else if(source == stackPanel) {
+			if(event instanceof PopEvent) {
+				PopEvent pop = (PopEvent)event;
+				if(pop.getController() == editMainCtrl) {
+					doContentChanged(ureq);
+				}
+			}
 		}
 	}
 	
@@ -222,8 +236,8 @@ public class QuestionItemDetailsController extends BasicController implements Br
 		editCtrl = spi.getEditableController(ureq, getWindowControl(), item);
 		listenTo(editCtrl);
 		
-		LayoutMain3ColsController mainCtrl = new LayoutMain3ColsController(ureq, getWindowControl(), editCtrl);
-		stackPanel.pushController("Edition", mainCtrl);
+		editMainCtrl = new LayoutMain3ColsController(ureq, getWindowControl(), editCtrl);
+		stackPanel.pushController("Edition", editMainCtrl);
 	}
 	
 	private void doContentChanged(UserRequest ureq) {
-- 
GitLab