diff --git a/bbb-video/build.gradle b/bbb-video/build.gradle index ec4da48f70ee4209ac56b827e8bc9504aeaa97af..f8850422b8e725b6e02aaa4b2e3b4c8a08521ee4 100755 --- a/bbb-video/build.gradle +++ b/bbb-video/build.gradle @@ -81,7 +81,7 @@ dependencies { providedCompile 'org.springframework:spring-core:3.1.1.RELEASE@jar' // Red5 - providedCompile 'org/red5:red5:1.0r4597@jar' + providedCompile 'org/red5:red5:1.0r4599@jar' // Logging providedCompile 'ch.qos.logback:logback-core:1.0.9@jar' diff --git a/bbb-voice/build.gradle b/bbb-voice/build.gradle index 1523dc6909f1a6a2d9477aceb9d68d221b796eea..1f6f3926f0048e66f682992bb0aa9ee0531ca30e 100755 --- a/bbb-voice/build.gradle +++ b/bbb-voice/build.gradle @@ -81,7 +81,7 @@ dependencies { providedCompile 'org.springframework:spring-core:3.1.1.RELEASE@jar' // Red5 - providedCompile 'org/red5:red5:1.0r4597@jar' + providedCompile 'org/red5:red5:1.0r4599@jar' // Logging providedCompile 'ch.qos.logback:logback-core:1.0.9@jar' diff --git a/bigbluebutton-apps/build.gradle b/bigbluebutton-apps/build.gradle index 02a2b1d02e05446d3290450fe3fe4cef05f4b24d..4c4802d09664445ef910f6559eb6024a1250b8d9 100755 --- a/bigbluebutton-apps/build.gradle +++ b/bigbluebutton-apps/build.gradle @@ -73,7 +73,7 @@ dependencies { providedCompile 'org.springframework:spring-core:3.1.1.RELEASE@jar' // Red5 - providedCompile 'org/red5:red5:1.0r4597@jar' + providedCompile 'org/red5:red5:1.0r4599@jar' // Logging providedCompile 'ch.qos.logback:logback-core:1.0.9@jar' diff --git a/bigbluebutton-client/locale/en_US/bbbResources.properties b/bigbluebutton-client/locale/en_US/bbbResources.properties index 2114c67cc7b3010611fa4cc02b444b03f73c38fa..fd12aae2f911c64693e5c36a014089ef72fea68b 100755 --- a/bigbluebutton-client/locale/en_US/bbbResources.properties +++ b/bigbluebutton-client/locale/en_US/bbbResources.properties @@ -73,8 +73,8 @@ bbb.users.usersGrid.statusItemRenderer.viewer = Viewer bbb.users.usersGrid.mediaItemRenderer = Media bbb.users.usersGrid.mediaItemRenderer.talking = Talking bbb.users.usersGrid.mediaItemRenderer.webcam = Sharing Webcam -bbb.users.usersGrid.mediaItemRenderer.pushToTalk = Click to talk -bbb.users.usersGrid.mediaItemRenderer.pushToMute = Click to mute yourself +bbb.users.usersGrid.mediaItemRenderer.pushToTalk = Click to unmute the user +bbb.users.usersGrid.mediaItemRenderer.pushToMute = Click to mute the user bbb.users.usersGrid.mediaItemRenderer.kickUser = Kick user bbb.users.usersGrid.mediaItemRenderer.webcam = Webcam shared bbb.users.usersGrid.mediaItemRenderer.micOff = Microphone off @@ -168,6 +168,7 @@ bbb.listenerItem.talkImg.toolTip = Talking bbb.listenerItem.lockImg.toolTip = Click to keep muted or unmuted bbb.listenerItem.muteUnmute.toolTip = Mute or unmute this listener bbb.publishVideo.title = Share your webcam +bbb.publishVideo.changeCamera.toolTip = Click to open the change camera dialog box bbb.publishVideo.startPublishBtn.toolTip = Start Sharing bbb.video.minimizeBtn.accessibilityName = Minimize the Video Dock Window bbb.video.maximizeRestoreBtn.accessibilityName = Maximize the Video Dock Window diff --git a/bigbluebutton-client/resources/config.xml.template b/bigbluebutton-client/resources/config.xml.template index 21bec108543fc79b011e9ec8a9beefe987d72f05..53a65b6972657c9190790c004ef35f17bd85a1f9 100755 --- a/bigbluebutton-client/resources/config.xml.template +++ b/bigbluebutton-client/resources/config.xml.template @@ -23,6 +23,7 @@ position="top-right" baseTabIndex="701" /> + <!-- <module name="ViewersModule" url="http://HOST/client/ViewersModule.swf?v=VERSION" uri="rtmp://HOST/bigbluebutton" diff --git a/bigbluebutton-client/src/org/bigbluebutton/main/views/CameraDisplaySettings.mxml b/bigbluebutton-client/src/org/bigbluebutton/main/views/CameraDisplaySettings.mxml index fcd6e1536081f272050a569ed7d2e7ca1dc98272..3dc36c566b57d3991f42586f3e43b7e75a04372d 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/main/views/CameraDisplaySettings.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/main/views/CameraDisplaySettings.mxml @@ -129,7 +129,9 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. displayVideoPreview(); } - private function displayVideoPreview():void { + private function displayVideoPreview():void { + setComboResolution(); + var videoOptions:VideoConfOptions = new VideoConfOptions(); _camera.setMotionLevel(5, 1000); _camera.setKeyFrameInterval(videoOptions.camKeyFrameInterval); @@ -141,8 +143,6 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. setResolution(_camera.width, _camera.height); } - setComboResolution(); - if (_video != null) { _videoHolder.remove(_video); } @@ -150,7 +150,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. _video = new Video(); _video.attachCamera(_camera); - aspectRatio = (_video.width / _video.height); + //aspectRatio = (_video.width / _video.height); if (aspectRatio > _videoHolder.width / _videoHolder.height) { _video.width = _videoHolder.width; @@ -288,7 +288,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>. <mx:Spacer width="5"/> <mx:Button id="changeCamera" styleName="cameraDisplaySettingsWindowChangeCamBtn" label="{ResourceUtil.getInstance().getString('bbb.publishVideo.changeCameraBtn.labelText')}" - toolTip="{ResourceUtil.getInstance().getString('bbb.publishVideo.startPublishBtn.toolTip')}" + toolTip="{ResourceUtil.getInstance().getString('bbb.publishVideo.changeCamera.toolTip')}" click="showCameraSettings()"/> <mx:Spacer width="70%"/> <mx:ComboBox id="cmbResolution" styleName="cameraDisplaySettingsWindowChangeResolutionCombo" diff --git a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/MediaItemRenderer.mxml b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/MediaItemRenderer.mxml index ba812eb8a7e97287b5e929a841875b949f9dece4..bfd7c30705e794f9485d731a97f22d69d85d8da2 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/MediaItemRenderer.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/MediaItemRenderer.mxml @@ -32,7 +32,8 @@ <mx:Script> <![CDATA[ import com.asfusion.mate.events.Dispatcher; - + + import mx.binding.utils.BindingUtils; import mx.controls.Alert; import mx.events.ListEvent; import mx.events.FlexEvent; @@ -58,10 +59,19 @@ [Bindable] private var rolledOver:Boolean = false; + private var muteRolled:Boolean = false; + private function onCreationComplete():void{ muteBtn.enabled = kickUserBtn.enabled = moderator = UserManager.getInstance().getConference().amIModerator(); + if (moderator) { + BindingUtils.bindProperty(muteBtn, "visible", voiceJoinedInd, "visible"); + } else { + BindingUtils.bindProperty(muteImg, "visible", voiceJoinedInd, "visible"); + } this.addEventListener(FlexEvent.DATA_CHANGE, dataChangeHandler); + + BindingUtils.bindSetter(updateMuteBtn, muteInd, "visible"); } private function dataChangeHandler(e:Event):void { @@ -102,6 +112,33 @@ e.mute = !data.voiceMuted; dispatchEvent(e); } + + private function updateMuteBtn(voiceMuted:Boolean = false):void { + if (data != null) { + if (moderator) { + if (data.voiceMuted == muteRolled) + muteBtn.setStyle("icon", images.audio); + else + muteBtn.setStyle("icon", images.audio_muted); + } else { + if (data.voiceMuted == muteRolled) + muteImg.source = images.audio; + else + muteImg.source = images.audio_muted; + } + } + } + + private function mouseOverHandler():void { + muteRolled = true; + updateMuteBtn(); + } + + private function mouseOutHandler():void { + muteRolled = false; + updateMuteBtn(); + } + ]]> </mx:Script> <mx:Image id="showLock" visible="{data.voiceLocked}" source="{images.lock_close}" width="20" height="20" /> @@ -110,12 +147,18 @@ <mx:Button id="webcamBtn" visible="{data.hasStream}" click="viewCamera()" icon="{images.webcam_new}" width="20" height="20" enabled="false" toolTip="{ResourceUtil.getInstance().getString('bbb.users.usersGrid.mediaItemRenderer.webcam')}" /> - <mx:Button id="muteBtn" visible="{data.voiceJoined}" enabled="false" + <mx:Image id="muteImg" visible="false" includeInLayout="false" width="16" height="16" /> + <mx:Button id="muteBtn" visible="false" includeInLayout="false" enabled="false" icon="{images.audio}" width="20" height="20" click="toggleMuteState()" - icon="{data.voiceMuted ? images.audio_muted : images.audio}" + mouseOver="mouseOverHandler()" + mouseOut="mouseOutHandler()" toolTip="{data.voiceMuted ? ResourceUtil.getInstance().getString('bbb.users.usersGrid.mediaItemRenderer.pushToTalk') : ResourceUtil.getInstance().getString('bbb.users.usersGrid.mediaItemRenderer.pushToMute')}" /> <mx:Button id="kickUserBtn" icon="{images.eject_user_new}" width="20" height="20" visible="{rolledOver}" toolTip="{ResourceUtil.getInstance().getString('bbb.users.usersGrid.mediaItemRenderer.kickUser')}" click="kickUser()"/> + + <!-- Helper objects because direct bindings to data break when the itemRenderer is recycled --> + <mx:Image id="muteInd" includeInLayout="false" visible="{data.voiceMuted}" /> + <mx:Image id="voiceJoinedInd" includeInLayout="false" visible="{data.voiceJoined}" /> </mx:HBox> 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 3712062190ac9316e6afb3d7fdb1fe311e6444fc..d6fa22bfeff940c1f1de20408ba931fd7fc4d7c8 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/StatusItemRenderer.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/StatusItemRenderer.mxml @@ -88,24 +88,34 @@ private function updateButton(unneeded:Object = null):void { if (data != null) { if (data.presenter) { - roleBtn.setStyle("icon", images.presenter_new); - roleBtn.toolTip = ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.presenter'); + 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) { 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) { - roleBtn.setStyle("icon", images.moderator); - roleBtn.toolTip = ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.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.raiseHand) { - roleBtn.setStyle("icon", images.hand_new); - roleBtn.toolTip = ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.handRaised'); + roleImg.source = images.hand_new; + roleImg.toolTip = ResourceUtil.getInstance().getString('bbb.users.usersGrid.statusItemRenderer.handRaised'); + roleImg.visible = true; + roleBtn.visible = false; roleBtn.enabled = false; } else { - roleBtn.setStyle("icon", null); - roleBtn.toolTip = ""; + roleImg.source = null; + roleImg.toolTip = ""; + roleImg.visible = true; + roleBtn.visible = false; roleBtn.enabled = false; } } @@ -140,8 +150,11 @@ updateButton(); } ]]> - </mx:Script> - <mx:Button id="roleBtn" enabled="false" width="20" height="20" click="assignPresenterClicked()" /> + </mx:Script> + <mx:Image id="roleImg" visible="true" width="16" height="16" includeInLayout="{roleImg.visible}" /> + <mx:Button id="roleBtn" visible="false" enabled="false" width="20" height="20" click="assignPresenterClicked()" includeInLayout="{roleBtn.visible}" /> + + <!-- Helper objects because direct bindings to data break when the itemRenderer is recycled --> <mx:Image id="presenterInd" includeInLayout="false" visible="{data.presenter}" /> <mx:Image id="moderatorInd" includeInLayout="false" visible="{data.role == Role.MODERATOR}" /> <mx:Image id="raiseHandInd" includeInLayout="false" visible="{data.raiseHand}" /> 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 997e62b1f53f785c8a9c7592a4b3e011ed4cfda7..00aefdc1ad36b9a4b4df7a2fb8aa1507ecde8b4a 100755 --- a/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/UsersWindow.mxml +++ b/bigbluebutton-client/src/org/bigbluebutton/modules/users/views/UsersWindow.mxml @@ -92,6 +92,8 @@ private const MUTE_USER:String = "Mute User"; private const MUTE_ALL_USER:String = "Mute All User"; + private var muteMeRolled:Boolean = false; + private function onCreationComplete():void { dispatcher = new Dispatcher(); @@ -101,6 +103,8 @@ BindingUtils.bindSetter(changeButtons, UserManager.getInstance().getConference(), "amIPresenter"); BindingUtils.bindSetter(updateNumberofUsers, users, "length"); + BindingUtils.bindSetter(updateMuteMeBtn, UserManager.getInstance().getConference(), "voiceMuted"); + this.addEventListener(KeyboardEvent.KEY_DOWN, handleKeyDown); ResourceUtil.getInstance().addEventListener(Event.CHANGE, localeChanged); // Listen for locale changing @@ -179,7 +183,8 @@ myMenuData[2] = {label: ResourceUtil.getInstance().getString('bbb.users.settings.lowerAllHands'), icon: images.hand_new}; if (!roomMuted) { myMenuData[3] = {label: ResourceUtil.getInstance().getString('bbb.users.settings.muteAll'), icon: images.audio_muted}; - myMenuData[4] = {label: ResourceUtil.getInstance().getString('bbb.users.settings.muteAllExcept'), icon: images.audio_muted}; + if (UserManager.getInstance().getConference().getPresenter()) + myMenuData[4] = {label: ResourceUtil.getInstance().getString('bbb.users.settings.muteAllExcept') + ": " + UserManager.getInstance().getConference().getPresenter().name, icon: images.audio_muted}; } else myMenuData[3] = {label: ResourceUtil.getInstance().getString('bbb.users.settings.unmuteAll'), icon: images.audio}; } @@ -378,6 +383,23 @@ usersGrid.drawFocus(true); } + private function updateMuteMeBtn(voiceMuted:Boolean = false):void { + if (UserManager.getInstance().getConference().voiceMuted == muteMeRolled) + muteMeBtn.setStyle("icon", images.audio); + else + muteMeBtn.setStyle("icon", images.audio_muted); + } + + private function mouseOverHandler():void { + muteMeRolled = true; + updateMuteMeBtn(); + } + + private function mouseOutHandler():void { + muteMeRolled = false; + updateMuteMeBtn(); + } + ]]> </mx:Script> @@ -405,8 +427,9 @@ visible="false" includeInLayout="{raiseHandBtn.visible}" tabIndex="{partOptions.baseTabIndex+15}" /> <mx:Spacer width="100%"/> <mx:Button id="muteMeBtn" click="toggleMuteMeState()" height="30" width="30" - icon="{UserManager.getInstance().getConference().voiceMuted ? images.audio_muted : images.audio}" visible="{UserManager.getInstance().getConference().voiceJoined}" + mouseOver="mouseOverHandler()" + mouseOut="mouseOutHandler()" toolTip="{UserManager.getInstance().getConference().voiceMuted ? ResourceUtil.getInstance().getString('bbb.users.pushToTalk.toolTip') : ResourceUtil.getInstance().getString('bbb.users.pushToMute.toolTip')}" tabIndex="{partOptions.baseTabIndex+20}"/> diff --git a/deskshare/app/build.gradle b/deskshare/app/build.gradle index 39a441e89af262ea6d27c0c743439151406a63ac..f6e4c593857f122598aba138d546c51a80d9f09c 100755 --- a/deskshare/app/build.gradle +++ b/deskshare/app/build.gradle @@ -24,7 +24,7 @@ dependencies { providedCompile 'org.springframework:spring-core:3.1.1.RELEASE@jar' // Red5 - providedCompile 'org/red5:red5:1.0r4597@jar' + providedCompile 'org/red5:red5:1.0r4599@jar' // Logging providedCompile 'ch.qos.logback:logback-core:1.0.9@jar' diff --git a/deskshare/build.gradle b/deskshare/build.gradle index 19e5aa160ea6c9bae461d54b759b4df2244def3d..05af7d148b7bc419c33bc5f23469e21005ed5eb6 100755 --- a/deskshare/build.gradle +++ b/deskshare/build.gradle @@ -73,7 +73,7 @@ dependencies { compile 'org.springframework:spring-core:3.1.1.RELEASE@jar' // Red5 - compile 'org/red5:red5:1.0r4597@jar' + compile 'org/red5:red5:1.0r4599@jar' // Logging compile 'ch.qos.logback:logback-core:1.0.9@jar'