Advertisement
Guest User

MobileApplicationView.mxml

a guest
Dec 26th, 2013
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <s:View xmlns:fx="http://ns.adobe.com/mxml/2009"
  3.         xmlns:s="library://ns.adobe.com/flex/spark"
  4.         xmlns:mate="http://mate.asfusion.com/"
  5.         xmlns:views="org.bigbluebutton.main.views.*"
  6.         actionBarVisible="false"
  7.         creationComplete="init()"
  8.         addedToStage="addedToStage()">
  9.  
  10.     <fx:Declarations>
  11.         <mate:Listener type="{ModuleLoadEvent.ALL_MODULES_LOADED}"
  12.                        method="handleAllModulesLoadedEvent"/>
  13.         <mate:Listener type="{OpenWindowEvent.OPEN_WINDOW_EVENT}"
  14.                        method="handleOpenWindowEvent"/>
  15.         <mate:Listener type="{CloseWindowEvent.CLOSE_WINDOW_EVENT}"
  16.                        method="handleCloseWindowEvent"/>
  17.         <mate:Listener type="{ListenersEvent.SET_LOCAL_MODERATOR_STATUS}"
  18.                        method="setModerator"/>
  19.         <mate:Listener type="{BBBEvent.END_MEETING_EVENT}"
  20.                        method="handleEndMeetingEvent"/>
  21.         <mate:Listener type="{SettingsEvent.SETTINGS_OPTION_EXIT}"
  22.                        method="handleSettingMenuExit"/>
  23.         <mate:Listener type="{SettingsEvent.OPEN_SETTINGS_PANEL}"
  24.                        method="handleSettingsOpen"/>
  25.         <mate:Listener type="{LogoutEvent.CANCEL_LOGOUT}"
  26.                        method="handleCancelLogoutEvent"/>
  27.         <mate:Listener type="{LogoutEvent.USER_LOGGED_OUT}"
  28.                        method="handleUserLogoutEvent"/>
  29.         <mate:Listener type="{SettingsEvent.SETTINGS_LOGOUT_WINDOW_OPEN}"
  30.                        method="handleLogoutWindowOpenEvent"/>
  31.         <mate:Listener type="{SettingsEvent.SETTINGS_SNAPSHOT_WINDOW_OPEN}"
  32.                        method="handleSnapshotWindowOpenEvent"/>
  33.         <mate:Listener type="{LocaleChangeEvent.LOCALE_CHANGED}"
  34.                        method="localeChanged"/>
  35.         <mate:Listener type="{BackButtonEvent.BACK_BUTTON_EVENT}"
  36.                        method="handleBackButton"/>
  37.         <mate:Listener type="{MobilePresentationEvent.PRESENTATION_WINDOW_READY}"
  38.                        method="whiteboardHandler"/>
  39.         <mate:Listener type="{AddUIComponentToMainCanvas.ADD_COMPONENT}"
  40.                        method="addComponentToCanvas"/>
  41.         <mate:Listener type="{ConfigEvent.CONFIG_EVENT}"
  42.                        method="gotConfigParameters"/>
  43.         <mate:Listener type="{SettingsEvent.SETTINGS_CAMERA_RESOLUTION_OFF_SETTINGS}"
  44.                        method="openSettingResolutionOnlyWindow"/>
  45.     </fx:Declarations>
  46.  
  47.  
  48.     <s:states>
  49.         <s:State name="landscape"/>
  50.         <s:State name="portrait"/>
  51.     </s:states>
  52.  
  53.     <fx:Script>
  54.         <![CDATA[
  55.             import com.asfusion.mate.events.Dispatcher;
  56.             import com.codecatalyst.promise.Deferred;
  57.            
  58.             import mx.collections.ArrayCollection;
  59.             import mx.core.FlexGlobals;
  60.             import mx.core.mx_internal;
  61.            
  62.             import spark.components.View;
  63.            
  64.             import org.bigbluebutton.common.Images;
  65.             import org.bigbluebutton.common.LogUtil;
  66.             import org.bigbluebutton.common.events.AddUIComponentToMainCanvas;
  67.             import org.bigbluebutton.common.events.CloseWindowEvent;
  68.             import org.bigbluebutton.common.events.LocaleChangeEvent;
  69.             import org.bigbluebutton.common.events.OpenWindowEvent;
  70.             import org.bigbluebutton.core.managers.UserManager;
  71.             import org.bigbluebutton.main.events.BBBEvent;
  72.             import org.bigbluebutton.main.events.BackButtonEvent;
  73.             import org.bigbluebutton.main.events.ConfigEvent;
  74.             import org.bigbluebutton.main.events.LogoutEvent;
  75.             import org.bigbluebutton.main.events.MobileWaitingEvent;
  76.             import org.bigbluebutton.main.events.ModuleLoadEvent;
  77.             import org.bigbluebutton.main.events.PauseApp;
  78.             import org.bigbluebutton.main.events.SettingsEvent;
  79.             import org.bigbluebutton.modules.listeners.events.ListenersCommand;
  80.             import org.bigbluebutton.modules.listeners.events.ListenersEvent;
  81.             import org.bigbluebutton.modules.present.events.MobilePresentationEvent;
  82.             import org.bigbluebutton.modules.present.ui.views.PresentationWindow;
  83.             import org.bigbluebutton.modules.videoconf.events.ClosePublishWindowEvent;
  84.             import org.bigbluebutton.modules.videoconf.events.OpenPublishWindowEvent;
  85.             import org.bigbluebutton.modules.videoconf.events.WebcamOptionsEvent;
  86.             import org.bigbluebutton.modules.videoconf.model.MobileCamera;
  87.             import org.bigbluebutton.modules.videodock.views.MobileVideoView;
  88.             import org.bigbluebutton.modules.viewers.events.ViewersWindowEvent;
  89.             import org.bigbluebutton.modules.whiteboard.events.WhiteboardButtonEvent;
  90.             import org.bigbluebutton.util.i18n.ResourceUtil;
  91.             import org.bigbluebutton.util.logging.Logger;
  92.  
  93.             use namespace mx_internal;
  94.  
  95.             private var images:Images=new Images();
  96.  
  97.             private static const PANEL_SIZE:Number=8;
  98.             private static const VIEW_SIZE:Number=100 - PANEL_SIZE;
  99.             private static const MIN_PANEL_SIZE:Number=130;
  100.  
  101.             private var logs:Logger=new Logger();
  102.  
  103.             private var globalDispatcher:Dispatcher=new Dispatcher();
  104.  
  105.             private var _micOff:Boolean=false;
  106.             private var version:String;
  107.             private var operatingSystem:String;
  108.  
  109.             [Bindable]
  110.             private var application:Object=FlexGlobals.topLevelApplication;
  111.  
  112.             private var radioButtonDown:MainToolButton;
  113.             private var _backRadioButton:MainToolButton; // for devices's "back" button
  114.  
  115.             [Bindable]
  116.             public var moderator:Boolean;
  117.  
  118.             [Bindable]
  119.             private var _screenHeight:int; // for bug in scrolling Lists to unstick them from top
  120.  
  121.             private var videoView:MobileVideoView;
  122.  
  123.             private var defaultOrientation:String;
  124.  
  125.             private var whiteboardView:PresentationWindow;
  126.  
  127.             private var initDeferred:Deferred=new Deferred();
  128.  
  129.             private function init():void
  130.             {
  131.                 var mobileWaitStart:MobileWaitingEvent=new MobileWaitingEvent(MobileWaitingEvent.MOBILE_WAITING_MANUAL_ON);
  132.                 globalDispatcher.dispatchEvent(mobileWaitStart);
  133.  
  134.                 _screenHeight=FlexGlobals.topLevelApplication.height;
  135.  
  136.                 toolbar.radioButtonClicked=radioButtonClicked;
  137.  
  138.                 initDeferred.resolve("Mobile Application inited");
  139.  
  140.             }
  141.  
  142.             // great place to load data from config files
  143.             private function gotConfigParameters(e:ConfigEvent):void
  144.             {
  145.                 initDeferred.promise.then(function():void
  146.                 {
  147.                     toolbar.loadButtons(e);
  148.                 }, errorHandler);
  149.             }
  150.  
  151.             private static function errorHandler(e:Object):void
  152.             {
  153.                 LogUtil.error(e.toString());
  154.             }
  155.  
  156.             // stage object available here
  157.             private function addedToStage():void
  158.             {
  159.                 defaultOrientation=stage.orientation;
  160.                 stage.setOrientation(defaultOrientation);
  161.                 stage.autoOrients=false;
  162.  
  163.                 this.currentState="landscape";
  164.  
  165.             }
  166.  
  167.             public function activateScreen():void
  168.             {
  169.                 if (stage)
  170.                     stage.setOrientation(defaultOrientation);
  171.  
  172.                 activateApp();
  173.             }
  174.  
  175.             // app loses focus or put in background
  176.             public function handleDeactivateEvent():void
  177.             {
  178.  
  179.                 initDeferred.promise.then(function():void
  180.                 {
  181.                     LogUtil.info(" Deactivate App");
  182.  
  183.                     UserManager.getInstance().getConference().appPaused=true;
  184.  
  185.                     muteUser(true);
  186.  
  187.                     // turn off cameras
  188.                     if (videoView)
  189.                         videoView.deactivate();
  190.  
  191.                     var pauseApp:PauseApp=new PauseApp(PauseApp.PAUSE_APP);
  192.                     globalDispatcher.dispatchEvent(pauseApp);
  193.  
  194.                     logs.save();
  195.                 }, errorHandler);
  196.             }
  197.  
  198.             // manage radio button states
  199.             public function radioButtonClicked(butt:MainToolButton):void
  200.             {
  201.                 // if user clicked the same button again
  202.                 if (butt == radioButtonDown)
  203.                 {
  204.                     return;
  205.                 }
  206.  
  207.                 if (butt.radioButton)
  208.                 {
  209.                     butt.lockRadio();
  210.  
  211.                     closePrevRadioButton();
  212.  
  213.                     radioButtonDown=butt;
  214.                 }
  215.                 else
  216.                 {
  217.                     // Case for that the user clicked "setting" immediately after he had clicked the button "chat".
  218.                     var buttonChat:MainToolButton=toolbar.getButtonByName("chat");
  219.                     var buttonSetting:MainToolButton=toolbar.getButtonByName("setting");
  220.                     if ((butt == buttonSetting) && (radioButtonDown == buttonChat))
  221.                     {
  222.                         // close chat textbox
  223.                         radioButtonDown.deactivate();
  224.                     }
  225.                 }
  226.  
  227.                 butt.activate();
  228.  
  229.                 var activateBtn:Object={chatBtn: emptyFunction, videoBtn: activateVideoBtn, whiteboardBtn: activateWhiteboardBtn, logoutBtn: activateLogoutBtn, micBtn: activateMicBtn, moreBtn: activateMoreBtn, settingBtn: activateSettingBtn, snapshotBtn: snapshotClicked};
  230.  
  231.                 activateBtn[butt.buttonName]();
  232.             }
  233.  
  234.             private function emptyFunction():void
  235.             {
  236.             }
  237.  
  238.             // loading/startup finished, so OK to auto start a view
  239.             private function handleAllModulesLoadedEvent(event:ModuleLoadEvent):void
  240.             {
  241.                 initDeferred.promise.then(function():void
  242.                 {
  243.                     var firstBtn:MainToolButton=toolbar.getFirstButton();
  244.                     radioButtonClicked(firstBtn); // auto start video view
  245.                     _backRadioButton=firstBtn;
  246.  
  247.                     var mobileWaitStop:MobileWaitingEvent=new MobileWaitingEvent(MobileWaitingEvent.MOBILE_WAITING_MANUAL_OFF);
  248.                     globalDispatcher.dispatchEvent(mobileWaitStop);
  249.  
  250.                     loadMenusItems();
  251.                 }, errorHandler);
  252.             }
  253.  
  254.             private function loadMenusItems():void
  255.             {
  256.                 setLogoutDataProvider(moderator);
  257.                 setWebcamDataProvider();
  258.             }
  259.  
  260.             private function activateApp():void
  261.             {
  262.                 initDeferred.promise.then(function():void
  263.                 {
  264.  
  265.                     LogUtil.info(" Activate App");
  266.  
  267.                     UserManager.getInstance().getConference().appPaused=false;
  268.  
  269.                     var activateApp:PauseApp=new PauseApp(PauseApp.ACTIVATE_APP);
  270.                     globalDispatcher.dispatchEvent(activateApp);
  271.  
  272.                     if (videoView)
  273.                         videoView.reactivate();
  274.  
  275.                     if (!_micOff)
  276.                         muteUser(false);
  277.                 }, errorHandler);
  278.  
  279.             }
  280.  
  281.             private function muteUser(mute:Boolean):void
  282.             {
  283.                 var lce:ListenersCommand=new ListenersCommand(ListenersCommand.MUTE_USER);
  284.                 lce.userid=UserManager.getInstance().getConference().getMyVoiceUserId();
  285.                 lce.mute=mute;
  286.                 globalDispatcher.dispatchEvent(lce);
  287.             }
  288.  
  289.             private function handleBackButton(event:Event):void
  290.             {
  291.  
  292.                 if (setting.visible)
  293.                 {
  294.                     setting.handleBackButton();
  295.                 }
  296.                 else
  297.                 {
  298.                     radioButtonDown.popupNow();
  299.                     radioButtonClicked(_backRadioButton);
  300.                 }
  301.             }
  302.  
  303.             private function handleOpenWindowEvent(event:OpenWindowEvent):void
  304.             {
  305.                 hideWindow();
  306.  
  307.                 if (event.view)
  308.                 {
  309.                     var view:View=event.view;
  310.                     centerstage.addElement(view);
  311.                 }
  312.  
  313.             }
  314.  
  315.             private function handleCloseWindowEvent(event:CloseWindowEvent):void
  316.             {
  317.                 if (event.view)
  318.                 {
  319.                     var view:View=event.view;
  320.                     if (centerstage.containsElement(view))
  321.                         centerstage.removeElement(view);
  322.                 }
  323.             }
  324.  
  325.  
  326.             private function setModerator(e:ListenersEvent):void
  327.             {
  328.                 moderator=e.moderator;
  329.             }
  330.  
  331.             private function closePrevRadioButton():void
  332.             {
  333.                 if (radioButtonDown)
  334.                 {
  335.                     _backRadioButton=radioButtonDown;
  336.                     radioButtonDown.releaseRadio();
  337.  
  338.                     // ==== close previous window ====
  339.                     radioButtonDown.deactivate();
  340.  
  341.                     if (radioButtonDown.buttonName == "videoBtn")
  342.                     {
  343.                         closeWatchvideo();
  344.                     }
  345.                     else if (radioButtonDown.buttonName == "whiteboardBtn")
  346.                     {
  347.                         closeWhiteboard();
  348.                     }
  349.                     toolbar.hideMoreOptions();
  350.                     radioButtonDown=null;
  351.                 }
  352.  
  353.             }
  354.  
  355.             private function activateMicBtn():void
  356.             {
  357.                 _micOff=!_micOff;
  358.             }
  359.  
  360.             private function activateMoreBtn():void
  361.             {
  362.                 toolbar.activateMoreBtn();
  363.             }
  364.  
  365.             private function activateSettingBtn():void
  366.             {
  367.                 toolbar.hideMoreOptions();
  368.                 setting.visible=true;
  369.             }
  370.  
  371.             private function activateLogoutBtn():void
  372.             {
  373.                 toolbar.hideMoreOptions();
  374.  
  375.                 logoutView.visible=true;
  376.             }
  377.  
  378.             private function openWebcam():void
  379.             {
  380.                 var we:OpenPublishWindowEvent=new OpenPublishWindowEvent(OpenPublishWindowEvent.OPEN_PUBLISH_WINDOW);
  381.                 globalDispatcher.dispatchEvent(we);
  382.  
  383.             }
  384.  
  385.             private function openSettingResolutionOnlyWindow(event:Event):void
  386.             {
  387.                 var button:MainToolButton=toolbar.getButtonByName("setting");
  388.                 radioButtonClicked(button);
  389.                 setting.setResolutionOnly();
  390.             }
  391.  
  392.             private function activateVideoBtn():void
  393.             {
  394.                 if (videoView)
  395.                 {
  396.                     videoView.visible=true;
  397.                 }
  398.                 else
  399.                 {
  400.                     videoView=new MobileVideoView();
  401.                     centerstage.addElement(videoView);
  402.                 }
  403.             }
  404.  
  405.             private function activateWhiteboardBtn():void
  406.             {
  407.                 whiteboardView.visible=true;
  408.             }
  409.  
  410.             private function closeWatchvideo():void
  411.             {
  412.                 videoView.visible=false;
  413.             }
  414.  
  415.             private function handleEndMeetingEvent(event:BBBEvent):void
  416.             {
  417.                 dispatchEvent(new LogoutEvent(LogoutEvent.MEETING_ENDED));
  418.             }
  419.  
  420.             private function snapshotClicked():void
  421.             {
  422.                 toolbar.hideMoreOptions();
  423.             }
  424.  
  425.             private function closeWhiteboard():void
  426.             {
  427.                 globalDispatcher.dispatchEvent(new WhiteboardButtonEvent(WhiteboardButtonEvent.DISABLE_WHITEBOARD));
  428.                 whiteboardView.visible=false;
  429.             }
  430.  
  431.             private function openUsers():void
  432.             {
  433.                 dispatchEvent(new ViewersWindowEvent(ViewersWindowEvent.VIEWERS_WINDOW_OPEN_EVENT));
  434.             }
  435.  
  436.  
  437.             // used for non-MDI windows
  438.             // TODO make all windows non-MDI
  439.             private function showWindow():void
  440.             {
  441.                 if (radioButtonDown && radioButtonDown.buttonName == "snapshotBtn")
  442.                 {
  443.                     radioButtonDown.activate();
  444.                 }
  445.             }
  446.  
  447.             // close all the Settings sub windows
  448.             private function hideWindow():void
  449.             {
  450.                 webcamOptions.visible=false;
  451.                 logoutView.visible=false;
  452.             }
  453.  
  454.             private function handleSettingMenuExit(event:SettingsEvent):void
  455.             {
  456.                 setting.visible=false;
  457.  
  458.                 // Case for that the user clicked "setting" immediately after he had clicked "chat".
  459.                 var buttonChat:MainToolButton=toolbar.getButtonByName("chat");
  460.                 if (radioButtonDown == buttonChat)
  461.                 {
  462.                     // open chat textbox
  463.                     radioButtonDown.activate();
  464.                 }
  465.             }
  466.  
  467.             private function handleSettingsOpen(event:SettingsEvent):void
  468.             {
  469.                 radioButtonClicked(radioButtonDown);
  470.             }
  471.  
  472.  
  473.  
  474.             private function handleLogoutWindowOpenEvent(event:SettingsEvent):void
  475.             {
  476.                 radioButtonClicked(radioButtonDown);
  477.             }
  478.  
  479.             private function handleSnapshotWindowOpenEvent(event:SettingsEvent):void
  480.             {
  481.                 radioButtonClicked(_backRadioButton);
  482.                 radioButtonDown.activate();
  483.             }
  484.  
  485.             // logout cancel
  486.             private function handleCancelLogoutEvent(e:LogoutEvent):void
  487.             {
  488.                 logoutView.visible=false;
  489.             }
  490.  
  491.             // handle logout clicked
  492.             private function handleUserLogoutEvent(e:LogoutEvent):void
  493.             {
  494.                 if (videoView) {
  495.                     videoView.remove();
  496.                 }
  497.                    
  498.                 if (MobileCamera.getInstance()._camera)
  499.                 {
  500.                     MobileCamera.getInstance().stopCamera();
  501.                 }
  502.                 logoutView.visible=false;
  503.             }
  504.  
  505.             // language changed
  506.             private function localeChanged(e:LocaleChangeEvent):void
  507.             {
  508.                 initDeferred.promise.then(function():void
  509.                 {
  510.                     setLogoutDataProvider(UserManager.getInstance().getConference().amIModerator());
  511.                     setWebcamDataProvider();
  512.                 }, errorHandler);
  513.             }
  514.  
  515.             private function setLogoutDataProvider(_moderator:Boolean):void
  516.             {
  517.                 var mainOptions:Array;
  518.                 var restOptions:Array = [
  519.                     {label: ResourceUtil.getInstance().getString('bbb.fileupload.okCancelBtn'), event: LogoutEvent.CANCEL_LOGOUT, icon: images.cancel_red}
  520.                 ];
  521.                
  522.                 if(_moderator)
  523.                 {
  524.                     mainOptions = [
  525.                         {label: ResourceUtil.getInstance().getString('bbb.logoutOption.leave'), event: LogoutEvent.USER_LOGGED_OUT},
  526.                         {label: ResourceUtil.getInstance().getString('bbb.logoutOption.endClass'), event: LogoutEvent.END_MEETING}
  527.                     ];
  528.                 }
  529.                 else
  530.                 {
  531.                     mainOptions = [
  532.                         {label: ResourceUtil.getInstance().getString('bbb.mainshell.logoutQuestion')},
  533.                         {label: ResourceUtil.getInstance().getString('bbb.mainToolbar.logoutBtn'), event: LogoutEvent.USER_LOGGED_OUT, icon: images.ok_green}
  534.                     ];
  535.                 }
  536.                
  537.                 logoutView.dataProvider=new ArrayCollection(mainOptions.concat(restOptions));              
  538.             }
  539.            
  540.             private function openWebcamOptions():void
  541.             {
  542.  
  543.                 if (webcamOptions.visible)
  544.                 {
  545.                     webcamOptions.visible=false;
  546.                 }
  547.                 else
  548.                 {
  549.                     webcamOptions.visible=true;
  550.                 }
  551.  
  552.             }
  553.  
  554.             private function setWebcamDataProvider():void
  555.             {
  556.                 webcamOptions.dataProvider=null;
  557.                 webcamOptions.dataProvider=new ArrayCollection([{label: ' ', event: SettingsEvent.OPEN_SETTINGS_PANEL, icon: images.logoBackIcon}, {label: ResourceUtil.getInstance().getString('bbb.publishVideo.webcam.stop'), event: ClosePublishWindowEvent.REMOTE_CLOSE_PUBLISH_WINDOW}, {label: ResourceUtil.getInstance().getString('bbb.publishVideo.webcam.change.cam'), event: WebcamOptionsEvent.CHANGE_CAMERA_EVENT}, {label: ResourceUtil.getInstance().getString('bbb.publishVideo.webcam.change.res'), event: WebcamOptionsEvent.CHANGE_RESOLUTION_EVENT},]);
  558.             }
  559.  
  560.             private function whiteboardHandler(e:MobilePresentationEvent):void
  561.             {
  562.                 whiteboardView=e.window as PresentationWindow;
  563.                 centerstage.addElement(whiteboardView);
  564.                 whiteboardView.visible=false;
  565.             }
  566.  
  567.             private function keepMinimumPanelSize():void
  568.             {
  569.                 if (toolbar.width < MIN_PANEL_SIZE)
  570.                 {
  571.                     toolbar.width=MIN_PANEL_SIZE;
  572.                     centerstage.width=allgroup.width - toolbar.width;
  573.                 }
  574.  
  575.                 if (toolbar.height < MIN_PANEL_SIZE)
  576.                 {
  577.                     toolbar.height=MIN_PANEL_SIZE;
  578.                     centerstage.height=allgroup.height - toolbar.height;
  579.                 }
  580.             }
  581.  
  582.             private function addComponentToCanvas(e:AddUIComponentToMainCanvas):void
  583.             {
  584.                 centerstage.addElement(e.component);
  585.             }
  586.         ]]>
  587.     </fx:Script>
  588.  
  589.     <!-- ====================== 3 columns: left toolbar, center stage, right toolbar =============================  -->
  590.     <s:Group id="fullscreen"
  591.              height="100%"
  592.              width="100%">
  593.         <s:Group id="allgroup"
  594.                  width="{application.width}"
  595.                  height="{application.height}">
  596.             <s:layout.landscape>
  597.                 <s:HorizontalLayout gap="0"/>
  598.             </s:layout.landscape>
  599.             <s:layout.portrait>
  600.                 <s:VerticalLayout gap="0"/>
  601.             </s:layout.portrait>
  602.  
  603.             <!-- =======================================   Center stage  ======================================  -->
  604.             <s:Group id="centerstage"
  605.                      width.landscape="{allgroup.width * VIEW_SIZE / 100}"
  606.                      height.landscape="{allgroup.height}"
  607.                      width.portrait="{allgroup.width}"
  608.                      height.portrait="{allgroup.height * VIEW_SIZE / 100}">
  609.  
  610.             </s:Group>
  611.  
  612.             <!-- ==================================  Right or Bottom Toolbar =================================== -->
  613.  
  614.             <views:MainToolbar id="toolbar"
  615.                                height.portrait="{PANEL_SIZE}%"
  616.                                width.portrait="100%"
  617.                                height.landscape="100%"
  618.                                width.landscape="{PANEL_SIZE}%"
  619.                                resize="keepMinimumPanelSize()"/>
  620.  
  621.         </s:Group>
  622.  
  623.         <views:MainApplicationShell id="mainShell"
  624.                                     width="100%"
  625.                                     height="100%"/>
  626.  
  627.         <s:List id="webcamOptions"
  628.                 itemRenderer="org.bigbluebutton.modules.videoconf.views.WebcamControlRenderer"
  629.                 height="360"
  630.                 width="240"
  631.                 x="{centerstage.width-webcamOptions.width}"
  632.                 click="openWebcamOptions()"
  633.                 y="{centerstage.height-webcamOptions.height}"
  634.                 visible="false"
  635.                 borderVisible="true"
  636.                 borderColor="0x000000"/>
  637.  
  638.         <s:List id="logoutView"
  639.                 itemRenderer="org.bigbluebutton.main.views.LogoutRenderer"
  640.                 height="360"
  641.                 width="240"
  642.                 x="{centerstage.width-logoutView.width}"
  643.                 y="{centerstage.height - logoutView.height}"
  644.                 visible="false"
  645.                 borderVisible="true"
  646.                 borderColor="0x000000"/>
  647.        
  648.         <views:SettingWindow id="setting"
  649.                              width="100%"
  650.                              height="{_screenHeight}"
  651.                              visible="false"/>
  652.     </s:Group>
  653. </s:View>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement