diff --git a/src/main/java/org/olat/core/commons/fullWebApp/BaseFullWebappWindowControl.java b/src/main/java/org/olat/core/commons/fullWebApp/BaseFullWebappWindowControl.java index 2064ef73107b8be9a6a2b156678fbca80ab28bc9..018a975c545a4e1317c33a6d58a2f8bbc0757057 100644 --- a/src/main/java/org/olat/core/commons/fullWebApp/BaseFullWebappWindowControl.java +++ b/src/main/java/org/olat/core/commons/fullWebApp/BaseFullWebappWindowControl.java @@ -20,6 +20,9 @@ package org.olat.core.commons.fullWebApp; import org.olat.core.gui.components.Component; +import org.olat.core.gui.control.ChiefController; +import org.olat.core.gui.control.Controller; +import org.olat.core.gui.control.ScreenMode.Mode; import org.olat.core.gui.control.WindowBackOffice; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.WindowControlInfoImpl; @@ -39,6 +42,8 @@ class BaseFullWebappWindowControl implements WindowControl { private final WindowControlInfo wci; private final WindowBackOffice wbo; private final BaseFullWebappController webappCtrl; + + private Component fullScreenCmp; public BaseFullWebappWindowControl(BaseFullWebappController webappCtrl, WindowBackOffice wbo) { this.wbo = wbo; @@ -46,17 +51,12 @@ class BaseFullWebappWindowControl implements WindowControl { wci = new WindowControlInfoImpl(webappCtrl, null); } - /** - * @see org.olat.core.gui.control.WindowControl#pushToMainArea(org.olat.core.gui.components.Component) - */ + @Override public void pushToMainArea(Component newMainArea) { webappCtrl.getCurrentGuiStack().pushContent(newMainArea); } - /** - * @see org.olat.core.gui.control.WindowControl#pushAsModalDialog(java.lang.String, - * org.olat.core.gui.components.Component) - */ + @Override public void pushAsModalDialog(Component newModalDialog) { webappCtrl.getCurrentGuiStack().pushModalDialog(newModalDialog); } @@ -66,17 +66,28 @@ class BaseFullWebappWindowControl implements WindowControl { webappCtrl.getCurrentGuiStack().pushCallout(comp, targetId, settings); } - /** - * @see org.olat.core.gui.control.WindowControl#pop() - */ + @Override + public void pushFullScreen(Controller ctrl, String bodyClass) { + ChiefController cc = getWindowBackOffice().getChiefController(); + String businessPath = ctrl.getWindowControlForDebug().getBusinessControl().getAsString(); + cc.getScreenMode().setMode(Mode.full, businessPath, bodyClass); + fullScreenCmp = ctrl.getInitialComponent(); + webappCtrl.getCurrentGuiStack().pushContent(fullScreenCmp); + } + + @Override public void pop() { // reactivate latest dialog from stack, dumping current one - webappCtrl.getCurrentGuiStack().popContent(); + Component popedComponent = webappCtrl.getCurrentGuiStack().popContent(); + if(popedComponent != null && popedComponent == fullScreenCmp) { + String businessPath = getBusinessControl().getAsString(); + ChiefController cc = getWindowBackOffice().getChiefController(); + cc.getScreenMode().setMode(Mode.standard, businessPath); + fullScreenCmp = null; + } } - /** - * @see org.olat.core.gui.control.WindowControl#setInfo(java.lang.String) - */ + @Override public void setInfo(String info) { webappCtrl.getGUIMessage().setInfo(info); webappCtrl.getGUIMsgPanel().setContent(webappCtrl.getGUIMsgVc()); @@ -84,34 +95,34 @@ class BaseFullWebappWindowControl implements WindowControl { // setInfo is called input guimsgPanel into the correct place } - /** - * @see org.olat.core.gui.control.WindowControl#setError(java.lang.String) - */ + @Override public void setError(String error) { webappCtrl.getGUIMessage().setError(error); webappCtrl.getGUIMsgPanel().setContent(webappCtrl.getGUIMsgVc()); } - /** - * @see org.olat.core.gui.control.WindowControl#setWarning(java.lang.String) - */ + @Override public void setWarning(String warning) { webappCtrl.getGUIMessage().setWarn(warning); webappCtrl.getGUIMsgPanel().setContent(webappCtrl.getGUIMsgVc()); } + @Override public WindowControlInfo getWindowControlInfo() { return wci; } + @Override public void makeFlat() { throw new AssertException("should never be called!"); } + @Override public BusinessControl getBusinessControl() { return BusinessControlFactory.getInstance().getEmptyBusinessControl(); } + @Override public WindowBackOffice getWindowBackOffice() { return wbo; } diff --git a/src/main/java/org/olat/core/commons/services/doceditor/ui/DocEditorFullscreenController.java b/src/main/java/org/olat/core/commons/services/doceditor/ui/DocEditorFullscreenController.java index d6188bf74d55a06456e2a3e5fc03be1d0413e8c7..d719e8977dc9b27853fdae026dcb0f283f7e0e45 100644 --- a/src/main/java/org/olat/core/commons/services/doceditor/ui/DocEditorFullscreenController.java +++ b/src/main/java/org/olat/core/commons/services/doceditor/ui/DocEditorFullscreenController.java @@ -23,10 +23,8 @@ import org.olat.core.commons.services.doceditor.DocEditorConfigs; import org.olat.core.commons.services.doceditor.DocEditorSecurityCallback; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.Component; -import org.olat.core.gui.control.ChiefController; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.Event; -import org.olat.core.gui.control.ScreenMode.Mode; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.controller.BasicController; import org.olat.core.util.vfs.VFSLeaf; @@ -71,30 +69,21 @@ public class DocEditorFullscreenController extends BasicController { // } - @SuppressWarnings("deprecation") private void doOpenEditor() { - ChiefController cc = getWindowControl().getWindowBackOffice().getChiefController(); - String businessPath = editorCtrl.getWindowControlForDebug().getBusinessControl().getAsString(); - cc.getScreenMode().setMode(Mode.full, businessPath); - cc.addBodyCssClass("o_doceditor_body"); - getWindowControl().pushToMainArea(editorCtrl.getInitialComponent()); + getWindowControl().pushFullScreen(editorCtrl, "o_doceditor_body"); } private void doCloseEditor() { getWindowControl().pop(); - String businessPath = getWindowControl().getBusinessControl().getAsString(); - ChiefController cc = getWindowControl().getWindowBackOffice().getChiefController(); - cc.getScreenMode().setMode(Mode.standard, businessPath); - cc.removeBodyCssClass("o_doceditor_body"); - removeAsListenerAndDispose(editorCtrl); editorCtrl = null; } - @Override protected void doDispose() { - // + if(editorCtrl != null) { + removeAsListenerAndDispose(editorCtrl); + editorCtrl = null; + } } - } diff --git a/src/main/java/org/olat/core/gui/components/panel/SimpleStackedPanel.java b/src/main/java/org/olat/core/gui/components/panel/SimpleStackedPanel.java index aa91e0eadefcb8ee152f3d39b1cb6731ac1f396c..53d8bc3921b77c0510acbac8f254297325fadd51 100644 --- a/src/main/java/org/olat/core/gui/components/panel/SimpleStackedPanel.java +++ b/src/main/java/org/olat/core/gui/components/panel/SimpleStackedPanel.java @@ -131,22 +131,20 @@ public class SimpleStackedPanel extends AbstractComponent implements StackedPane } @Override - public void popContent() { + public Component popContent() { int stackHeight = stackList.size(); if (stackHeight < 1) throw new AssertException("stack was empty!"); if (curContent == null) throw new AssertException("stackHeight not zero, but curContent was null!"); - stackList.remove(stackHeight - 1); // remove the top component + Component popedComponent = stackList.remove(stackHeight - 1); // remove the top component if (stackHeight == 1) { // after pop, the content is null curContent = null; } else { // stackHeight > 1 curContent = stackList.get(stackHeight - 2); } setDirty(true); + return popedComponent; } - /** - * @see org.olat.core.gui.components.Component#getExtendedDebugInfo() - */ @Override public String getExtendedDebugInfo() { StringBuilder sb = new StringBuilder(); diff --git a/src/main/java/org/olat/core/gui/components/panel/StackedPanel.java b/src/main/java/org/olat/core/gui/components/panel/StackedPanel.java index 4732f21a623644570dff22bd0200ad8dc5a50c35..e0ab6e10ec2c95b1893536a983ceb16706cd5925 100644 --- a/src/main/java/org/olat/core/gui/components/panel/StackedPanel.java +++ b/src/main/java/org/olat/core/gui/components/panel/StackedPanel.java @@ -42,7 +42,7 @@ public interface StackedPanel extends ComponentCollection { public void setContent(Component component); - public void popContent(); + public Component popContent(); /** * @param newContent may not be null diff --git a/src/main/java/org/olat/core/gui/components/stack/BreadcrumbedStackedPanel.java b/src/main/java/org/olat/core/gui/components/stack/BreadcrumbedStackedPanel.java index 36ea981a5b5407c55b3f2c92986db8a2b38569eb..cfb7b07bb4287fb92f7451b5aa0922f5cc5de521 100644 --- a/src/main/java/org/olat/core/gui/components/stack/BreadcrumbedStackedPanel.java +++ b/src/main/java/org/olat/core/gui/components/stack/BreadcrumbedStackedPanel.java @@ -285,12 +285,17 @@ public class BreadcrumbedStackedPanel extends Panel implements StackedPanel, Bre } @Override - public void popContent() { + public Component popContent() { + Component component = null; if(stack.size() > 1) { Link link = stack.remove(stack.size() - 1); BreadCrumb crumb = (BreadCrumb)link.getUserObject(); + if(crumb.getController() != null) { + component = crumb.getController().getInitialComponent(); + } crumb.dispose(); } + return component; } @Override @@ -378,7 +383,7 @@ public class BreadcrumbedStackedPanel extends Panel implements StackedPanel, Bre Link link = stack.get(i); popedCrumb = (BreadCrumb)link.getUserObject(); } - return popedCrumb.getController(); + return popedCrumb == null ? null : popedCrumb.getController(); } return null; } diff --git a/src/main/java/org/olat/core/gui/control/LocalWindowControl.java b/src/main/java/org/olat/core/gui/control/LocalWindowControl.java index ed2b06e6c43a76233325372d56fc6efe057a76e5..6a762f222f44683c380c9ee024b1fbde85a3823b 100644 --- a/src/main/java/org/olat/core/gui/control/LocalWindowControl.java +++ b/src/main/java/org/olat/core/gui/control/LocalWindowControl.java @@ -42,7 +42,6 @@ public class LocalWindowControl implements WindowControl { private static final Logger log = Tracing.createLoggerFor(LocalWindowControl.class); private final WindowControl origWControl; private int localHeight = 0; - //private final Controller controller; private final WindowControlInfoImpl wci; LocalWindowControl(WindowControl origWControl, DefaultController defaultcontroller) { @@ -50,9 +49,6 @@ public class LocalWindowControl implements WindowControl { wci = new WindowControlInfoImpl(defaultcontroller, (origWControl == null? null: origWControl.getWindowControlInfo())); } - /** - * @see org.olat.core.gui.control.WindowControl#pop() - */ @Override public void pop() { if (localHeight > 0) { @@ -63,9 +59,7 @@ public class LocalWindowControl implements WindowControl { } } - /** - * @see org.olat.core.gui.control.WindowControl#pushAsModalDialog(java.lang.String, org.olat.core.gui.components.Component) - */ + @Override public void pushAsModalDialog(Component comp) { origWControl.pushAsModalDialog(comp); localHeight++; @@ -77,36 +71,34 @@ public class LocalWindowControl implements WindowControl { localHeight++; } - /** - * @see org.olat.core.gui.control.WindowControl#pushToMainArea(org.olat.core.gui.components.Component) - */ + @Override + public void pushFullScreen(Controller ctrl, String bodyClass) { + origWControl.pushFullScreen(ctrl, bodyClass); + localHeight++; + } + + @Override public void pushToMainArea(Component comp) { origWControl.pushToMainArea(comp); localHeight++; } - /** - * @see org.olat.core.gui.control.WindowControl#setError(java.lang.String) - */ + @Override public void setError(String string) { origWControl.setError(string); } - /** - * @see org.olat.core.gui.control.WindowControl#setInfo(java.lang.String) - */ + @Override public void setInfo(String string) { origWControl.setInfo(string); } - /** - * @see org.olat.core.gui.control.WindowControl#setWarning(java.lang.String) - */ + @Override public void setWarning(String string) { origWControl.setWarning(string); } - - + + @Override public void makeFlat() { for (int i = 0; i < localHeight; i++) { origWControl.pop(); @@ -114,20 +106,17 @@ public class LocalWindowControl implements WindowControl { localHeight = 0; } + @Override public WindowControlInfo getWindowControlInfo() { return wci; } - /* (non-Javadoc) - * @see org.olat.core.gui.control.WindowControl#getBusinessControl() - */ + @Override public BusinessControl getBusinessControl() { return origWControl.getBusinessControl(); } - /* (non-Javadoc) - * @see org.olat.core.gui.control.WindowControl#getWindowBackOffice() - */ + @Override public WindowBackOffice getWindowBackOffice() { return origWControl.getWindowBackOffice(); } diff --git a/src/main/java/org/olat/core/gui/control/ScreenMode.java b/src/main/java/org/olat/core/gui/control/ScreenMode.java index cba621243e87b2dc3477748a8a341bfcf0054b02..4e703fa475cb10ff0036dbe16fbd1205c54ab6cf 100644 --- a/src/main/java/org/olat/core/gui/control/ScreenMode.java +++ b/src/main/java/org/olat/core/gui/control/ScreenMode.java @@ -29,6 +29,7 @@ public class ScreenMode { private Mode wish; private boolean fullScreen; private String businessPath; + private String fullScreenBodyClass; public boolean isFullScreen() { return fullScreen; @@ -44,9 +45,14 @@ public class ScreenMode { * @param businessPath The business path to beautify the reload (in the form [Repository:3781][CourseNode:23468732]) (optional) */ public void setMode(Mode mode, String businessPath) { + setMode(mode, businessPath, fullScreenBodyClass); + } + + public void setMode(Mode mode, String businessPath, String fullScreenBodyClass) { fullScreen = Mode.full.equals(mode); this.wish = mode; this.businessPath = businessPath; + this.fullScreenBodyClass = fullScreenBodyClass; } public boolean isWishFullScreen() { @@ -74,6 +80,10 @@ public class ScreenMode { return businessPath; } + public String getFullScreenBodyClass() { + return fullScreenBodyClass; + } + public boolean wishFullScreen(boolean erase) { Mode w = wish; if(erase) { diff --git a/src/main/java/org/olat/core/gui/control/WindowControl.java b/src/main/java/org/olat/core/gui/control/WindowControl.java index 4ecc320ac5e2ba7fb8433a09cba23e5621b6c225..f731bdde04826cbb3b282693f7dd09d80c090b39 100644 --- a/src/main/java/org/olat/core/gui/control/WindowControl.java +++ b/src/main/java/org/olat/core/gui/control/WindowControl.java @@ -63,7 +63,13 @@ public interface WindowControl { * @param targetId */ public void pushAsCallout(Component comp, String targetId, CalloutSettings settings); - + + /** + * Push a controller to full screen mode. + * @param ctrl + * @param bodyClass An additional body class (optional) + */ + public void pushFullScreen(Controller ctrl, String bodyClass); /** * diff --git a/src/main/java/org/olat/core/gui/control/guistack/GuiStack.java b/src/main/java/org/olat/core/gui/control/guistack/GuiStack.java index 7b4022fe1214659f81f8a49144c29677ea45e3b3..82fb79052fb9084395563e8be0cbea3f720b40d1 100644 --- a/src/main/java/org/olat/core/gui/control/guistack/GuiStack.java +++ b/src/main/java/org/olat/core/gui/control/guistack/GuiStack.java @@ -30,8 +30,6 @@ import org.olat.core.gui.components.panel.StackedPanel; import org.olat.core.gui.control.generic.closablewrapper.CalloutSettings; /** - * Description:<br> - * TODO: Felix Jost Class Description for Trans * * <P> * Initial Date: 24.01.2007 <br> @@ -52,15 +50,9 @@ public interface GuiStack { */ public void pushCallout(Component content, String targetId, CalloutSettings settings); - /** - * @see org.olat.core.gui.control.GuiStackHandle#pushContent(org.olat.core.gui.components.Component) - */ public void pushContent(Component newContent); - /** - * @see org.olat.core.gui.control.GuiStackHandle#popContent() - */ - public void popContent(); + public Component popContent(); /** * @return diff --git a/src/main/java/org/olat/core/gui/control/guistack/GuiStackNiceImpl.java b/src/main/java/org/olat/core/gui/control/guistack/GuiStackNiceImpl.java index 40fd4df6d224fda3f3c05017f7beeea25425e5df..dfb6fd59e9b9ca61f5e5a499cff069e77bbfbc59 100644 --- a/src/main/java/org/olat/core/gui/control/guistack/GuiStackNiceImpl.java +++ b/src/main/java/org/olat/core/gui/control/guistack/GuiStackNiceImpl.java @@ -164,9 +164,7 @@ public class GuiStackNiceImpl implements GuiStack { modalLayers++; } - /** - * @see org.olat.core.gui.control.GuiStackHandle#pushContent(org.olat.core.gui.components.Component) - */ + @Override public void pushContent(Component newContent) { if (modalLayers > 0) { // if, in a modaldialog, a push-to-main-area is issued, put it on the modal stack. @@ -178,20 +176,16 @@ public class GuiStackNiceImpl implements GuiStack { } } - /** - * @see org.olat.core.gui.control.GuiStackHandle#popContent() - */ - public void popContent() { + @Override + public Component popContent() { + Component popComponent; if (modalLayers > 0) { modalLayers--; - modalPanel.popContent(); - if (modalLayers == 0) { - // unblock background panel - //panel.setEnabled(true); - } + popComponent = modalPanel.popContent(); } else { - panel.popContent(); + popComponent = panel.popContent(); } + return popComponent; } /** diff --git a/src/main/java/org/olat/core/gui/util/WindowControlMocker.java b/src/main/java/org/olat/core/gui/util/WindowControlMocker.java index aaa82ebe515561ed6c3edec9c89c6398f28fbde3..e3464ac2439cb2221faba7ba49d67436b4f454f7 100644 --- a/src/main/java/org/olat/core/gui/util/WindowControlMocker.java +++ b/src/main/java/org/olat/core/gui/util/WindowControlMocker.java @@ -65,6 +65,11 @@ public class WindowControlMocker implements WindowControl{ // } + @Override + public void pushFullScreen(Controller ctrl, String bodyClass) { + // + } + @Override public void pop() { // diff --git a/src/main/java/org/olat/core/id/context/StackedBusinessWindowControl.java b/src/main/java/org/olat/core/id/context/StackedBusinessWindowControl.java index 4e2da23ab6180ecb0cd5dca33b5a6638e3e2a8f9..7420f3f466c00b66adcbf702abecaed1dbfd6dda 100644 --- a/src/main/java/org/olat/core/id/context/StackedBusinessWindowControl.java +++ b/src/main/java/org/olat/core/id/context/StackedBusinessWindowControl.java @@ -29,6 +29,7 @@ package org.olat.core.id.context; import org.olat.core.gui.components.Component; +import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowBackOffice; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.generic.closablewrapper.CalloutSettings; @@ -51,24 +52,29 @@ public class StackedBusinessWindowControl implements WindowControl { this.businessControl = businessControl; } - + + @Override public BusinessControl getBusinessControl() { // inject the new business control here return businessControl; } + @Override public WindowControlInfo getWindowControlInfo() { return origWControl.getWindowControlInfo(); } + @Override public void makeFlat() { origWControl.makeFlat(); } + @Override public void pop() { origWControl.pop(); } + @Override public void pushAsModalDialog(Component comp) { origWControl.pushAsModalDialog(comp); } @@ -78,25 +84,33 @@ public class StackedBusinessWindowControl implements WindowControl { origWControl.pushAsCallout(comp, targetId, settings); } + @Override + public void pushFullScreen(Controller ctrl, String bodyClass) { + origWControl.pushFullScreen(ctrl, bodyClass); + } + + @Override public void pushToMainArea(Component comp) { origWControl.pushToMainArea(comp); } + @Override public void setError(String string) { origWControl.setError(string); } + @Override public void setInfo(String string) { origWControl.setInfo(string); } + @Override public void setWarning(String string) { origWControl.setWarning(string); } + @Override public WindowBackOffice getWindowBackOffice() { return origWControl.getWindowBackOffice(); } - - } diff --git a/src/main/java/org/olat/restapi/support/ErrorWindowControl.java b/src/main/java/org/olat/restapi/support/ErrorWindowControl.java index 2b33897877a1a033cac361c651168351cec30f48..4c42e6859cb50c453cd385e79f956be2be61fc15 100644 --- a/src/main/java/org/olat/restapi/support/ErrorWindowControl.java +++ b/src/main/java/org/olat/restapi/support/ErrorWindowControl.java @@ -20,6 +20,7 @@ package org.olat.restapi.support; import org.olat.core.gui.components.Component; +import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowBackOffice; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.generic.closablewrapper.CalloutSettings; @@ -53,6 +54,9 @@ public class ErrorWindowControl implements WindowControl { @Override public void pushAsCallout(Component comp, String targetId, CalloutSettings settings) {/* */} + @Override + public void pushFullScreen(Controller ctrl, String bodyClass) {/* */} + @Override public void pop() {/* */} diff --git a/src/test/java/org/olat/course/nodes/en/EnrollmentManagerConcurrentTest.java b/src/test/java/org/olat/course/nodes/en/EnrollmentManagerConcurrentTest.java index 9d8d2cd0f5de16e645bd83b646b2bdbc073bc180..e889b1c94a6e92d0c88bb4778d75212d5783e62f 100644 --- a/src/test/java/org/olat/course/nodes/en/EnrollmentManagerConcurrentTest.java +++ b/src/test/java/org/olat/course/nodes/en/EnrollmentManagerConcurrentTest.java @@ -49,6 +49,7 @@ import org.olat.basesecurity.OrganisationService; import org.olat.core.commons.persistence.DB; import org.olat.core.commons.persistence.DBFactory; import org.olat.core.gui.components.Component; +import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.WindowBackOffice; import org.olat.core.gui.control.WindowControl; import org.olat.core.gui.control.generic.closablewrapper.CalloutSettings; @@ -436,6 +437,8 @@ public class EnrollmentManagerConcurrentTest extends OlatTestCase implements Win public void pushToMainArea(Component comp){} public void pushAsModalDialog(Component comp){} @Override + public void pushFullScreen(Controller ctrl, String bodyClass) {/* */} + @Override public void pushAsCallout(Component comp, String targetId, CalloutSettings settings){} public void pop(){} public void setInfo(String string){}