/** * <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.commons.fullWebApp; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.Component; import org.olat.core.gui.components.link.Link; import org.olat.core.gui.components.link.LinkFactory; import org.olat.core.gui.components.velocity.VelocityContainer; 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.MainLayoutBasicController; import org.olat.core.gui.control.generic.layout.MainLayout3ColumnsController; /** * <h3>Description:</h3> This layouter controller provides a fullscreen view * with a back-link * <p> * <h3>Events thrown by this controller:</h3> * <ul> * <li>Event.BACK_EVENT</li> * </ul> * Initial Date: 21.01.2008 <br> * * @author Florian Gnaegi, frentix GmbH, http://www.frentix.com */ public class LayoutMain3ColsBackController extends MainLayoutBasicController implements MainLayout3ColumnsController { private LayoutMain3ColsController layoutCtr; private VelocityContainer backVC; private Link backLink; private boolean fullScreen = false; private ChiefController thebaseChief; /** * Constructor for creating a 3 col based menu on the main area * * @param ureq * @param wControl * @param col1 * usually the left column * @param col2 * usually the right column * @param col3 * usually the content column * @param layoutConfigKey * identificator for this layout to persist the users column * width settings */ public LayoutMain3ColsBackController(UserRequest ureq, WindowControl wControl, Component col1, Component col3, String layoutConfigKey) { super(ureq, wControl); // create a wrapper velocity container that contains the back link and // normal main layout backVC = createVelocityContainer("main_back"); // create layout and add it to main view layoutCtr = new LayoutMain3ColsController(ureq, wControl, col1, col3, layoutConfigKey); listenTo(layoutCtr); backVC.put("3collayout", layoutCtr.getInitialComponent()); // create close link backLink = LinkFactory.createLinkBack(backVC, this); // finish: use wrapper as view putInitialPanel(backVC); } /** * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest, * org.olat.core.gui.components.Component, * org.olat.core.gui.control.Event) */ public void event(UserRequest ureq, Component source, Event event) { if (source == backLink) { // remove the preview workflow from the stack and notify listeners // about the back click deactivate();// fxdiff FXOLAT-116: SCORM improvements fireEvent(ureq, Event.BACK_EVENT); } } @Override public Component getInitialComponent() { throw new RuntimeException("please use activate() instead"); } /** * Activate this back workflow */ public void activate() { getWindowControl().pushToMainArea(backVC); } public boolean isFullScreen() { return fullScreen; } public void setAsFullscreen() { ChiefController cc = getWindowControl().getWindowBackOffice().getChiefController(); if (cc != null) { thebaseChief = cc; thebaseChief.getScreenMode().setMode(Mode.full); } fullScreen = true; } /** * Deactivates back controller. Please do use this method here instead of * getWindowControl().pop() ! */ public void deactivate() { getWindowControl().pop(); if (fullScreen && thebaseChief != null) { thebaseChief.getScreenMode().setMode(Mode.standard); } } @Override protected void doDispose() { // child controller autodisposed thebaseChief=null; } // // Methods from the 3 col layout: // @Override public void hideCol1(boolean hide) { this.layoutCtr.hideCol1(hide); } @Override public void hideCol2(boolean hide) { this.layoutCtr.hideCol2(hide); } public void hideCol3(boolean hide) { // ignore this: col3 is mandatory } public void setCol1(Component col1Component) { this.layoutCtr.setCol1(col1Component); } public void setCol2(Component col2Component) { this.layoutCtr.setCol2(col2Component); } public void setCol3(Component col3Component) { this.layoutCtr.setCol3(col3Component); } public void addCssClassToMain(String cssClass) { this.layoutCtr.addCssClassToMain(cssClass); } public void addDisposableChildController(Controller toBedisposedControllerOnDispose) { this.layoutCtr.addDisposableChildController(toBedisposedControllerOnDispose); } public void removeCssClassFromMain(String cssClass) { this.layoutCtr.removeCssClassFromMain(cssClass); } }