From ccffb5074c0b25e4be91af006b903c0af46530c3 Mon Sep 17 00:00:00 2001 From: alexandrekreis Date: Wed, 2 Oct 2013 15:51:08 -0300 Subject: [PATCH] refs #934 Now the moderator and the presenter can have user status --- .../model/users/events/ChangeStatusEvent.as | 22 +- .../users/views/StatusItemRenderer.mxml | 165 +++++++------ .../modules/users/views/UsersWindow.mxml | 227 +++++++++--------- 3 files changed, 218 insertions(+), 196 deletions(-) diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/events/ChangeStatusEvent.as b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/events/ChangeStatusEvent.as index 97bcdc8c01..acd999ac71 100644 --- a/bigbluebutton-client/src/org/bigbluebutton/main/model/users/events/ChangeStatusEvent.as +++ b/bigbluebutton-client/src/org/bigbluebutton/main/model/users/events/ChangeStatusEvent.as @@ -24,17 +24,17 @@ package org.bigbluebutton.main.model.users.events { public static const CHANGE_STATUS:String = "CHANGE_STATUS_EVENT"; - public static const CLEAR_STATUS:String = "clear_status"; - public static const RAISE_HAND:String = "raise_hand"; - public static const AGREE:String = "agree"; - public static const DISAGREE:String = "disagree"; - public static const SPEAK_LOUDER:String = "speak_louder"; - public static const SPEAK_LOWER:String = "speak_lower"; - public static const SPEAK_FASTER:String = "speak_faster"; - public static const SPEAK_SLOWER:String = "speak_slower"; - public static const BE_RIGHT_BACK:String = "be_right_back"; - public static const LAUGHTER:String = "laughter"; - public static const SAD:String = "sad"; + public static const CLEAR_STATUS:String = "CLEAR_STATUS"; + public static const RAISE_HAND:String = "RAISE_HAND"; + public static const AGREE:String = "AGREE"; + public static const DISAGREE:String = "DISAGREE"; + public static const SPEAK_LOUDER:String = "SPEAK_LOUDER"; + public static const SPEAK_LOWER:String = "SPEAK_LOWER"; + public static const SPEAK_FASTER:String = "SPEAK_FASTER"; + public static const SPEAK_SLOWER:String = "SPEAK_SLOWER"; + public static const BE_RIGHT_BACK:String = "BE_RIGHT_BACK"; + public static const LAUGHTER:String = "LAUGHTER"; + public static const SAD:String = "SAD"; private var status:String; public var userId:String; diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/StatusItemRenderer.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/StatusItemRenderer.mxml index 2d56fde400..d6f577f644 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/StatusItemRenderer.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/StatusItemRenderer.mxml @@ -92,116 +92,129 @@ private function updateButton(unneeded:Object = null):void { if (data != null) { - if (data.presenter) + if (rolledOver) //if i'm moderator and I rolled the mouse { - roleImg.source = images.presenter_new; - roleImg.toolTip = ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.presenter'); - roleImg.visible = true; - roleBtn.visible = false; - roleBtn.enabled = false; - } - else if (rolledOver) - { - roleImg.visible = false; - roleBtn.visible = true; - roleBtn.enabled = true; - if (data.userHasStatus) { - roleBtn.setStyle("icon", images.delete_icon); - roleBtn.toolTip = ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.clearStatus'); + statusBtn.setStyle("icon", images.delete_icon); + statusBtn.toolTip = ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.clearStatus'); + + statusImg.visible = false; + statusBtn.visible = true; + statusBtn.enabled = true; } - else + if(!data.presenter) { - roleBtn.setStyle("icon", images.presenter_new); + roleBtn.setStyle("icon", images.presenter_new); roleBtn.toolTip = ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.changePresenter'); + + roleImg.visible = false; + roleBtn.visible = true; + roleBtn.enabled = true; } - } - else if (data.role == Role.MODERATOR) - { - roleImg.source = images.moderator; - roleImg.toolTip = ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.moderator'); - roleImg.visible = true; - roleBtn.visible = false; - roleBtn.enabled = false; - } - else if (data.userHasStatus) + } + + else { + //updating which role to show: presenter or moderator + if (data.presenter) + { + roleImg.source = images.presenter_new; + roleImg.toolTip = ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.presenter') + } + + else if(data.role == Role.MODERATOR) + { + roleImg.source = images.moderator; + roleImg.toolTip = ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.moderator'); + } + + else + { + roleImg.source = null; + roleImg.toolTip = ""; + } + + + //updating which status to show switch(data.currentStatus) { case ChangeStatusEvent.RAISE_HAND: - roleImg.source = images.hand_new; - roleImg.toolTip = ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.handRaised'); + statusImg.source = images.hand_new; + statusImg.toolTip = ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.handRaised'); break; case ChangeStatusEvent.AGREE: - roleImg.source = images.agree; - roleImg.toolTip = ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.agree'); + statusImg.source = images.agree; + statusImg.toolTip = ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.agree'); break; case ChangeStatusEvent.DISAGREE: - roleImg.source = images.disagree; - roleImg.toolTip = ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.disagree'); + statusImg.source = images.disagree; + statusImg.toolTip = ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.disagree'); break; case ChangeStatusEvent.SPEAK_LOUDER: - roleImg.source = images.speak_louder; - roleImg.toolTip = ResourceUtil.getInstance().getString('bbb.users.status.speak_louder'); + statusImg.source = images.speak_louder; + statusImg.toolTip = ResourceUtil.getInstance().getString('bbb.users.status.speak_louder'); break; case ChangeStatusEvent.SPEAK_LOWER: - roleImg.source = images.speak_lower; - roleImg.toolTip = ResourceUtil.getInstance().getString('bbb.users.status.speak_lower'); + statusImg.source = images.speak_lower; + statusImg.toolTip = ResourceUtil.getInstance().getString('bbb.users.status.speak_lower'); break; case ChangeStatusEvent.SPEAK_FASTER: - roleImg.source = images.speak_faster; - roleImg.toolTip = ResourceUtil.getInstance().getString('bbb.users.status.speak_faster'); + statusImg.source = images.speak_faster; + statusImg.toolTip = ResourceUtil.getInstance().getString('bbb.users.status.speak_faster'); break; case ChangeStatusEvent.SPEAK_SLOWER: - roleImg.source = images.speak_slower; - roleImg.toolTip = ResourceUtil.getInstance().getString('bbb.users.status.speak_slower'); + statusImg.source = images.speak_slower; + statusImg.toolTip = ResourceUtil.getInstance().getString('bbb.users.status.speak_slower'); break; case ChangeStatusEvent.BE_RIGHT_BACK: - roleImg.source = images.be_right_back; - roleImg.toolTip = ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.be_right_back'); + statusImg.source = images.be_right_back; + statusImg.toolTip = ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.be_right_back'); break; case ChangeStatusEvent.LAUGHTER: - roleImg.source = images.laughter; - roleImg.toolTip = ResourceUtil.getInstance().getString('bbb.users.status.laughter'); + statusImg.source = images.laughter; + statusImg.toolTip = ResourceUtil.getInstance().getString('bbb.users.status.laughter'); break; case ChangeStatusEvent.SAD: - roleImg.source = images.sad; - roleImg.toolTip = ResourceUtil.getInstance().getString('bbb.users.status.sad'); - } + statusImg.source = images.sad; + statusImg.toolTip = ResourceUtil.getInstance().getString('bbb.users.status.sad'); + break; - roleImg.visible = true; + default: //user has no status... + statusImg.source = null; + statusImg.toolTip = ""; + } + + roleImg.visible = true; + statusImg.visible = true; + roleBtn.visible = false; + statusBtn.visible = false; + roleBtn.enabled = false; - } - else - { - roleImg.source = null; - roleImg.toolTip = ""; - roleImg.visible = true; - roleBtn.visible = false; - roleBtn.enabled = false; - } - } - } + statusBtn.enabled = false; + + } + } + } - private function onRollOver(e:UsersRollEvent):void{ + private function onRollOver(e:UsersRollEvent):void{ //descobrir qual botão: role ou status if (moderator && (e.userID == data.userID) && !data.phoneUser) { rolledOver = true; updateButton(); } } - private function onRollOut(e:UsersRollEvent):void{ + private function onRollOut(e:UsersRollEvent):void{ //descobrir qual botão: role ou status if (moderator) { rolledOver = false; updateButton(); @@ -210,20 +223,15 @@ private function roleBtnClicked():void { - // Ignore if the selected user is already the presenter. - if (data.presenter) return; - - if (data.userHasStatus) - { - dispatchEvent( new ChangeStatusEvent(data.userID, ChangeStatusEvent.CLEAR_STATUS) ) - } - else - { - var e:RoleChangeEvent = new RoleChangeEvent(RoleChangeEvent.ASSIGN_PRESENTER); - e.userid = data.userID; - e.username = data.name; - dispatchEvent(e); - } + var e:RoleChangeEvent = new RoleChangeEvent(RoleChangeEvent.ASSIGN_PRESENTER); + e.userid = data.userID; + e.username = data.name; + dispatchEvent(e); + } + + private function statusBtnClicked():void + { + dispatchEvent( new ChangeStatusEvent(data.userID, ChangeStatusEvent.CLEAR_STATUS) ) } // Need to refresh the roleBtn toolTip text on locale change @@ -233,7 +241,10 @@ ]]> - + + + + diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/UsersWindow.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/UsersWindow.mxml index 6d861f65e8..97fa234659 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/UsersWindow.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/UsersWindow.mxml @@ -89,6 +89,7 @@ private var users:ArrayCollection = new ArrayCollection(); private var amIModerator:Boolean = false; + private var baseIndex:int = 0; private const FOCUS_USERS_LIST:String = "Focus Users List"; private const MAKE_PRESENTER:String = "Make Presenter"; @@ -104,9 +105,8 @@ users = UserManager.getInstance().getConference().users; amIModerator = UserManager.getInstance().getConference().amIModerator(); - settingsBtn.visible = settingsBtn.includeInLayout = partOptions.enableSettingsButton && amIModerator; + //settingsBtn.visible = settingsBtn.includeInLayout = partOptions.enableSettingsButton && amIModerator; - BindingUtils.bindSetter(changeButtons, UserManager.getInstance().getConference(), "amIPresenter"); BindingUtils.bindSetter(updateNumberofUsers, users, "length"); this.addEventListener(KeyboardEvent.KEY_DOWN, handleKeyDown); @@ -115,8 +115,6 @@ modifier = ExternalInterface.call("determineModifier"); loadKeyCombos(modifier); - changeButtons(UserManager.getInstance().getConference().amIPresenter); - resourcesChanged(); titleBarOverlay.tabIndex = partOptions.baseTabIndex; @@ -142,10 +140,6 @@ resourcesChanged(); } - private function changeButtons(presenter:Boolean):void { - statusBtn.visible = statusBtn.includeInLayout = partOptions.enableRaiseHand && !(presenter || amIModerator); - } - private function onItemRollOver(event:ListEvent):void{ var item:IListItemRenderer = event.itemRenderer; var user:BBBUser = item.data as BBBUser; @@ -168,80 +162,6 @@ } } - private function openParticipantStatus():void { - - var menuStatusData:Array = []; - - menuStatusData[0] = {label: ResourceUtil.getInstance().getString('bbb.users.status.clearStatus'), icon: images.delete_icon}; - menuStatusData[1] = {label: ResourceUtil.getInstance().getString('bbb.shortcutkey.raiseHand.function'), icon: images.hand_new}; - menuStatusData[2] = {label: ResourceUtil.getInstance().getString('bbb.users.status.agree'), icon: images.agree}; - menuStatusData[3] = {label: ResourceUtil.getInstance().getString('bbb.users.status.disagree'), icon: images.disagree}; - menuStatusData[4] = {label: ResourceUtil.getInstance().getString('bbb.users.status.speak_louder'), icon: images.speak_louder}; - menuStatusData[5] = {label: ResourceUtil.getInstance().getString('bbb.users.status.speak_lower'), icon: images.speak_lower}; - menuStatusData[6] = {label: ResourceUtil.getInstance().getString('bbb.users.status.speak_faster'), icon: images.speak_faster}; - menuStatusData[7] = {label: ResourceUtil.getInstance().getString('bbb.users.status.speak_slower'), icon: images.speak_slower}; - menuStatusData[8] = {label: ResourceUtil.getInstance().getString('bbb.users.status.be_right_back'), icon: images.be_right_back}; - menuStatusData[9] = {label: ResourceUtil.getInstance().getString('bbb.users.status.laughter'), icon: images.laughter}; - menuStatusData[10] = {label: ResourceUtil.getInstance().getString('bbb.users.status.sad'), icon: images.sad}; - - - // make sure the previous menu is closed before opening a new one - // This could be improved to include a flag that tells if the menu is open, - // but it would require an extra listener for the MenuCloseEvent. - if (menuStatus) menuStatus.hide(); - - menuStatus = Menu.createMenu(null, menuStatusData, true); - - menuStatus.variableRowHeight = true; - menuStatus.show(this.x + settingsBtn.x + 2, this.y + this.height + 25); - menuStatus.addEventListener(MenuEvent.ITEM_CLICK, menuStatusClickHandler); - menuStatus.setFocus(); - } - - private function menuStatusClickHandler(e:MenuEvent):void { - switch (e.index) { - case 0: - changeStatus(ChangeStatusEvent.CLEAR_STATUS); - break; - case 1: - changeStatus(ChangeStatusEvent.RAISE_HAND); - break; - case 2: - changeStatus(ChangeStatusEvent.AGREE); - break; - case 3: - changeStatus(ChangeStatusEvent.DISAGREE); - break; - case 4: - changeStatus(ChangeStatusEvent.SPEAK_LOUDER); - break; - case 5: - changeStatus(ChangeStatusEvent.SPEAK_LOWER); - break; - case 6: - changeStatus(ChangeStatusEvent.SPEAK_FASTER); - break; - case 7: - changeStatus(ChangeStatusEvent.SPEAK_SLOWER); - break; - case 8: - changeStatus(ChangeStatusEvent.BE_RIGHT_BACK); - break; - case 9: - changeStatus(ChangeStatusEvent.LAUGHTER); - break; - default: - changeStatus(ChangeStatusEvent.SAD); - } - } - - private function changeStatus(whichStatus:String):void{ - if (UserManager.getInstance().getConference().getMyRole() == Role.VIEWER) { - var e:ChangeStatusEvent = new ChangeStatusEvent(UserManager.getInstance().getConference().getMyUserId(), whichStatus); - dispatchEvent(e); - } - } - private function clearAllStatus():void { // Pendente: ver clear status do moderador for (var i:int = 0; i < users.length; i++) { var p:BBBUser = users.getItemAt(i) as BBBUser; @@ -253,15 +173,41 @@ private function openSettings():void { // everyone can see the audio settings var myMenuData:Array = []; - - myMenuData[0] = {label: ResourceUtil.getInstance().getString('bbb.users.settings.clearAllStats'), icon: images.delete_icon}; - if (!roomMuted) { - myMenuData[1] = {label: ResourceUtil.getInstance().getString('bbb.users.settings.muteAll'), icon: images.audio_muted}; - if (UserManager.getInstance().getConference().getPresenter()) - myMenuData[2] = {label: ResourceUtil.getInstance().getString('bbb.users.settings.muteAllExcept') + ": " + UserManager.getInstance().getConference().getPresenter().name, icon: images.audio_muted}; - } else - myMenuData[1] = {label: ResourceUtil.getInstance().getString('bbb.users.settings.unmuteAll'), icon: images.audio}; - + + if(amIModerator) + { + myMenuData[0] = {label: ResourceUtil.getInstance().getString('bbb.users.settings.clearAllStats'), icon: images.delete_icon}; + if (!roomMuted) + { + myMenuData[1] = {label: ResourceUtil.getInstance().getString('bbb.users.settings.muteAll'), icon: images.audio_muted}; + if (UserManager.getInstance().getConference().getPresenter()) + myMenuData[2] = {label: ResourceUtil.getInstance().getString('bbb.users.settings.muteAllExcept') + ": " + UserManager.getInstance().getConference().getPresenter().name, icon: images.audio_muted}; + baseIndex = 2; + } + else + { + myMenuData[1] = {label: ResourceUtil.getInstance().getString('bbb.users.settings.unmuteAll'), icon: images.audio}; + baseIndex = 1; + } + } + + + if(partOptions.enableRaiseHand) + { + myMenuData[baseIndex+1] = {label: ResourceUtil.getInstance().getString('bbb.users.status.clearStatus'), icon: images.delete_icon}; + myMenuData[baseIndex+2] = {label: ResourceUtil.getInstance().getString('bbb.shortcutkey.raiseHand.function'), icon: images.hand_new}; + myMenuData[baseIndex+3] = {label: ResourceUtil.getInstance().getString('bbb.users.status.agree'), icon: images.agree}; + myMenuData[baseIndex+4] = {label: ResourceUtil.getInstance().getString('bbb.users.status.disagree'), icon: images.disagree}; + myMenuData[baseIndex+5] = {label: ResourceUtil.getInstance().getString('bbb.users.status.speak_louder'), icon: images.speak_louder}; + myMenuData[baseIndex+6] = {label: ResourceUtil.getInstance().getString('bbb.users.status.speak_lower'), icon: images.speak_lower}; + myMenuData[baseIndex+7] = {label: ResourceUtil.getInstance().getString('bbb.users.status.speak_faster'), icon: images.speak_faster}; + myMenuData[baseIndex+8] = {label: ResourceUtil.getInstance().getString('bbb.users.status.speak_slower'), icon: images.speak_slower}; + myMenuData[baseIndex+9] = {label: ResourceUtil.getInstance().getString('bbb.users.status.be_right_back'), icon: images.be_right_back}; + myMenuData[baseIndex+10] = {label: ResourceUtil.getInstance().getString('bbb.users.status.laughter'), icon: images.laughter}; + myMenuData[baseIndex+11] = {label: ResourceUtil.getInstance().getString('bbb.users.status.sad'), icon: images.sad}; + } + + // make sure the previous menu is closed before opening a new one // This could be improved to include a flag that tells if the menu is open, // but it would require an extra listener for the MenuCloseEvent. @@ -276,19 +222,89 @@ } - private function menuClickHandler(e:MenuEvent):void { - // case 1 is the separator and can never get called - switch (e.index) { - case 0: - clearAllStatus(); - break; - case 1: - muteAll(); - break; - case 2: - muteAlmostAll(); + private function menuClickHandler(e:MenuEvent):void + { + if(baseIndex == 0) //not a moderator + { + changeStatusHandler(e.index) + } + + else if(baseIndex == 1) //i'm a moderator and there is NOT the "mute all except" option + { + switch (e.index) { + case 0: + clearAllStatus(); + break; + case 1: + muteAll(); + break; + default: + changeStatusHandler(e.index); + } + } + + else //i'm a moderator and the option "mute all except" is enabled + { + switch (e.index) { + case 0: + clearAllStatus(); + break; + case 1: + muteAll(); + break; + case 2: + muteAlmostAll(); + break; + default: + changeStatusHandler(e.index); + } } } + + private function changeStatusHandler(index:int):void { + switch (index) { + case baseIndex+1: + changeStatus(ChangeStatusEvent.CLEAR_STATUS); + break; + case baseIndex+2: + changeStatus(ChangeStatusEvent.RAISE_HAND); + break; + case baseIndex+3: + changeStatus(ChangeStatusEvent.AGREE); + break; + case baseIndex+4: + changeStatus(ChangeStatusEvent.DISAGREE); + break; + case baseIndex+5: + changeStatus(ChangeStatusEvent.SPEAK_LOUDER); + break; + case baseIndex+6: + changeStatus(ChangeStatusEvent.SPEAK_LOWER); + break; + case baseIndex+7: + changeStatus(ChangeStatusEvent.SPEAK_FASTER); + break; + case baseIndex+8: + changeStatus(ChangeStatusEvent.SPEAK_SLOWER); + break; + case baseIndex+9: + changeStatus(ChangeStatusEvent.BE_RIGHT_BACK); + break; + case baseIndex+10: + changeStatus(ChangeStatusEvent.LAUGHTER); + break; + case baseIndex+11: + changeStatus(ChangeStatusEvent.SAD); + } + } + + private function changeStatus(whichStatus:String):void + { + var e:ChangeStatusEvent = new ChangeStatusEvent(UserManager.getInstance().getConference().getMyUserId(), whichStatus); + dispatchEvent(e); + + } + private function setRoomMute(e:UsersEvent):void { roomMuted = e.mute_state; @@ -465,7 +481,7 @@ tabIndex="{partOptions.baseTabIndex+5}" accessibilityName="{ResourceUtil.getInstance().getString('bbb.users.usersGrid.accessibilityName')}" > - @@ -480,11 +496,6 @@ click="openSettings()" visible="true" tabIndex="{partOptions.baseTabIndex+10}" /> - -