Skip to content
Snippets Groups Projects
Commit 59825d33 authored by Felipe Cecagno's avatar Felipe Cecagno
Browse files

Merge remote branch 'mconf/layout-min-width' into layout-min-width-0.81

Conflicts:
	bigbluebutton-client/src/org/bigbluebutton/main/events/ModuleLoadEvent.as
	bigbluebutton-client/src/org/bigbluebutton/main/maps/ApplicationEventMap.mxml
	bigbluebutton-client/src/org/bigbluebutton/main/model/modules/ModuleManager.as
	bigbluebutton-client/src/org/bigbluebutton/main/model/modules/ModulesProxy.as
	bigbluebutton-client/src/org/bigbluebutton/modules/layout/managers/LayoutManager.as
	bigbluebutton-client/src/org/bigbluebutton/modules/layout/model/LayoutDefinition.as
	bigbluebutton-client/src/org/bigbluebutton/modules/layout/model/WindowLayout.as
	bigbluebutton-client/src/org/bigbluebutton/modules/layout/services/LayoutSharedObjectService.as
parents 7096bb82 e20b5838
No related branches found
No related tags found
No related merge requests found
Showing
with 254 additions and 125 deletions
......@@ -50,6 +50,19 @@ package org.bigbluebutton.common
logger.warn(message);
}
public static function traceObject(obj : *, level : int = 0):void
{
var tabs : String = "";
for ( var i : int = 0 ; i < level ; ++i ) {
tabs += " "
}
for ( var prop : String in obj ){
debug( tabs + "[" + prop + "] -> " + obj[ prop ] );
traceObject( obj[ prop ], level + 1 );
}
}
private static function get logger():ILogger {
return Log.getLogger(LOGGER);
}
......
......@@ -24,7 +24,6 @@ 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;
......
......@@ -59,9 +59,8 @@ package org.bigbluebutton.modules.layout.managers
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 _serverLayoutsLoaded:Boolean = false;
private var _eventsToDelay:Array = new Array(MDIManagerEvent.WINDOW_RESTORE,
MDIManagerEvent.WINDOW_MINIMIZE,
MDIManagerEvent.WINDOW_MAXIMIZE);
......@@ -74,33 +73,6 @@ package org.bigbluebutton.modules.layout.managers
_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 {
......@@ -109,12 +81,7 @@ package org.bigbluebutton.modules.layout.managers
loader.addEventListener(LayoutsLoadedEvent.LAYOUTS_LOADED_EVENT, function(e:LayoutsLoadedEvent):void {
if (e.success) {
_layouts = e.layouts;
if(comboboxIsInitialized) {
sendPopulateComboboxEvent();
}
else {
initDelayTimerUntilComboboxIsInitialized();
}
_serverLayoutsLoaded = true;
LogUtil.debug("LayoutManager: layouts loaded successfully");
} else {
LogUtil.error("LayoutManager: layouts not loaded (" + e.error.message + ")");
......@@ -122,9 +89,13 @@ package org.bigbluebutton.modules.layout.managers
});
loader.loadFromUrl(layoutUrl);
}
public function comboboxInitialized():void {
comboboxIsInitialized = true;
public function onComboLayoutCreated():void {
if (_serverLayoutsLoaded) {
var layoutsLoaded:LayoutsLoadedEvent = new LayoutsLoadedEvent();
layoutsLoaded.layouts = _layouts;
_globalDispatcher.dispatchEvent(layoutsLoaded);
}
}
public function saveLayoutsToFile():void {
......@@ -144,15 +115,14 @@ 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);
......
......@@ -71,25 +71,6 @@ package org.bigbluebutton.modules.layout.managers
// LogUtil.debug("==========> " + key + " order: " + _windowsOrder[key].order);
}
_windowsOrder[type] = { order: 0 };
// if (_windowsOrder.length > window.windowManager.windowList.length) {
// var openWindows:Array = new Array();
// for each (var tmp:MDIWindow in window.windowManager.windowList) {
// openWindows.push(WindowLayout.getType(tmp));
// }
// for (key in _windowsOrder) {
// if (openWindows.indexOf(key) == -1) {
// LogUtil.debug("Removing order for " + key);
// delete _windowsOrder[key];
// }
// }
// }
// LogUtil.debug("Manipulating " + type);
// for (key in _windowsOrder) {
// LogUtil.debug("=====> " + key + " order: " + _windowsOrder[key].order);
// }
// window.windowManager.bringToFront(window);
}
public function getOrderByType(type:String):int {
......
......@@ -54,10 +54,8 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
</EventHandlers>
<EventHandlers type="{ComboBoxCreatedEvent.COMBOBOX_CREATED_EVENT}">
<MethodInvoker generator="{LayoutManager}" method="comboboxInitialized"/>
</EventHandlers>
<MethodInvoker generator="{LayoutManager}" method="onComboLayoutCreated"/>
</EventHandlers>
<EventHandlers type="{LayoutEvent.STOP_LAYOUT_MODULE_EVENT}">
<MethodInvoker generator="{LayoutService}" method="leave" />
......
......@@ -32,7 +32,7 @@ package org.bigbluebutton.modules.layout.model {
[Bindable] public var name:String;
// default is a reserved word in actionscript
[Bindable] public var defaultLayout:Boolean = false;
private var _windows:Dictionary = new Dictionary();
private var _layoutsPerRole:Dictionary = new Dictionary();
static private var _ignoredWindows:Array = new Array("AvatarWindow", "PublishWindow",
"VideoWindow", "DesktopPublishWindow", "DesktopViewWindow",
......@@ -50,12 +50,12 @@ package org.bigbluebutton.modules.layout.model {
if (vxml.@role != undefined && _roles.indexOf(vxml.@role.toString().toUpperCase()) != -1) {
role = vxml.@role.toString().toUpperCase();
}
if (!_windows.hasOwnProperty(role))
_windows[role] = new Dictionary();
if (!_layoutsPerRole.hasOwnProperty(role))
_layoutsPerRole[role] = new Dictionary();
for each (var n:XML in vxml.window) {
var window:WindowLayout = new WindowLayout();
window.load(n);
_windows[role][window.name] = window;
_layoutsPerRole[role][window.name] = window;
}
}
......@@ -72,21 +72,21 @@ package org.bigbluebutton.modules.layout.model {
}
private function get myLayout():Dictionary {
var hasViewerLayout:Boolean = _windows.hasOwnProperty(Role.VIEWER);
var hasModeratorLayout:Boolean = _windows.hasOwnProperty(Role.MODERATOR);
var hasPresenterLayout:Boolean = _windows.hasOwnProperty(Role.PRESENTER);
var hasViewerLayout:Boolean = _layoutsPerRole.hasOwnProperty(Role.VIEWER);
var hasModeratorLayout:Boolean = _layoutsPerRole.hasOwnProperty(Role.MODERATOR);
var hasPresenterLayout:Boolean = _layoutsPerRole.hasOwnProperty(Role.PRESENTER);
if (UserManager.getInstance().getConference().amIPresenter && hasPresenterLayout) {
return _windows[Role.PRESENTER];
} else if (UserManager.getInstance().getConference().amIModerator() && hasModeratorLayout) {
return _windows[Role.MODERATOR];
} else if (hasViewerLayout) {
return _windows[Role.VIEWER];
} else if (hasModeratorLayout) {
return _windows[Role.MODERATOR];
} else if (hasPresenterLayout) {
return _windows[Role.PRESENTER];
} else {
return _layoutsPerRole[Role.PRESENTER];
} else if (UserManager.getInstance().getConference().amIModerator() && hasModeratorLayout) {
return _layoutsPerRole[Role.MODERATOR];
} else if (hasViewerLayout) {
return _layoutsPerRole[Role.VIEWER];
} else if (hasModeratorLayout) {
return _layoutsPerRole[Role.MODERATOR];
} else if (hasPresenterLayout) {
return _layoutsPerRole[Role.PRESENTER];
} else {
LogUtil.error("There's no layout that fits the participants profile");
trace("LayoutDefinition::getMyLayout There's no layout that fits the participants profile");
return null;
......@@ -112,8 +112,8 @@ package org.bigbluebutton.modules.layout.model {
var xml:XML = <layout-block/>;
var tmp:XML;
for each (var value:String in _roles) {
if (_windows.hasOwnProperty(value)) {
tmp = windowsToXml(_windows[value]);
if (_layoutsPerRole.hasOwnProperty(value)) {
tmp = windowsToXml(_layoutsPerRole[value]);
if (value != Role.VIEWER)
tmp.@role = value;
xml.appendChild(tmp);
......@@ -178,22 +178,161 @@ package org.bigbluebutton.modules.layout.model {
return;
adjustWindowsOrder(canvas);
var windows:Array = canvas.windowManager.windowList;
// LogUtil.traceObject(myLayout);
var transformedLayout:Dictionary = generateWindowsTransformations(myLayout, windows, canvas.width, canvas.height);
var type:String;
for each (var window:MDIWindow in windows) {
type = WindowLayout.getType(window);
if (!ignoreWindowByType(type))
WindowLayout.setLayout(canvas, window, transformedLayout[type]);
}
}
// http://stackoverflow.com/questions/12162607/how-to-clone-a-dictionary-and-its-content
private function cloneLayoutDictionary(original:Dictionary):Dictionary {
var cloned:Dictionary = new Dictionary();
for(var key:Object in original) {
cloned[key] = original[key].clone();
}
return cloned;
}
private function generateWindowsTransformations(layout:Dictionary, windows:Array, screen_w:int, screen_h:int):Dictionary {
var type:String;
var i:int;
var items:Array = new Array();
var item:Object;
var copiedLayout:Dictionary = cloneLayoutDictionary(layout);
for each (var window:MDIWindow in canvas.windowManager.windowList) {
applyToWindow(canvas, window);
for each (var window:MDIWindow in windows) {
type = WindowLayout.getType(window);
if (ignoreWindowByType(type) || !copiedLayout.hasOwnProperty(type))
continue;
items.push({
type: type,
x0: copiedLayout[type].x,
y0: copiedLayout[type].y,
w0: copiedLayout[type].width,
h0: copiedLayout[type].height,
fixed_w: copiedLayout[type].minWidth != -1 && copiedLayout[type].minWidth / screen_w > copiedLayout[type].width,
fixed_h: copiedLayout[type].minHeight != -1 && copiedLayout[type].minHeight / screen_h > copiedLayout[type].height,
min_w: copiedLayout[type].minWidth != -1? copiedLayout[type].minWidth / screen_w: copiedLayout[type].width,
min_h: copiedLayout[type].minHeight != -1? copiedLayout[type].minHeight / screen_h: copiedLayout[type].height,
fixed_on_left0: 0.0,
not_fixed_on_left0: 0.0
});
}
items.sortOn("x0", Array.NUMERIC);
/**
* First we are interested in discovering which windows have a fixed
* width. We understand as fixed width the window that will be restricted
* in width by the minWidth parameter. The next procedure will discover
* how many pixels are fixed or non-fixed at the left of each window.
* This is an important information because it will say how the windows
* will be positioned after the transformation.
*/
var pivot0:Number = 0.0;
var pivot1:Number = 0.0;
var fixed_w0:Number = 0.0;
var fixed_w1:Number = 0.0;
for (i = 0; i < items.length; ++i) {
item = items[i];
item.fixed_on_left0 = fixed_w0 - (pivot0 > item.x0? pivot0 - item.x0: 0);
item.not_fixed_on_left0 = item.x0 - item.fixed_on_left0;
item.fixed_on_left1 = fixed_w1 - (pivot0 > item.x0? pivot1 - item.x0: 0);
if (item.fixed_w) {
item.w1 = item.min_w;
if (pivot0 <= item.x0) {
fixed_w0 += item.w0;
} else if (pivot0 < item.x0 + item.w0) {
fixed_w0 += item.x0 + item.w0 - pivot0;
}
pivot0 = Math.max(pivot0, item.x0 + item.w0);
if (pivot1 <= item.x0) {
fixed_w1 += item.w1;
} else if (pivot1 < item.x0 + item.w1) {
fixed_w1 += item.x0 + item.w1 - pivot1;
}
pivot1 = Math.max(pivot1, item.x0 + item.w1);
} else {
pivot0 = Math.max(pivot0, item.x0);
pivot1 = Math.max(pivot1, item.x0);
}
}
var not_fixed_w0:Number = 1 - fixed_w0;
var not_fixed_w1:Number = 1 - fixed_w1;
var not_fixed_multiplier:Number = (fixed_w1 - fixed_w0) / not_fixed_w0;
/**
* The same procedure is executed (using a pivot) to discover how
* many pixels aren't fixed at the left of each window AFTER the transformation,
* and then generate the transformation at the windows in position and width.
*/
pivot0
= pivot1
= fixed_w0
= fixed_w1
= not_fixed_w0
= not_fixed_w1
= 0.0;
for (i = 0; i < items.length; ++i) {
item = items[i];
item.not_fixed_on_left1 = item.not_fixed_on_left0 - item.not_fixed_on_left0 * not_fixed_multiplier;
item.w1 = item.fixed_w? item.min_w: item.w0 - item.w0 * not_fixed_multiplier;
item.x1 = item.x0 + (item.fixed_on_left1 - item.fixed_on_left0) + (item.not_fixed_on_left1 - item.not_fixed_on_left0);
if (item.fixed_w) {
item.w1 = item.min_w;
if (pivot0 <= item.x0) {
fixed_w0 += item.w0;
} else if (pivot0 < item.x0 + item.w0) {
fixed_w0 += item.x0 + item.w0 - pivot0;
}
pivot0 = Math.max(pivot0, item.x0 + item.w0);
if (pivot1 <= item.x0) {
fixed_w1 += item.w1;
} else if (pivot1 < item.x0 + item.w1) {
fixed_w1 += item.x0 + item.w1 - pivot1;
}
pivot1 = Math.max(pivot1, item.x0 + item.w1);
} else {
pivot0 = Math.max(pivot0, item.x0);
pivot1 = Math.max(pivot1, item.x0);
}
copiedLayout[item.type].x = item.x1;
copiedLayout[item.type].y = item.y0;
copiedLayout[item.type].width = item.w1;
copiedLayout[item.type].height = item.h0;
}
return copiedLayout;
}
public function applyToWindow(canvas:MDICanvas, window:MDIWindow, type:String=null):void {
private function apply(canvas:MDICanvas, window:MDIWindow, type:String=null):void {
if (type == null) {
type = WindowLayout.getType(window);
}
type = WindowLayout.getType(window);
}
if (!ignoreWindowByType(type)) {
// trace("LayoutDefinition::applyToWindow [" + window.name + ", type=" + type + "]");
WindowLayout.setLayout(canvas, window, myLayout[type]);
}
WindowLayout.setLayout(canvas, window, myLayout[type]);
}
}
static private function ignoreWindowByType(type:String):Boolean {
......@@ -209,11 +348,11 @@ package org.bigbluebutton.modules.layout.model {
//LogUtil.debug("CHAD: Canvas is " + (canvas == null ? "null" : "not null") + ", Name is " + (name == null ? "null" : "not null"));
var layoutDefinition:LayoutDefinition = new LayoutDefinition();
layoutDefinition.name = name;
layoutDefinition._windows[Role.VIEWER] = new Dictionary();
layoutDefinition._layoutsPerRole[Role.VIEWER] = new Dictionary();
for each (var window:MDIWindow in canvas.windowManager.windowList) {
var layout:WindowLayout = WindowLayout.getLayout(canvas, window);
if (!ignoreWindowByType(layout.name))
layoutDefinition._windows[Role.VIEWER][layout.name] = layout;
layoutDefinition._layoutsPerRole[Role.VIEWER][layout.name] = layout;
}
return layoutDefinition;
}
......
......@@ -39,6 +39,8 @@ package org.bigbluebutton.modules.layout.model {
[Bindable] public var name:String;
[Bindable] public var width:Number;
[Bindable] public var height:Number;
[Bindable] public var minWidth:int = -1;
[Bindable] public var minHeight:int = -1;
[Bindable] public var x:Number;
[Bindable] public var y:Number;
[Bindable] public var minimized:Boolean = false;
......@@ -51,6 +53,24 @@ package org.bigbluebutton.modules.layout.model {
static private var EVENT_DURATION:int = 500;
public function clone():WindowLayout {
var cloned:WindowLayout = new WindowLayout();
cloned.name = this.name;
cloned.width = this.width;
cloned.height = this.height;
cloned.minWidth = this.minWidth;
cloned.minHeight = this.minHeight;
cloned.x = this.x;
cloned.y = this.y;
cloned.minimized = this.minimized;
cloned.maximized = this.maximized;
cloned.hidden = this.hidden;
cloned.resizable = this.resizable;
cloned.draggable = this.draggable;
cloned.order = this.order;
return cloned;
}
public function load(vxml:XML):void {
// trace("Load layout \n" + vxml.toXMLString() + "\n");
if (vxml != null) {
......@@ -69,6 +89,13 @@ package org.bigbluebutton.modules.layout.model {
if (vxml.@y != undefined) {
y = Number(vxml.@y);
}
if (vxml.@minWidth != undefined) {
minWidth = int(vxml.@minWidth);
}
// not implemented yet
//if (vxml.@minHeight != undefined) {
// minHeight = int(vxml.@minHeight);
//}
if (vxml.@minimized != undefined) {
minimized = (vxml.@minimized.toString().toUpperCase() == "TRUE") ? true : false;
}
......@@ -98,6 +125,8 @@ package org.bigbluebutton.modules.layout.model {
layout.name = getType(window);
layout.width = window.width / canvas.width;
layout.height = window.height / canvas.height;
layout.minWidth = -1;
//layout.minHeight = -1;
layout.x = window.x / canvas.width;
layout.y = window.y / canvas.height;
layout.minimized = window.minimized;
......@@ -141,7 +170,7 @@ package org.bigbluebutton.modules.layout.model {
applyToWindow(obj.canvas, obj.window);
}
public function applyToWindow(canvas:MDICanvas, window:MDIWindow):void {
private function applyToWindow(canvas:MDICanvas, window:MDIWindow):void {
// trace("WindowLayout::applyToWindow for " + window.name + " using layout " + this.name + "]");
var effect:Parallel = new Parallel();
......@@ -228,9 +257,15 @@ package org.bigbluebutton.modules.layout.model {
xml.@maximized = true;
else if (hidden)
xml.@hidden = true;
else if (draggable)
xml.@draggable = true;
else if (resizable)
xml.@resizable = true;
else {
xml.@width = int(width * canvas.width);
xml.@height = int(height * canvas.height);
xml.@minWidth = minWidth;
//xml.@minHeight = minHeight;
xml.@x = int(x * canvas.width);
xml.@y = int(y * canvas.height);
}
......@@ -247,9 +282,15 @@ package org.bigbluebutton.modules.layout.model {
xml.@maximized = true;
else if (hidden)
xml.@hidden = true;
else if (draggable)
xml.@draggable = true;
else if (resizable)
xml.@resizable = true;
else {
xml.@width = width;
xml.@height = height;
xml.@minWidth = minWidth;
//xml.@minHeight = minHeight;
xml.@x = x;
xml.@y = y;
}
......
......@@ -47,7 +47,7 @@ package org.bigbluebutton.modules.layout.services
{
public static const NAME:String = "LayoutSharedObjectService";
private var _layoutSO:SharedObject;
private var _layoutSO:SharedObject = null;
private var _connection:NetConnection;
private var _dispatcher:Dispatcher;
private var _locked:Boolean = false;
......@@ -65,19 +65,19 @@ package org.bigbluebutton.modules.layout.services
public function join(uri:String):void
{
_layoutSO = SharedObject.getRemote("layoutSO", uri, false);
_layoutSO.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
_layoutSO.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);
_layoutSO.addEventListener(SyncEvent.SYNC, sharedObjectSyncHandler);
_layoutSO.client = this;
if (_layoutSO == null) {
_layoutSO = SharedObject.getRemote("layoutSO", uri, false);
_layoutSO.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
_layoutSO.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);
_layoutSO.addEventListener(SyncEvent.SYNC, sharedObjectSyncHandler);
_layoutSO.client = this;
}
_layoutSO.connect(_connection);
}
public function leave():void
{
if (_layoutSO != null) {
_layoutSO.close();
}
_layoutSO.close();
}
private function netStatusHandler(event:NetStatusEvent):void
......
......@@ -32,8 +32,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
<mate:Listener type="{LayoutEvent.REMOTE_UNLOCK_LAYOUT_EVENT}" receive="{enabled=true}" />
<mate:Listener type="{LayoutEvent.INVALIDATE_LAYOUT_EVENT}" method="invalidadeLayout" />
<mate:Listener type="{RedefineLayoutEvent.REDEFINE_LAYOUT_EVENT}" method="onRedefineLayout" />
<mate:Listener type="{LayoutsLoadedEvent.SEND_LAYOUTS_LOADED_EVENT}" method="populateLayoutsList"/>
<mate:Listener type="{LayoutsLoadedEvent.LAYOUTS_LOADED_EVENT}" method="populateLayoutsList"/>
<mx:Script>
<![CDATA[
......@@ -70,16 +69,9 @@ 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");
......@@ -100,20 +92,11 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
idx++;
}
invalidateDisplayList();
if(shouldSelectedItemGoToDefaultBecauseTheEventWasLost) {
onApplyDefaultLayout();
}
else {
shouldSelectedItemGoToDefaultBecauseTheEventWasLost = false;
}
}
private function onApplyDefaultLayout(e:Event = null):void {
if (_defaultLayout != null)
selectedItem = _defaultLayout;
else
shouldSelectedItemGoToDefaultBecauseTheEventWasLost = true;
}
private function onRedefineLayout(e:RedefineLayoutEvent):void {
......@@ -121,7 +104,10 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
* remote means that the this event wasn't dispatched by this class
* it will come tipically from LayoutService or LayoutManager
*/
LogUtil.debug("LayoutCombo::onRedefineLayout");
if (e.remote) {
LogUtil.debug("LayoutCombo::onRedefineLayout remote event");
var idx:int = -1;
prompt = e.layout.name;
......@@ -131,6 +117,8 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
}
selectedIndex = idx;
}
invalidateDisplayList();
LogUtil.debug("LayoutCombo::onRedefineLayout done");
}
private function onSelectedItemChanged(e:Event):void {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment