Merge branch 'layout-module' of https://github.com/mconf/bigbluebutton into mconf-layout-module
Conflicts: bigbluebutton-client/src/org/bigbluebutton/modules/layout/managers/LayoutManager.as bigbluebutton-client/src/org/bigbluebutton/modules/layout/maps/LayoutEventMap.mxml
This commit is contained in:
commit
34616c04d8
@ -132,6 +132,18 @@ bbb.desktopView.actualSize = Exibir tamanho original
|
||||
bbb.toolbar.phone.toolTip = Iniciar Meu Microfone
|
||||
bbb.toolbar.deskshare.toolTip = Compartilhar Meu Desktop
|
||||
bbb.toolbar.video.toolTip = Compartilhar Minha Câmera
|
||||
bbb.layout.addButton.toolTip = Adicionar layout personalizado à lista
|
||||
bbb.layout.combo.toolTip = Modificar layout atual
|
||||
bbb.layout.loadButton.toolTip = Carregar layouts de um arquivo
|
||||
bbb.layout.saveButton.toolTip = Salvar layouts para um arquivo
|
||||
bbb.layout.lockButton.toolTip = Fixar layout
|
||||
bbb.layout.combo.prompt = Aplicar layout
|
||||
bbb.layout.combo.custom = * Layout personalizado
|
||||
bbb.layout.combo.customName = Layout personalizado
|
||||
bbb.layout.combo.remote = Remoto
|
||||
bbb.layout.save.complete = Layouts salvos com sucesso
|
||||
bbb.layout.load.complete = Layouts carregados com sucesso
|
||||
bbb.layout.load.failed = Falha ao carregar layouts
|
||||
bbb.highlighter.toolbar.pencil = Caneta Marcatexto
|
||||
bbb.highlighter.toolbar.ellipse = Círculo
|
||||
bbb.highlighter.toolbar.rectangle = Retângulo
|
||||
|
@ -0,0 +1,34 @@
|
||||
/**
|
||||
* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
|
||||
*
|
||||
* Copyright (c) 2012 BigBlueButton Inc. and 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.
|
||||
*
|
||||
* BigBlueButton 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 BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
* Author: Felipe Cecagno <felipe@mconf.org>
|
||||
*/
|
||||
package org.bigbluebutton.modules.layout.events
|
||||
{
|
||||
import flash.events.Event;
|
||||
|
||||
public class ComboBoxCreatedEvent extends Event
|
||||
{
|
||||
public static const COMBOBOX_CREATED_EVENT:String = "COMBOBOX_CREATED_EVENT";
|
||||
|
||||
public function ComboBoxCreatedEvent(type:String = COMBOBOX_CREATED_EVENT)
|
||||
{
|
||||
super(type, true, false);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -24,6 +24,7 @@ package org.bigbluebutton.modules.layout.events
|
||||
public class LayoutsLoadedEvent extends Event
|
||||
{
|
||||
public static const LAYOUTS_LOADED_EVENT:String = "LAYOUTS_LOADED_EVENT";
|
||||
public static const SEND_LAYOUTS_LOADED_EVENT:String = "SEND_LAYOUTS_LOADED_EVENT";
|
||||
public var layouts:LayoutDefinitionFile = null;
|
||||
public var success:Boolean = false;
|
||||
public var error:TypeError = null;
|
||||
|
@ -49,29 +49,59 @@ package org.bigbluebutton.modules.layout.managers
|
||||
import org.bigbluebutton.modules.layout.model.WindowLayout;
|
||||
import org.bigbluebutton.util.i18n.ResourceUtil;
|
||||
|
||||
public class LayoutManager extends EventDispatcher {
|
||||
private var _layouts:LayoutDefinitionFile = null;
|
||||
private var _canvas:MDICanvas = null;
|
||||
private var _globalDispatcher:Dispatcher = new Dispatcher();
|
||||
private var _locked:Boolean = false;
|
||||
private var _currentLayout:LayoutDefinition = null;
|
||||
private var _detectContainerChange:Boolean = true;
|
||||
private var _containerDeactivated:Boolean = false;
|
||||
private var _sendCurrentLayoutUpdateTimer:Timer = new Timer(500,1);
|
||||
private var _applyCurrentLayoutTimer:Timer = new Timer(150,1);
|
||||
private var _customLayoutsCount:int = 0;
|
||||
private var _eventsToDelay:Array = new Array(MDIManagerEvent.WINDOW_RESTORE,
|
||||
MDIManagerEvent.WINDOW_MINIMIZE,
|
||||
MDIManagerEvent.WINDOW_MAXIMIZE);
|
||||
|
||||
public function LayoutManager() {
|
||||
_applyCurrentLayoutTimer.addEventListener(TimerEvent.TIMER, function(e:TimerEvent):void {
|
||||
applyLayout(_currentLayout);
|
||||
});
|
||||
_sendCurrentLayoutUpdateTimer.addEventListener(TimerEvent.TIMER, function(e:TimerEvent):void {
|
||||
sendLayoutUpdate(updateCurrentLayout());
|
||||
});
|
||||
}
|
||||
public class LayoutManager extends EventDispatcher {
|
||||
private var _layouts:LayoutDefinitionFile = null;
|
||||
private var _canvas:MDICanvas = null;
|
||||
private var _globalDispatcher:Dispatcher = new Dispatcher();
|
||||
private var _locked:Boolean = false;
|
||||
private var _currentLayout:LayoutDefinition = null;
|
||||
private var _detectContainerChange:Boolean = true;
|
||||
private var _containerDeactivated:Boolean = false;
|
||||
private var _sendCurrentLayoutUpdateTimer:Timer = new Timer(500,1);
|
||||
private var _applyCurrentLayoutTimer:Timer = new Timer(150,1);
|
||||
private var _delayToSendLayoutsToCombobox:Timer = new Timer(60,0);
|
||||
private var _customLayoutsCount:int = 0;
|
||||
private var comboboxIsInitialized:Boolean = false;
|
||||
private var _eventsToDelay:Array = new Array(MDIManagerEvent.WINDOW_RESTORE,
|
||||
MDIManagerEvent.WINDOW_MINIMIZE,
|
||||
MDIManagerEvent.WINDOW_MAXIMIZE);
|
||||
|
||||
|
||||
public function LayoutManager() {
|
||||
_applyCurrentLayoutTimer.addEventListener(TimerEvent.TIMER, function(e:TimerEvent):void {
|
||||
applyLayout(_currentLayout);
|
||||
});
|
||||
_sendCurrentLayoutUpdateTimer.addEventListener(TimerEvent.TIMER, function(e:TimerEvent):void {
|
||||
sendLayoutUpdate(updateCurrentLayout());
|
||||
});
|
||||
|
||||
_delayToSendLayoutsToCombobox.addEventListener(TimerEvent.TIMER, function(e:TimerEvent):void {
|
||||
checkIfCanSendLayoutToCombobox();
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
public function sendPopulateComboboxEvent():void {
|
||||
LogUtil.debug("Sending layout to populate combobox");
|
||||
var sendLayoutsLoaded:LayoutsLoadedEvent = new LayoutsLoadedEvent(LayoutsLoadedEvent.SEND_LAYOUTS_LOADED_EVENT );
|
||||
sendLayoutsLoaded.layouts = _layouts;
|
||||
_globalDispatcher.dispatchEvent(sendLayoutsLoaded);
|
||||
}
|
||||
|
||||
|
||||
public function initDelayTimerUntilComboboxIsInitialized():void {
|
||||
_delayToSendLayoutsToCombobox.start();
|
||||
}
|
||||
|
||||
|
||||
public function checkIfCanSendLayoutToCombobox():void {
|
||||
if(comboboxIsInitialized) {
|
||||
if(_delayToSendLayoutsToCombobox != null) {
|
||||
_delayToSendLayoutsToCombobox.stop();
|
||||
}
|
||||
sendPopulateComboboxEvent();
|
||||
}
|
||||
}
|
||||
|
||||
public function loadServerLayouts(layoutUrl:String):void {
|
||||
LogUtil.debug("LayoutManager: loading server layouts from " + layoutUrl);
|
||||
@ -79,9 +109,13 @@ package org.bigbluebutton.modules.layout.managers
|
||||
loader.addEventListener(LayoutsLoadedEvent.LAYOUTS_LOADED_EVENT, function(e:LayoutsLoadedEvent):void {
|
||||
if (e.success) {
|
||||
_layouts = e.layouts;
|
||||
LogUtil.debug("LayoutManager: layouts loaded successfully");
|
||||
|
||||
|
||||
if(comboboxIsInitialized) {
|
||||
sendPopulateComboboxEvent();
|
||||
}
|
||||
else {
|
||||
initDelayTimerUntilComboboxIsInitialized();
|
||||
}
|
||||
LogUtil.debug("LayoutManager: layouts loaded successfully");
|
||||
} else {
|
||||
LogUtil.error("LayoutManager: layouts not loaded (" + e.error.message + ")");
|
||||
}
|
||||
@ -89,6 +123,10 @@ package org.bigbluebutton.modules.layout.managers
|
||||
loader.loadFromUrl(layoutUrl);
|
||||
}
|
||||
|
||||
public function comboboxInitialized():void {
|
||||
comboboxIsInitialized = true;
|
||||
}
|
||||
|
||||
public function saveLayoutsToFile():void {
|
||||
var _fileRef:FileReference = new FileReference();
|
||||
_fileRef.addEventListener(Event.COMPLETE, function(e:Event):void {
|
||||
@ -106,13 +144,15 @@ package org.bigbluebutton.modules.layout.managers
|
||||
/*
|
||||
* \TODO why do I need to create a new Event for this?
|
||||
*/
|
||||
var layoutsLoaded:LayoutsLoadedEvent = new LayoutsLoadedEvent();
|
||||
layoutsLoaded.layouts = _layouts;
|
||||
_globalDispatcher.dispatchEvent(layoutsLoaded);
|
||||
//var layoutsLoaded:LayoutsLoadedEvent = new LayoutsLoadedEvent();
|
||||
//layoutsLoaded.layouts = _layouts;
|
||||
//_globalDispatcher.dispatchEvent(layoutsLoaded);
|
||||
/*
|
||||
* it will update the ComboBox label, and will go back to this class
|
||||
* to apply the default layout
|
||||
*/
|
||||
|
||||
sendPopulateComboboxEvent();
|
||||
_globalDispatcher.dispatchEvent(new LayoutEvent(LayoutEvent.APPLY_DEFAULT_LAYOUT_EVENT));
|
||||
|
||||
Alert.show(ResourceUtil.getInstance().getString('bbb.layout.load.complete'), "", Alert.OK, _canvas);
|
||||
@ -346,5 +386,5 @@ package org.bigbluebutton.modules.layout.managers
|
||||
if (_canvas != null)
|
||||
applyLayout(_currentLayout);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -20,19 +20,20 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
<EventMap xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="http://mate.asfusion.com/">
|
||||
<mx:Script>
|
||||
<![CDATA[
|
||||
import mx.events.FlexEvent;
|
||||
|
||||
import org.bigbluebutton.core.EventConstants;
|
||||
import org.bigbluebutton.main.events.MadePresenterEvent;
|
||||
import org.bigbluebutton.modules.layout.events.ConnectionEvent;
|
||||
import org.bigbluebutton.modules.layout.events.LayoutEvent;
|
||||
import org.bigbluebutton.modules.layout.events.RedefineLayoutEvent;
|
||||
import org.bigbluebutton.modules.layout.events.StartLayoutModuleEvent;
|
||||
import org.bigbluebutton.modules.layout.events.UpdateLayoutEvent;
|
||||
import org.bigbluebutton.modules.layout.events.ViewInitializedEvent;
|
||||
import org.bigbluebutton.modules.layout.managers.LayoutManager;
|
||||
import org.bigbluebutton.modules.layout.services.LayoutService;
|
||||
<![CDATA[
|
||||
import mx.events.FlexEvent;
|
||||
|
||||
import org.bigbluebutton.core.EventConstants;
|
||||
import org.bigbluebutton.main.events.MadePresenterEvent;
|
||||
import org.bigbluebutton.modules.layout.events.ComboBoxCreatedEvent;
|
||||
import org.bigbluebutton.modules.layout.events.ConnectionEvent;
|
||||
import org.bigbluebutton.modules.layout.events.LayoutEvent;
|
||||
import org.bigbluebutton.modules.layout.events.RedefineLayoutEvent;
|
||||
import org.bigbluebutton.modules.layout.events.StartLayoutModuleEvent;
|
||||
import org.bigbluebutton.modules.layout.events.UpdateLayoutEvent;
|
||||
import org.bigbluebutton.modules.layout.events.ViewInitializedEvent;
|
||||
import org.bigbluebutton.modules.layout.managers.LayoutManager;
|
||||
import org.bigbluebutton.modules.layout.services.LayoutService;
|
||||
]]>
|
||||
</mx:Script>
|
||||
|
||||
@ -52,6 +53,12 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
<MethodInvoker generator="{LayoutService}" method="join" />
|
||||
</EventHandlers>
|
||||
|
||||
<EventHandlers type="{ComboBoxCreatedEvent.COMBOBOX_CREATED_EVENT}">
|
||||
<MethodInvoker generator="{LayoutManager}" method="comboboxInitialized"/>
|
||||
</EventHandlers>
|
||||
|
||||
|
||||
|
||||
<EventHandlers type="{LayoutEvent.STOP_LAYOUT_MODULE_EVENT}">
|
||||
<MethodInvoker generator="{LayoutService}" method="leave" />
|
||||
<MethodInvoker generator="{LayoutEventMapDelegate}" method="stopModule" />
|
||||
|
@ -69,7 +69,7 @@ package org.bigbluebutton.modules.layout.model
|
||||
public function toXml():XML {
|
||||
var xml:XML = <layouts/>;
|
||||
for each (var layoutDefinition:LayoutDefinition in _layouts) {
|
||||
for each (var value:XML in layoutDefinition.toXml()) {
|
||||
for each (var value:XML in layoutDefinition.toXml().children()) {
|
||||
xml.appendChild(value);
|
||||
}
|
||||
}
|
||||
|
@ -31,8 +31,9 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
<mate:Listener type="{LayoutEvent.REMOTE_LOCK_LAYOUT_EVENT}" receive="{enabled=false || UserManager.getInstance().getConference().amIModerator()}" />
|
||||
<mate:Listener type="{LayoutEvent.REMOTE_UNLOCK_LAYOUT_EVENT}" receive="{enabled=true}" />
|
||||
<mate:Listener type="{LayoutEvent.INVALIDATE_LAYOUT_EVENT}" method="invalidadeLayout" />
|
||||
<mate:Listener type="{LayoutsLoadedEvent.LAYOUTS_LOADED_EVENT}" method="populateLayoutsList" />
|
||||
<mate:Listener type="{RedefineLayoutEvent.REDEFINE_LAYOUT_EVENT}" method="onRedefineLayout" />
|
||||
<mate:Listener type="{LayoutsLoadedEvent.SEND_LAYOUTS_LOADED_EVENT}" method="populateLayoutsList"/>
|
||||
|
||||
|
||||
<mx:Script>
|
||||
<![CDATA[
|
||||
@ -60,6 +61,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
import org.bigbluebutton.main.views.MainToolbar;
|
||||
import org.bigbluebutton.util.i18n.ResourceUtil;
|
||||
import org.bigbluebutton.modules.layout.events.LayoutEvent;
|
||||
import org.bigbluebutton.modules.layout.events.ComboBoxCreatedEvent;
|
||||
import org.bigbluebutton.modules.layout.events.LayoutsLoadedEvent;
|
||||
import org.bigbluebutton.modules.layout.events.RedefineLayoutEvent;
|
||||
import org.bigbluebutton.modules.layout.events.ViewInitializedEvent;
|
||||
@ -68,12 +70,21 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
import org.bigbluebutton.modules.layout.model.WindowLayout;
|
||||
import org.bigbluebutton.modules.layout.views.LayoutButton;
|
||||
|
||||
|
||||
|
||||
private var populated:Boolean = false;
|
||||
|
||||
|
||||
private var _dispatcher:Dispatcher = new Dispatcher();
|
||||
|
||||
private var _defaultLayout:Object = null;
|
||||
private var shouldSelectedItemGoToDefaultBecauseTheEventWasLost:Boolean = false;
|
||||
|
||||
|
||||
private function init():void {
|
||||
LogUtil.debug("LayoutsCombo: view initialized");
|
||||
var comboBoxCreated:ComboBoxCreatedEvent = new ComboBoxCreatedEvent();
|
||||
_dispatcher.dispatchEvent(comboBoxCreated);
|
||||
}
|
||||
|
||||
private function populateLayoutsList(e:LayoutsLoadedEvent):void {
|
||||
@ -89,11 +100,20 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
idx++;
|
||||
}
|
||||
invalidateDisplayList();
|
||||
|
||||
if(shouldSelectedItemGoToDefaultBecauseTheEventWasLost) {
|
||||
onApplyDefaultLayout();
|
||||
}
|
||||
else {
|
||||
shouldSelectedItemGoToDefaultBecauseTheEventWasLost = false;
|
||||
}
|
||||
}
|
||||
|
||||
private function onApplyDefaultLayout(e:Event):void {
|
||||
private function onApplyDefaultLayout(e:Event = null):void {
|
||||
if (_defaultLayout != null)
|
||||
selectedItem = _defaultLayout;
|
||||
else
|
||||
shouldSelectedItemGoToDefaultBecauseTheEventWasLost = true;
|
||||
}
|
||||
|
||||
private function onRedefineLayout(e:RedefineLayoutEvent):void {
|
||||
|
Loading…
Reference in New Issue
Block a user