From 1571060303398f8413ca5f25b9f53dbea20c2489 Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Thu, 1 Nov 2012 09:33:49 +0100 Subject: [PATCH] OO-401: deactivate the scorm player before the configuration changed event dispose it --- .../LayoutMain3ColsBackController.java | 4 +++ .../fullWebApp/LayoutMain3ColsController.java | 6 +++- .../control/ConfigurationChangedListener.java | 34 +++++++++++++++++++ .../title/TitledWrapperController.java | 12 +++++-- .../nodes/scorm/ScormRunController.java | 12 ++++--- .../olat/course/run/RunMainController.java | 9 +++++ .../scorm/ScormAPIandDisplayController.java | 20 +++++++---- 7 files changed, 82 insertions(+), 15 deletions(-) create mode 100644 src/main/java/org/olat/core/gui/control/ConfigurationChangedListener.java diff --git a/src/main/java/org/olat/core/commons/fullWebApp/LayoutMain3ColsBackController.java b/src/main/java/org/olat/core/commons/fullWebApp/LayoutMain3ColsBackController.java index 56e74ff2582..4c33848d149 100644 --- a/src/main/java/org/olat/core/commons/fullWebApp/LayoutMain3ColsBackController.java +++ b/src/main/java/org/olat/core/commons/fullWebApp/LayoutMain3ColsBackController.java @@ -116,6 +116,10 @@ public class LayoutMain3ColsBackController extends MainLayoutBasicController imp else getWindowControl().pushToMainArea(backVC); } + + public boolean isFullScreen() { + return fullScreen; + } // fxdiff FXOLAT-116: SCORM improvements public void setAsFullscreen(UserRequest ureq) { diff --git a/src/main/java/org/olat/core/commons/fullWebApp/LayoutMain3ColsController.java b/src/main/java/org/olat/core/commons/fullWebApp/LayoutMain3ColsController.java index 3ae272f4ace..be275af7cdb 100644 --- a/src/main/java/org/olat/core/commons/fullWebApp/LayoutMain3ColsController.java +++ b/src/main/java/org/olat/core/commons/fullWebApp/LayoutMain3ColsController.java @@ -157,6 +157,10 @@ public class LayoutMain3ColsController extends MainLayoutBasicController impleme putInitialPanel(layoutMainVC); } + public boolean isFullScreen() { + return fullScreen; + } + public void setAsFullscreen(UserRequest ureq) { ChiefController cc = (ChiefController) Windows.getWindows(ureq).getAttribute("AUTHCHIEFCONTROLLER"); if (cc instanceof BaseChiefController) { @@ -181,7 +185,7 @@ public class LayoutMain3ColsController extends MainLayoutBasicController impleme if (fullScreen) { if(thebaseChief != null) { thebaseChief.removeBodyCssClass("b_full_screen"); - } else { + } else if (ureq != null){ ChiefController cc = (ChiefController) Windows.getWindows(ureq).getAttribute("AUTHCHIEFCONTROLLER"); if (cc instanceof BaseChiefController) { thebaseChief = (BaseChiefController) cc; diff --git a/src/main/java/org/olat/core/gui/control/ConfigurationChangedListener.java b/src/main/java/org/olat/core/gui/control/ConfigurationChangedListener.java new file mode 100644 index 00000000000..afd530130c8 --- /dev/null +++ b/src/main/java/org/olat/core/gui/control/ConfigurationChangedListener.java @@ -0,0 +1,34 @@ +/** + * <a href="http://www.openolat.org"> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * frentix GmbH, http://www.frentix.com + * <p> + */ +package org.olat.core.gui.control; + +/** + * Simple interface to propagate the news "configuration has changed" + * through wrappers and controllers. + * + * + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + * + */ +public interface ConfigurationChangedListener { + + public void configurationChanged(); + +} diff --git a/src/main/java/org/olat/core/gui/control/generic/title/TitledWrapperController.java b/src/main/java/org/olat/core/gui/control/generic/title/TitledWrapperController.java index c666340510c..2d1e5d0c25e 100644 --- a/src/main/java/org/olat/core/gui/control/generic/title/TitledWrapperController.java +++ b/src/main/java/org/olat/core/gui/control/generic/title/TitledWrapperController.java @@ -31,6 +31,7 @@ import java.util.List; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.Component; import org.olat.core.gui.components.velocity.VelocityContainer; +import org.olat.core.gui.control.ConfigurationChangedListener; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.Event; import org.olat.core.gui.control.WindowControl; @@ -53,7 +54,7 @@ import org.olat.core.util.StringHelper; * Initial Date: 21.06.2007 <br> * @author Lavinia Dumitrescu, Florian Gnägi */ -public class TitledWrapperController extends BasicController implements CloneableController, Activateable2 { +public class TitledWrapperController extends BasicController implements CloneableController, Activateable2, ConfigurationChangedListener { private static final String COMPONENT_NAME = "child"; //Velocity variable @@ -130,7 +131,14 @@ public class TitledWrapperController extends BasicController implements Cloneabl putInitialPanel(theVelocityContainer); } - + + @Override + public void configurationChanged() { + if(contentController instanceof ConfigurationChangedListener) { + ((ConfigurationChangedListener)contentController).configurationChanged(); + } + } + protected void doDispose() { if (descriptionController != null) { descriptionController.dispose(); diff --git a/src/main/java/org/olat/course/nodes/scorm/ScormRunController.java b/src/main/java/org/olat/course/nodes/scorm/ScormRunController.java index e5159e6c633..9c0afa1674d 100644 --- a/src/main/java/org/olat/course/nodes/scorm/ScormRunController.java +++ b/src/main/java/org/olat/course/nodes/scorm/ScormRunController.java @@ -34,12 +34,12 @@ import org.olat.core.gui.components.Window; import org.olat.core.gui.components.panel.Panel; import org.olat.core.gui.components.tree.TreeEvent; import org.olat.core.gui.components.velocity.VelocityContainer; +import org.olat.core.gui.control.ConfigurationChangedListener; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.ControllerEventListener; import org.olat.core.gui.control.Event; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.controller.BasicController; -import org.olat.core.id.Identity; import org.olat.core.logging.AssertException; import org.olat.core.util.CodeHelper; import org.olat.core.util.event.GenericEventListener; @@ -66,7 +66,7 @@ import org.olat.util.logging.activity.LoggingResourceable; * * @author Felix Jost */ -public class ScormRunController extends BasicController implements ScormAPICallback, GenericEventListener { +public class ScormRunController extends BasicController implements ScormAPICallback, GenericEventListener, ConfigurationChangedListener { private ModuleConfiguration config; private File cpRoot; @@ -83,8 +83,6 @@ public class ScormRunController extends BasicController implements ScormAPICallb private UserCourseEnvironment userCourseEnv; private ChooseScormRunModeForm chooseScormRunMode; private boolean isPreview; - - private Identity identity; private boolean isAssessable; /** @@ -108,7 +106,6 @@ public class ScormRunController extends BasicController implements ScormAPICallb this.userCourseEnv = userCourseEnv; this.config = config; this.scormNode = scormNode; - this.identity = ureq.getIdentity(); addLoggingResourceable(LoggingResourceable.wrap(scormNode)); init(ureq); @@ -332,6 +329,11 @@ public class ScormRunController extends BasicController implements ScormAPICallb return (config.getBooleanEntry(NodeEditController.CONFIG_COMPONENT_MENU).booleanValue()); } + @Override + public void configurationChanged() { + scormDispC.configurationChanged(); + } + /** * @see org.olat.core.gui.control.DefaultController#doDispose(boolean) */ diff --git a/src/main/java/org/olat/course/run/RunMainController.java b/src/main/java/org/olat/course/run/RunMainController.java index aedd952d143..570c0902742 100644 --- a/src/main/java/org/olat/course/run/RunMainController.java +++ b/src/main/java/org/olat/course/run/RunMainController.java @@ -52,6 +52,7 @@ import org.olat.core.gui.components.tree.TreeEvent; import org.olat.core.gui.components.tree.TreeModel; import org.olat.core.gui.components.tree.TreeNode; import org.olat.core.gui.components.velocity.VelocityContainer; +import org.olat.core.gui.control.ConfigurationChangedListener; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.Event; import org.olat.core.gui.control.WindowControl; @@ -995,12 +996,20 @@ public class RunMainController extends MainLayoutBasicController implements Gene } } else if (event instanceof CourseConfigEvent) { + if(currentNodeController instanceof ConfigurationChangedListener) { + //give to opportunity to close popups ... + ((ConfigurationChangedListener)currentNodeController).configurationChanged(); + } dispose(); } else if (event instanceof EntryChangedEvent && ((EntryChangedEvent)event).getChange()!=EntryChangedEvent.MODIFIED_AT_PUBLISH) { //courseRepositoryEntry changed (e.g. fired at course access rule change) EntryChangedEvent repoEvent = (EntryChangedEvent) event; if (courseRepositoryEntry.getKey().equals(repoEvent.getChangedEntryKey()) && repoEvent.getChange() == EntryChangedEvent.MODIFIED) { + if(currentNodeController instanceof ConfigurationChangedListener) { + //give to opportunity to close popups ... + ((ConfigurationChangedListener)currentNodeController).configurationChanged(); + } dispose(); } } diff --git a/src/main/java/org/olat/modules/scorm/ScormAPIandDisplayController.java b/src/main/java/org/olat/modules/scorm/ScormAPIandDisplayController.java index 97c4fca5efb..8151c632af2 100644 --- a/src/main/java/org/olat/modules/scorm/ScormAPIandDisplayController.java +++ b/src/main/java/org/olat/modules/scorm/ScormAPIandDisplayController.java @@ -26,18 +26,15 @@ package org.olat.modules.scorm; import java.io.File; -import java.util.Collections; import java.util.Iterator; import java.util.Locale; import java.util.Map; -import org.olat.core.CoreSpringFactory; import org.olat.core.commons.fullWebApp.LayoutMain3ColsBackController; import org.olat.core.commons.fullWebApp.LayoutMain3ColsController; import org.olat.core.commons.fullWebApp.LayoutMain3ColsPreviewController; import org.olat.core.commons.modules.bc.FolderConfig; import org.olat.core.dispatcher.mapper.Mapper; -import org.olat.core.dispatcher.mapper.MapperService; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.Component; import org.olat.core.gui.components.htmlheader.jscss.JSAndCSSComponent; @@ -48,6 +45,7 @@ import org.olat.core.gui.components.tree.MenuTree; import org.olat.core.gui.components.tree.TreeEvent; import org.olat.core.gui.components.tree.TreeNode; import org.olat.core.gui.components.velocity.VelocityContainer; +import org.olat.core.gui.control.ConfigurationChangedListener; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.Event; import org.olat.core.gui.control.WindowControl; @@ -70,11 +68,8 @@ import org.olat.course.CourseModule; * the sco api calls to the scorm RTE backend. It provides also an navigation to * navigate in the tree with "pre" "next" buttons. */ -public class ScormAPIandDisplayController extends MainLayoutBasicController { - //private static final String PACKAGE = Util.getPackageName(ScormAPIandDisplayController.class); +public class ScormAPIandDisplayController extends MainLayoutBasicController implements ConfigurationChangedListener { - // private static final String ACTIVITY_CONTENTPACKING_GET_FILE = - // "CONTENTPACKING_GET_FILE"; protected static final String LMS_INITIALIZE = "LMSInitialize"; protected static final String LMS_GETVALUE = "LMSGetValue"; protected static final String LMS_SETVALUE = "LMSSetValue"; @@ -340,6 +335,17 @@ public class ScormAPIandDisplayController extends MainLayoutBasicController { scormAdapter.launchItem(scormId); iframectr.setCurrentURI(identifierRes); } + + @Override + public void configurationChanged() { + if(columnLayoutCtr instanceof LayoutMain3ColsBackController) { + LayoutMain3ColsBackController layoutCtr = (LayoutMain3ColsBackController)columnLayoutCtr; + layoutCtr.deactivate(); + } else if(columnLayoutCtr instanceof LayoutMain3ColsController) { + LayoutMain3ColsController layoutCtr = (LayoutMain3ColsController)columnLayoutCtr; + layoutCtr.deactivate(null); + } + } /** * @see org.olat.core.gui.control.DefaultController#doDispose(boolean) -- GitLab