Presenter maximizing or 'full-screeening' now updates the clients

Deleted some code no-longer used

git-svn-id: http://bigbluebutton.googlecode.com/svn/trunk@154 af16638f-c34d-0410-8cfa-b39d5352b314
This commit is contained in:
Denis Zgonjanin 2008-07-03 22:13:11 +00:00
parent 7aa7fa6292
commit 40276e414d
10 changed files with 53 additions and 351 deletions

View File

@ -5,7 +5,6 @@
<mx:Script>
<![CDATA[
import org.bigbluebutton.modules.presentation.FileUploadWindowMediatorTest;
import org.bigbluebutton.modules.presentation.PresentationPanelMediatorTest;
import org.bigbluebutton.modules.presentation.PresentationWindowMediatorTest;
import org.bigbluebutton.modules.presentation.PresentationApplicationTest;
import org.bigbluebutton.modules.presentation.TestSlidesDeck;
@ -41,7 +40,6 @@
ts.addTest(TestSlidesDeck.suite());
ts.addTest(PresentationApplicationTest.suite());
ts.addTest(PresentationWindowMediatorTest.suite());
ts.addTest(PresentationPanelMediatorTest.suite());
ts.addTest(FileUploadWindowMediatorTest.suite());
return ts;

View File

@ -48,6 +48,7 @@ package org.bigbluebutton.modules.presentation
public static const UPDATE_PAGE:String = "update page";
public static const ZOOM_SLIDE:String = "Zoom Slide";
public static const MOVE_SLIDE:String = "Move Slide";
public static const MAXIMIZE_PRESENTATION:String = "Maximize Presentation";
// List of Commands
public static const GOTO_PAGE_COMMAND : String = "PRESENTATION_GOTO_PAGE_COMMAND";

View File

@ -187,6 +187,22 @@ package org.bigbluebutton.modules.presentation.model.business
sendNotification(PresentationFacade.MOVE_SLIDE, new MoveNotifier(slideXPosition, slideYPosition));
}
/**
* Sends an event out for the clients to maximize the presentation module
*
*/
public function maximize():void{
presentationSO.send("maximizePresentation");
}
/**
* A callback method from the server to maximize the presentation
*
*/
public function maximizePresentation():void{
sendNotification(PresentationFacade.MAXIMIZE_PRESENTATION);
}
/**
* Send an event to the server to clear the presentation
*

View File

@ -1,146 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:thumb="org.bigbluebutton.modules.presentation.view*"
xmlns:pres="flexmdi.containers.*"
paddingBottom="0" paddingTop="0"
paddingLeft="0" paddingRight="0"
layout="vertical"
creationComplete="init()" xmlns:view="org.bigbluebutton.modules.presentation.view.*">
<mx:Script>
<![CDATA[
import org.bigbluebutton.common.Images;
import org.bigbluebutton.modules.presentation.model.vo.SlidesDeck;
import org.bigbluebutton.modules.presentation.PresentationFacade;
import mx.binding.utils.BindingUtils;
import mx.collections.ArrayCollection;
import mx.rpc.events.*;
import mx.controls.Alert;
import mx.events.DragEvent;
import mx.managers.DragManager;
import mx.managers.PopUpManager;
import mx.containers.TitleWindow;
import flash.geom.Point;
private var images:Images = new Images();
[Bindable] private var uploadIcon : Class = images.powerpoint;
[Bindable] private var connectIcon : Class = images.disconnect;
[Bindable] private var connectTooltip : String = "Disconnected";
[Bindable] private var sharingIcon : Class = images.link_break;
[Bindable] private var sharingTooltip : String = "Share presentation";
[Bindable] public var presenterIcon : Class = images.user_gray;
[Bindable] public var model:PresentationFacade = PresentationFacade.getInstance();
[Bindable] private var deck:SlidesDeck = model.presentation.decks;
public var uploadWindow : FileUploadWindow;
public function handleConnected(connected : Boolean) : void
{
if (connected) {
connectIcon = images.connect;
connectTooltip = "Connected";
} else {
connectIcon = images.disconnect;
connectTooltip = "Disconnected";
}
}
public function handleSharing(sharing : Boolean) : void
{
if (sharing) {
sharingIcon = images.link;
sharingTooltip = "Unshare presentation";
} else {
sharingIcon = images.link_break;
sharingTooltip = "Share presentation";
}
if (! model.presentation.isPresenter) sharePres.visible = false;
}
private function init():void
{
BindingUtils.bindSetter(handleConnected, model.presentation, "isConnected");
BindingUtils.bindSetter(handleSharing, model.presentation, "isSharing");
BindingUtils.bindSetter(handlePresenterControl, model.presentation, "isPresenter");
BindingUtils.bindSetter(handlePresenterName, model.presentation, "presenterName");
BindingUtils.bindSetter(handlePresentationLoaded, model.presentation, "presentationLoaded");
}
public function handlePresenterName(name : String) : void
{
presenterName.label = name;
}
public function handlePresentationLoaded(loaded : Boolean) : void
{
if (loaded) {
if (model.presentation.isPresenter) {
sharePres.visible = true;
}
thumbnailView.visible = true;
} else {
thumbnailView.visible = false;
if (model.presentation.isPresenter) {
sharePres.visible = false;
uploadPres.enabled = true;
}
}
}
public function handlePresenterControl(isPresenter : Boolean) : void
{
if (isPresenter) {
uploadPres.visible = true;
} else {
uploadPres.visible = true;
}
}
public function dragEnterHandler(event:DragEvent):void
{
var dropTarget : Button = event.currentTarget as Button;
if (event.dragSource.hasFormat('presenterUserid'))
DragManager.acceptDragDrop(dropTarget);
}
public function dragDropHandler(event:DragEvent):void
{
var presenterid : Number = Number(event.dragSource.dataForFormat('presenterUserid'));
var presentername : String = event.dragSource.dataForFormat('presenterUsername').toString();
PresentationFacade.getInstance().presentationApp.assignPresenter(presenterid, presentername);
}
]]>
</mx:Script>
<mx:Style source="presentation.css" />
<view:ThumbnailView id="thumbnailView" width="100%" height="100%" visible="false"/>
<mx:ControlBar width="100%">
<mx:Button id="uploadPres" icon="{uploadIcon}" visible="true"
width="20" height="20"
toolTip="Upload Powerpoint" click="dispatchEvent(new Event(PresentationPanelMediator.OPEN_UPLOAD))"/>
<mx:Button id="sharePres" icon="{sharingIcon}" visible="false"
width="20" height="20"
toolTip="{sharingTooltip}" click="dispatchEvent(new Event(PresentationPanelMediator.SHARE))"/>
<mx:Spacer width="100"/>
<mx:Label id="presenterLbl" text="Presenter:" />
<mx:Button id="presenterName" icon="{presenterIcon}" label="Presenter's Name"
labelPlacement="right" color="#993300"
dragEnter="dragEnterHandler(event)" dragDrop="dragDropHandler(event)"/>
<mx:Spacer width="100%"/>
<mx:Button id="connect" icon="{connectIcon}"
width="20" height="20" enabled="false"
toolTip="{connectTooltip}" click="dispatchEvent(new Event(PresentationPanelMediator.CONNECT))"/>
</mx:ControlBar>
</mx:Panel>

View File

@ -1,124 +0,0 @@
/**
* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
*
* Copyright (c) 2008 by respective authors (see below).
*
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License as published by the Free Software
* Foundation; either version 2.1 of the License, or (at your option) any later
* version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
package org.bigbluebutton.modules.presentation.view
{
import flash.events.Event;
import flash.geom.Point;
import mx.managers.PopUpManager;
import org.bigbluebutton.modules.presentation.PresentationFacade;
import org.bigbluebutton.modules.presentation.model.PresentationApplication;
import org.puremvc.as3.multicore.interfaces.IMediator;
import org.puremvc.as3.multicore.interfaces.INotification;
import org.puremvc.as3.multicore.patterns.mediator.Mediator;
/**
*
* @author Denis Zgonjanin
*
*/
public class PresentationPanelMediator extends Mediator implements IMediator
{
public static const NAME:String = "PresentationPanelMediator";
public static const CONNECT:String = "Connect to Presentation";
public static const SHARE:String = "Share Presentation";
public static const OPEN_UPLOAD:String = "Open File Upload Window"
public function PresentationPanelMediator(view:PresentationPanel)
{
super(NAME, view);
presentationPanel.addEventListener(CONNECT, connectToPresentation);
presentationPanel.addEventListener(SHARE, sharePresentation);
presentationPanel.addEventListener(OPEN_UPLOAD, openFileUploadWindow);
}
public function get presentationPanel():PresentationPanel{
return viewComponent as PresentationPanel;
}
override public function listNotificationInterests():Array{
return [
PresentationFacade.CLEAR_EVENT,
PresentationFacade.READY_EVENT,
PresentationFacade.VIEW_EVENT
];
}
override public function handleNotification(notification:INotification):void{
switch(notification.getName()){
case PresentationFacade.CLEAR_EVENT:
handleClearEvent();
break;
case PresentationFacade.READY_EVENT:
handleReadyEvent();
break;
case PresentationFacade.VIEW_EVENT:
handleViewEvent();
break;
}
}
private function handleClearEvent():void{
if (presentationPanel.model.presentation.isPresenter) return;
presentationPanel.thumbnailView.visible = false;
}
private function handleReadyEvent():void{
presentationPanel.thumbnailView.visible = false;
}
private function handleViewEvent():void{
presentationPanel.thumbnailView.visible = true;
}
private function connectToPresentation(e:Event) : void{
if (presentationPanel.model.presentation.isConnected) {
sendNotification(PresentationApplication.LEAVE);
} else {
sendNotification(PresentationApplication.JOIN);
}
}
private function sharePresentation(e:Event) : void{
if (presentationPanel.model.presentation.isSharing) {
sendNotification(PresentationApplication.SHARE, false);
presentationPanel.uploadPres.enabled = true;
} else {
sendNotification(PresentationApplication.SHARE, true);
presentationPanel.uploadPres.enabled = false;
}
}
private function openFileUploadWindow(e:Event) : void{
presentationPanel.uploadWindow = FileUploadWindow(PopUpManager.createPopUp( presentationPanel, FileUploadWindow, false));
var point1:Point = new Point();
// Calculate position of TitleWindow in Application's coordinates.
point1.x = presentationPanel.thumbnailView.x;
point1.y = presentationPanel.thumbnailView.y;
point1 = presentationPanel.thumbnailView.localToGlobal(point1);
presentationPanel.uploadWindow.x = point1.x + 25;
presentationPanel.uploadWindow.y = point1.y + 25;
}
}
}

View File

@ -6,7 +6,7 @@
paddingBottom="0" paddingTop="0"
paddingLeft="0" paddingRight="0"
layout="vertical" verticalScrollPolicy="off" horizontalScrollPolicy="off"
creationComplete="init()" focusStart="focusThumbnail()">
creationComplete="init()" focusStart="focusThumbnail()" maximize="sendMaximize()">
<mx:Script>
<![CDATA[
@ -68,6 +68,12 @@
//if (! model.presentation.isPresenter) sharePres.visible = false;
}
private function sendMaximize():void{
if (this.maximized){
dispatchEvent(new Event(PresentationWindowMediator.MAXIMIZE));
}
}
private function init():void
{
@ -97,7 +103,7 @@
if (loaded) {
if (model.presentation.isPresenter) {
//sharePres.visible = true;
dispatchEvent(new Event(PresentationPanelMediator.SHARE));
dispatchEvent(new Event(PresentationWindowMediator.SHARE));
}
thumbnailView.visible = true;
} else {
@ -165,6 +171,7 @@
this.resizable = false;
this.thumbnailView.myLoader.height = Capabilities.screenResolutionX - 100;
this.thumbnailView.myLoader.width = Capabilities.screenResolutionY - 200;
if (model.presentation.isPresenter) dispatchEvent(new Event(PresentationWindowMediator.MAXIMIZE));
} else {
/* Do something specific here if we switched to normal mode. */
this.maximizeRestoreBtn.visible = true;
@ -188,19 +195,12 @@
<mx:ControlBar width="100%">
<mx:Button id="uploadPres" icon="{uploadIcon}" visible="false"
width="20" height="20"
toolTip="Upload PDF Document" click="dispatchEvent(new Event(PresentationPanelMediator.OPEN_UPLOAD))"/>
<!--<mx:Button id="sharePres" visible="false" label=""
width="130" height="20" paddingBottom="0" paddingTop="0" paddingLeft="0" paddingRight="0"
toolTip="{sharingTooltip}" click="dispatchEvent(new Event(PresentationPanelMediator.SHARE))"/> -->
<!--<mx:Spacer width="100"/> -->
toolTip="Upload PDF Document" click="dispatchEvent(new Event(PresentationWindowMediator.OPEN_UPLOAD))"/>
<mx:Label id="presenterLbl" text="Presenter:" />
<mx:Button id="presenterName" icon="{presenterIcon}" toolTip="Presenter" label="Presenter's Name"
labelPlacement="right" color="#993300"
dragEnter="dragEnterHandler(event)" dragDrop="dragDropHandler(event)"/>
<mx:Spacer width="100%"/>
<!-- <mx:Button id="connect" icon="{connectIcon}"
width="20" height="20" enabled="false"
toolTip="{connectTooltip}" click="dispatchEvent(new Event(PresentationPanelMediator.CONNECT))"/>-->
<mx:Button id="fullScreen" label="Full Screen" click="toggleFullScreen()" />
</mx:ControlBar>

View File

@ -44,6 +44,7 @@ package org.bigbluebutton.modules.presentation.view
public static const SHARE:String = "Share Presentation";
public static const OPEN_UPLOAD:String = "Open File Upload Window"
public static const UNSHARE:String = "Unshare Presentation";
public static const MAXIMIZE:String = "Maximize Presentation";
/**
* The constructor. Registers the view component with this mediator
@ -57,6 +58,7 @@ package org.bigbluebutton.modules.presentation.view
view.addEventListener(SHARE, sharePresentation);
view.addEventListener(OPEN_UPLOAD, openFileUploadWindow);
view.addEventListener(UNSHARE, unsharePresentation);
view.addEventListener(MAXIMIZE, maximize);
}
/**
@ -80,6 +82,7 @@ package org.bigbluebutton.modules.presentation.view
return [
PresentationFacade.READY_EVENT,
PresentationFacade.VIEW_EVENT,
PresentationFacade.MAXIMIZE_PRESENTATION
];
}
@ -96,6 +99,9 @@ package org.bigbluebutton.modules.presentation.view
case PresentationFacade.VIEW_EVENT:
handleViewEvent();
break;
case PresentationFacade.MAXIMIZE_PRESENTATION:
handleMaximizeEvent();
break;
}
}
@ -117,6 +123,16 @@ package org.bigbluebutton.modules.presentation.view
presentationWindow.thumbnailView.visible = true;
}
/**
* Handles a received Maximize notification
*
*/
private function handleMaximizeEvent():void{
if (!presentationWindow.model.presentation.isPresenter){
presentationWindow.maximize();
}
}
/**
* Attemps to conenct to the presentation on the server
* @param e
@ -177,6 +193,10 @@ package org.bigbluebutton.modules.presentation.view
public function get proxy():PresentationDelegate{
return facade.retrieveProxy(PresentationDelegate.ID) as PresentationDelegate;
}
private function maximize(e:Event):void{
proxy.maximize();
}
}
}

View File

@ -65,10 +65,6 @@
myLoader.width += e.delta * 10;
myLoader.height += e.delta * 10;
}
//else{
// myLoader.percentHeight = 100;
// myLoader.percentWidth = 100;
//}
dispatchEvent(new Event(ThumbnailViewMediator.ZOOM));
}

View File

@ -110,7 +110,8 @@ package org.bigbluebutton.modules.presentation.view
override public function listNotificationInterests():Array{
return [
PresentationFacade.ZOOM_SLIDE,
PresentationFacade.MOVE_SLIDE
PresentationFacade.MOVE_SLIDE,
PresentationFacade.MAXIMIZE_PRESENTATION
];
}
@ -130,6 +131,10 @@ package org.bigbluebutton.modules.presentation.view
thumbnailView.myLoader.y = moveNote.newYPosition * thumbnailView.imageCanvas.height;
}
break;
case PresentationFacade.MAXIMIZE_PRESENTATION:
thumbnailView.myLoader.percentHeight = 100;
thumbnailView.myLoader.percentWidth = 100;
break;
}
}

View File

@ -1,64 +0,0 @@
package org.bigbluebutton.modules.presentation
{
import flash.events.Event;
import flexunit.framework.TestCase;
import flexunit.framework.TestSuite;
import org.bigbluebutton.modules.presentation.view.PresentationPanel;
import org.bigbluebutton.modules.presentation.view.PresentationPanelMediator;
public class PresentationPanelMediatorTest extends TestCase
{
private var test:PresentationPanelMediator;
private var facade:PresentationFacade;
private var listener:PresentationNotificationListener;
public function PresentationPanelMediatorTest(methodName:String)
{
super(methodName);
}
public static function suite():TestSuite{
var ts:TestSuite = new TestSuite();
ts.addTest(new PresentationPanelMediatorTest("testConstructor"));
ts.addTest(new PresentationPanelMediatorTest("testListNotifications"));
ts.addTest(new PresentationPanelMediatorTest("testConnectToPresentation"));
//ts.addTest(new PresentationPanelMediatorTest("testSharePresentation"));
return ts;
}
override public function setUp():void{
test = new PresentationPanelMediator(new PresentationPanel());
facade = PresentationFacade.getInstance();
facade.registerMediator(test);
listener = new PresentationNotificationListener();
facade.registerMediator(listener);
}
public function testConstructor():void{
assertTrue(test != null);
}
public function testListNotifications():void{
var notes:Array = test.listNotificationInterests();
assertTrue(notes[0] == PresentationFacade.CLEAR_EVENT);
assertTrue(notes[1] == PresentationFacade.READY_EVENT);
assertTrue(notes[2] == PresentationFacade.VIEW_EVENT);
}
public function testConnectToPresentation():void{
test.presentationPanel.dispatchEvent(new Event(PresentationPanelMediator.CONNECT));
assertTrue(listener.receivedLeaveEvent || listener.receivedJoinEvent);
}
//Can't test due to difficulties of creating GUI dependencies
//public function testSharePresentation():void{
// test.presentationPanel.dispatchEvent(new Event(PresentationPanelMediator.SHARE));
// assertTrue(listener.receivedShareEvent);
//}
}
}