implemented ability to include the current layout to the list and to save all the layouts to a text file - now I'm implementing the ability to load the layouts from file (the inverse operation)
This commit is contained in:
parent
1c50815570
commit
29a1aec1c9
@ -33,12 +33,12 @@ package org.bigbluebutton.modules.layout.managers
|
|||||||
import org.bigbluebutton.modules.layout.model.LayoutDefinition;
|
import org.bigbluebutton.modules.layout.model.LayoutDefinition;
|
||||||
|
|
||||||
public class LayoutManager extends EventDispatcher {
|
public class LayoutManager extends EventDispatcher {
|
||||||
private var _layouts:Dictionary = new Dictionary();
|
private var _layouts:Dictionary;
|
||||||
private var _dispatcher:Dispatcher = new Dispatcher();
|
private var _dispatcher:Dispatcher = new Dispatcher();
|
||||||
|
|
||||||
public function loadLayout(layoutUrl:String):void {
|
public function loadLayout(layoutUrl:String):void {
|
||||||
var urlLoader:URLLoader = new URLLoader();
|
var urlLoader:URLLoader = new URLLoader();
|
||||||
urlLoader.addEventListener(Event.COMPLETE, handleComplete);
|
urlLoader.addEventListener(Event.COMPLETE, completeHandler);
|
||||||
urlLoader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
|
urlLoader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
|
||||||
var date:Date = new Date();
|
var date:Date = new Date();
|
||||||
try {
|
try {
|
||||||
@ -48,8 +48,10 @@ package org.bigbluebutton.modules.layout.managers
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private function handleComplete(e:Event):void{
|
public function completeHandler(e:Event):void {
|
||||||
|
LogUtil.debug("==================================> loaded");
|
||||||
var data:XML = new XML(e.target.data);
|
var data:XML = new XML(e.target.data);
|
||||||
|
_layouts = new Dictionary();
|
||||||
for each (var n:XML in data.layout) {
|
for each (var n:XML in data.layout) {
|
||||||
var layoutDefinition:LayoutDefinition = new LayoutDefinition();
|
var layoutDefinition:LayoutDefinition = new LayoutDefinition();
|
||||||
layoutDefinition.load(n);
|
layoutDefinition.load(n);
|
||||||
@ -68,6 +70,10 @@ package org.bigbluebutton.modules.layout.managers
|
|||||||
return _layouts;
|
return _layouts;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function append(layoutDefinition:LayoutDefinition):void {
|
||||||
|
_layouts[layoutDefinition.name] = layoutDefinition;
|
||||||
|
}
|
||||||
|
|
||||||
public function getDefault():LayoutDefinition {
|
public function getDefault():LayoutDefinition {
|
||||||
for each (var value:LayoutDefinition in _layouts) {
|
for each (var value:LayoutDefinition in _layouts) {
|
||||||
if (value.default_)
|
if (value.default_)
|
||||||
@ -79,5 +85,13 @@ package org.bigbluebutton.modules.layout.managers
|
|||||||
public function getLayout(name:String):LayoutDefinition {
|
public function getLayout(name:String):LayoutDefinition {
|
||||||
return _layouts[name];
|
return _layouts[name];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function toXml():XML {
|
||||||
|
var xml:XML = <layouts/>;
|
||||||
|
for each (var value:LayoutDefinition in _layouts) {
|
||||||
|
xml.appendChild(value.toXml());
|
||||||
|
}
|
||||||
|
return xml;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -52,15 +52,15 @@ package org.bigbluebutton.modules.layout.model {
|
|||||||
return windows[name];
|
return windows[name];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function toXml():String {
|
public function toXml():XML {
|
||||||
var r:String = "<layout name=\"" + name +
|
var xml:XML = <layout/>;
|
||||||
(default_? " default=\"true\"": "") +
|
xml.@name = name;
|
||||||
" \">";
|
if (default_)
|
||||||
|
xml.@default = true;
|
||||||
for each (var value:WindowLayout in windows) {
|
for each (var value:WindowLayout in windows) {
|
||||||
r += "\n\t" + value.toXml();
|
xml.appendChild(value.toXml());
|
||||||
}
|
}
|
||||||
r += "\n</layout>";
|
return xml;
|
||||||
return r;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function applyToCanvas(canvas:MDICanvas):void {
|
public function applyToCanvas(canvas:MDICanvas):void {
|
||||||
|
@ -157,26 +157,36 @@ package org.bigbluebutton.modules.layout.model {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function toAbsoluteXml(canvas:MDICanvas):String {
|
public function toAbsoluteXml(canvas:MDICanvas):XML {
|
||||||
return "<window name=\"" + name + "\"" +
|
var xml:XML = <window/>;
|
||||||
(minimized? " minimized=\"true\"":
|
xml.@name = name;
|
||||||
(maximized? " maximized=\"true\"":
|
if (minimized)
|
||||||
" width=\"" + int(width * canvas.width) + "\"" +
|
xml.@minimized = true;
|
||||||
" height=\"" + int(height * canvas.height) + "\"" +
|
else if (maximized)
|
||||||
" x=\"" + int(x * canvas.width) + "\"" +
|
xml.@maximized = true;
|
||||||
" y=\"" + int(y * canvas.height) + "\"")) +
|
else {
|
||||||
" />";
|
xml.@width = int(width * canvas.width);
|
||||||
|
xml.@height = int(height * canvas.height);
|
||||||
|
xml.@x = int(x * canvas.width);
|
||||||
|
xml.@y = int(y * canvas.height);
|
||||||
|
}
|
||||||
|
return xml;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function toXml():String {
|
public function toXml():XML {
|
||||||
return "<window name=\"" + name + "\"" +
|
var xml:XML = <window/>;
|
||||||
(minimized? " minimized=\"true\"":
|
xml.@name = name;
|
||||||
(maximized? " maximized=\"true\"":
|
if (minimized)
|
||||||
" width=\"" + width + "\"" +
|
xml.@minimized = true;
|
||||||
" height=\"" + height + "\"" +
|
else if (maximized)
|
||||||
" x=\"" + x + "\"" +
|
xml.@maximized = true;
|
||||||
" y=\"" + y + "\"")) +
|
else {
|
||||||
" />";
|
xml.@width = width;
|
||||||
|
xml.@height = height;
|
||||||
|
xml.@x = x;
|
||||||
|
xml.@y = y;
|
||||||
|
}
|
||||||
|
return xml;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -39,6 +39,8 @@
|
|||||||
import mx.controls.Alert;
|
import mx.controls.Alert;
|
||||||
import mx.events.ResizeEvent;
|
import mx.events.ResizeEvent;
|
||||||
|
|
||||||
|
import flash.net.FileReference;
|
||||||
|
|
||||||
import flexlib.mdi.managers.MDIManager;
|
import flexlib.mdi.managers.MDIManager;
|
||||||
import flexlib.mdi.containers.MDICanvas;
|
import flexlib.mdi.containers.MDICanvas;
|
||||||
import flexlib.mdi.containers.MDIWindow;
|
import flexlib.mdi.containers.MDIWindow;
|
||||||
@ -65,6 +67,12 @@
|
|||||||
private var _previousLayout:int = -1;
|
private var _previousLayout:int = -1;
|
||||||
private var _defaultLayout:int = -1;
|
private var _defaultLayout:int = -1;
|
||||||
private var _defaultLayoutTimer:Timer = new Timer(500, 1);
|
private var _defaultLayoutTimer:Timer = new Timer(500, 1);
|
||||||
|
private var _customLayoutNumber:int = 0;
|
||||||
|
private var _firstTime:Boolean = true;
|
||||||
|
|
||||||
|
private var ADD_LAYOUT:String = "Add layout to list";
|
||||||
|
private var SAVE_LAYOUTS:String = "Save layouts to disk";
|
||||||
|
private var LOAD_LAYOUTS:String = "Load layouts from disk";
|
||||||
|
|
||||||
private function init():void{
|
private function init():void{
|
||||||
_mdiCanvas = getMdiCanvas(parent) as MDICanvas;
|
_mdiCanvas = getMdiCanvas(parent) as MDICanvas;
|
||||||
@ -108,6 +116,13 @@
|
|||||||
|
|
||||||
private function populateComboBox(e:LayoutsLoadedEvent):void {
|
private function populateComboBox(e:LayoutsLoadedEvent):void {
|
||||||
_layouts = e.layouts;
|
_layouts = e.layouts;
|
||||||
|
updateComboBox();
|
||||||
|
if (_firstTime)
|
||||||
|
applyDefaultLayout();
|
||||||
|
_firstTime = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function updateComboBox():void {
|
||||||
dataProvider.removeAll();
|
dataProvider.removeAll();
|
||||||
for each (var value:LayoutDefinition in _layouts.dict) {
|
for each (var value:LayoutDefinition in _layouts.dict) {
|
||||||
var item:Object = {label:value.name};
|
var item:Object = {label:value.name};
|
||||||
@ -115,8 +130,25 @@
|
|||||||
if (value.default_)
|
if (value.default_)
|
||||||
_defaultLayout = dataProvider.getItemIndex(item);
|
_defaultLayout = dataProvider.getItemIndex(item);
|
||||||
}
|
}
|
||||||
dataProvider.addItem({label:ResourceUtil.getInstance().getString('bbb.layout.copy')});
|
dataProvider.addItem(null);
|
||||||
applyDefaultLayout();
|
dataProvider.addItem({label:ADD_LAYOUT});
|
||||||
|
dataProvider.addItem({label:SAVE_LAYOUTS});
|
||||||
|
dataProvider.addItem({label:LOAD_LAYOUTS});
|
||||||
|
//dataProvider.addItem({label:ResourceUtil.getInstance().getString('bbb.layout.copy')});
|
||||||
|
}
|
||||||
|
|
||||||
|
private function selectHandler(e:Event):void {
|
||||||
|
var file:FileReference = FileReference(e.target);
|
||||||
|
LogUtil.debug("==================================> loading");
|
||||||
|
file.load();
|
||||||
|
}
|
||||||
|
|
||||||
|
private function completeHandler(e:Event):void {
|
||||||
|
LogUtil.debug("==================================> completeHandler");
|
||||||
|
var loader:Loader = new Loader();
|
||||||
|
loader.loadBytes(e.target.data);
|
||||||
|
addChild(loader);
|
||||||
|
_layouts.completeHandler(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function applyDefaultLayout(event:TimerEvent = null):void {
|
private function applyDefaultLayout(event:TimerEvent = null):void {
|
||||||
@ -137,6 +169,8 @@
|
|||||||
private function setupWindowListener(window:MDIWindow):void {
|
private function setupWindowListener(window:MDIWindow):void {
|
||||||
window.addEventListener(MDIWindowEvent.RESIZE_START, invalidateLayout);
|
window.addEventListener(MDIWindowEvent.RESIZE_START, invalidateLayout);
|
||||||
window.addEventListener(MDIWindowEvent.DRAG_START, invalidateLayout);
|
window.addEventListener(MDIWindowEvent.DRAG_START, invalidateLayout);
|
||||||
|
window.addEventListener(MDIWindowEvent.MINIMIZE, invalidateLayout);
|
||||||
|
window.addEventListener(MDIWindowEvent.MAXIMIZE, invalidateLayout);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function invalidateLayout(e:Event):void {
|
private function invalidateLayout(e:Event):void {
|
||||||
@ -153,15 +187,31 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
private function changeLayout(label:String):void {
|
private function changeLayout(label:String):void {
|
||||||
if (label == ResourceUtil.getInstance().getString('bbb.layout.copy')) {
|
var file:FileReference;
|
||||||
|
if (label == ADD_LAYOUT) {
|
||||||
|
_customLayoutNumber += 1;
|
||||||
|
_layouts.append(LayoutDefinition.getLayout(_mdiCanvas, "Custom layout " + _customLayoutNumber));
|
||||||
|
updateComboBox();
|
||||||
|
prompt = ResourceUtil.getInstance().getString('bbb.layout.prompt');
|
||||||
|
selectedIndex = -1;
|
||||||
|
} else if (label == SAVE_LAYOUTS) {
|
||||||
|
file = new FileReference();
|
||||||
|
file.save(_layouts.toXml().toXMLString(), "layouts.xml");
|
||||||
|
selectedIndex = _previousLayout;
|
||||||
|
} else if (label == LOAD_LAYOUTS) {
|
||||||
|
file = new FileReference();
|
||||||
|
file.addEventListener(Event.SELECT, selectHandler);
|
||||||
|
file.addEventListener(Event.COMPLETE, completeHandler);
|
||||||
|
file.browse();
|
||||||
|
selectedIndex = _previousLayout;
|
||||||
|
} else if (label == ResourceUtil.getInstance().getString('bbb.layout.copy')) {
|
||||||
var name:String;
|
var name:String;
|
||||||
if (_previousLayout != -1)
|
if (_previousLayout != -1)
|
||||||
name = dataProvider.getItemAt(_previousLayout).label;
|
name = dataProvider.getItemAt(_previousLayout).label;
|
||||||
else
|
else
|
||||||
name = "Custom layout";
|
name = "Custom layout";
|
||||||
System.setClipboard(LayoutDefinition.getLayout(_mdiCanvas, name).toXml());
|
System.setClipboard(LayoutDefinition.getLayout(_mdiCanvas, name).toXml().toXMLString());
|
||||||
Alert.show(ResourceUtil.getInstance().getString('bbb.layout.copied'), "", Alert.OK, this);
|
Alert.show(ResourceUtil.getInstance().getString('bbb.layout.copied'), "", Alert.OK, this);
|
||||||
selectedIndex = _previousLayout;
|
|
||||||
} else {
|
} else {
|
||||||
_currentLayout = _layouts.getLayout(label);
|
_currentLayout = _layouts.getLayout(label);
|
||||||
_currentLayout.applyToCanvas(_mdiCanvas);
|
_currentLayout.applyToCanvas(_mdiCanvas);
|
||||||
|
Loading…
Reference in New Issue
Block a user