Merge branch 'riadvice-2x-client-theme' into bbb-2x-mconf

This commit is contained in:
Richard Alam 2017-09-14 10:41:04 -07:00
commit a81dc2740b
15 changed files with 333 additions and 190 deletions

View File

@ -189,6 +189,10 @@ phonecomponents|MuteMeButton {
icon : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Logout");
}
.logoutButtonStyleRTL {
icon : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Logout_RTL");
}
.settingsButtonStyle {
icon : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Settings");
}
@ -576,6 +580,18 @@ chat|AddChatTabBox {
fillColorDisabled : #F0F2F6;
}
.chatControlBarSendButtonStyleRTL {
icon : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Send_RTL");
disabledIcon : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Send_Disabled_RTL");
cornerRadius : 20;
borderStyle : none;
borderThickness : 0;
fillColorUp : #1070D7;
fillColorOver : #0A5EAC;
fillColorDown : #1070D7;
fillColorDisabled : #F0F2F6;
}
.chatControlBarTextMsgStyle {
borderStyle : solid;
borderThickness : 1;
@ -829,10 +845,14 @@ layout|LoadButton {
icon : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Upload_Template");
}
layout|BroadcastButton {
.broadcastLayoutButtonStyle {
icon : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Send_Layout");
}
.broadcastLayoutButtonStyleRTL {
icon : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Send_Layout_RTL");
}
/*
//------------------------------
// Logout Window
@ -1112,21 +1132,21 @@ mx|Panel {
icon : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Polling");
}
.presentationBackButtonStyle {
.presentationBackButtonStyle, .presentationForwardButtonStyleRTL {
icon : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Arrow_Left");
disabledIcon : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Arrow_Left_Disabled");
}
.presentationBackButtonDisabledStyle {
.presentationBackButtonDisabledStyle, .presentationForwardButtonDisabledStyleRTL {
icon : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Arrow_Left_Disabled");
}
.presentationForwardButtonStyle {
.presentationForwardButtonStyle, .presentationBackButtonStyleRTL {
icon : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Arrow_Right");
disabledIcon : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Arrow_Right_Disabled");
}
.presentationForwardButtonDisabledStyle {
.presentationForwardButtonDisabledStyle, .presentationBackButtonDisabledStyleRTL {
icon : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Arrow_Right_Disabled");
}
@ -1165,6 +1185,8 @@ mx|Panel {
}
.uploadFileButton {
icon : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Go");
disabledIcon : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Go_Disabled");
fillColorUp : #1070D7;
fillColorOver : #0A5EAC;
fillColorDown : #1070D7;
@ -1176,9 +1198,18 @@ mx|Panel {
borderThickness : 0;
}
.uploadFileButton {
icon : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Go");
disabledIcon : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Go_Disabled");
.uploadFileButtonRTL {
icon : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Go_RTL");
disabledIcon : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Go_Disabled_RTL");
fillColorUp : #1070D7;
fillColorOver : #0A5EAC;
fillColorDown : #1070D7;
fillColorDisabled : #F0F2F6;
color : #FFFFFF;
textRollOverColor : #FFFFFF;
textSelectedColor : #FFFFFF;
borderStyle : none;
borderThickness : 0;
}
.presentationNameLabel {
@ -1327,12 +1358,12 @@ sharednotes|SharedNotesRichTextEditor {
icon : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Save");
}
.sharedNotesUndoButtonStyle {
.sharedNotesUndoButtonStyle, .sharedNotesRedoButtonStyleRTL {
icon : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Undo");
disabledIcon : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Undo_Disabled");
}
.sharedNotesRedoButtonStyle {
.sharedNotesRedoButtonStyle, .sharedNotesUndoButtonStyleRTL {
icon : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Redo");
disabledIcon : Embed(source="assets/swf/v2_skin.swf", symbol="Icon_Redo_Disabled");
}

View File

@ -7,7 +7,7 @@
<porttest host="HOST" application="video/portTest" timeout="10000"/>
<bwMon server="HOST" application="video/bwTest"/>
<application uri="rtmp://HOST/bigbluebutton" host="http://HOST/bigbluebutton/api/enter"/>
<language userSelectionEnabled="true" />
<language userSelectionEnabled="true" rtlEnabled="true"/>
<skinning enabled="true" url="http://HOST/client/branding/css/V2Theme.css.swf?v=VERSION" />
<branding logo="logo.swf" copyright="&#169; 2017 &lt;u&gt;&lt;a href=&quot;http://HOST/home.html&quot; target=&quot;_blank&quot;&gt;BigBlueButton Inc.&lt;/a&gt;&lt;/u&gt; (build {0})" background="" toolbarColor="" />
<shortcutKeys showButton="true" />

View File

@ -1,6 +1,6 @@
<?xml version="1.0" ?>
<locales>
<locale code="ar" name="Arabic"/>
<locale code="ar" name="Arabic" direction="rtl"/>
<locale code="az_AZ" name="Azerbaijani"/>
<locale code="eu_EU" name="Basque" />
<locale code="bn_BN" name="Bengali" />
@ -21,7 +21,7 @@
<locale code="ff_SN" name="Fulah"/>
<locale code="de_DE" name="German"/>
<locale code="el_GR" name="Greek"/>
<locale code="he_IL" name="Hebrew"/>
<locale code="he_IL" name="Hebrew" direction="rtl"/>
<locale code="hu_HU" name="Hungarian"/>
<locale code="id_ID" name="Indonesian"/>
<locale code="it_IT" name="Italian"/>

View File

@ -23,6 +23,9 @@ package org.bigbluebutton.main.model.options {
[Bindable]
public var userSelectionEnabled:Boolean = true;
[Bindable]
public var rtlEnabled:Boolean = false;
public function LanguageOptions() {
name = "language";

View File

@ -1,49 +1,49 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
Copyright (c) 2012 BigBlueButton Inc. and by respective authors (see below).
This program is free software; you can redistribute it and/or modify it under the
terms of the GNU Lesser General Public License as published by the Free Software
Foundation; either version 3.0 of the License, or (at your option) any later
version.
BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along
with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
-->
<mx:ComboBox xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:mate="http://mate.asfusion.com/"
dataProvider="{ResourceUtil.getInstance().locales}"
change="changeLanguage()"
labelField="name"
rowCount="15" width="120" height="22">
<fx:Declarations>
<mate:Listener type="{LocaleChangeEvent.LOCALE_CHANGED}" method="localeChanged" />
</fx:Declarations>
<fx:Script>
<![CDATA[
import org.bigbluebutton.util.i18n.ResourceUtil;
import org.bigbluebutton.common.events.LocaleChangeEvent;
private function localeChanged(e:LocaleChangeEvent):void {
selectedIndex = ResourceUtil.getInstance().getCurrentLanguageIndex();
}
private function changeLanguage():void {
ResourceUtil.getInstance().setPreferredLocale(selectedItem.code);
}
]]>
</fx:Script>
</mx:ComboBox>
<?xml version="1.0" encoding="utf-8"?>
<!--
BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
Copyright (c) 2012 BigBlueButton Inc. and by respective authors (see below).
This program is free software; you can redistribute it and/or modify it under the
terms of the GNU Lesser General Public License as published by the Free Software
Foundation; either version 3.0 of the License, or (at your option) any later
version.
BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along
with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
-->
<mx:ComboBox xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:mate="http://mate.asfusion.com/"
dataProvider="{ResourceUtil.getInstance().locales}"
change="changeLanguage()"
labelField="name"
rowCount="15" width="120" height="22">
<fx:Declarations>
<mate:Listener type="{LocaleChangeEvent.LOCALE_CHANGED}" method="localeChanged" />
</fx:Declarations>
<fx:Script>
<![CDATA[
import org.bigbluebutton.common.events.LocaleChangeEvent;
import org.bigbluebutton.util.i18n.ResourceUtil;
private function localeChanged(e:LocaleChangeEvent):void {
selectedIndex = ResourceUtil.getInstance().getCurrentLanguageIndex();
}
private function changeLanguage():void {
ResourceUtil.getInstance().setPreferredLocale(selectedItem);
}
]]>
</fx:Script>
</mx:ComboBox>

View File

@ -73,6 +73,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
<mate:Listener type="{InvalidAuthTokenEvent.INVALID_AUTH_TOKEN}" method="handleInvalidAuthToken" />
<mate:Listener type="{SwitchedLayoutEvent.SWITCHED_LAYOUT_EVENT}" method="onLayoutChanged" />
<mate:Listener type="{LocaleChangeEvent.LOCALE_CHANGED}" method="onLocaleChanged" />
<mate:Listener type="{NetworkStatsEvent.OPEN_NETSTATS_WIN}" method="openNetworkStatsWindow" />
<mate:Listener type="{BBBEvent.RETRIEVE_GUEST_POLICY}" method="setGuestPolicy"/>
@ -112,6 +113,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
import org.bigbluebutton.common.IBbbModuleWindow;
import org.bigbluebutton.common.events.AddUIComponentToMainCanvas;
import org.bigbluebutton.common.events.CloseWindowEvent;
import org.bigbluebutton.common.events.LocaleChangeEvent;
import org.bigbluebutton.common.events.OpenWindowEvent;
import org.bigbluebutton.common.events.ToolbarButtonEvent;
import org.bigbluebutton.core.BBB;
@ -886,6 +888,12 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
controlBar.styleName = "darkControlBarStyle";
}
}
private function onLocaleChanged(e:LocaleChangeEvent) : void {
if (ResourceUtil.getInstance().isRTLEnabled()) {
FlexGlobals.topLevelApplication.setStyle("layoutDirection", ResourceUtil.getInstance().getCurrentLanguageDirection());
}
}
]]>
</fx:Script>

View File

@ -37,6 +37,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
<mate:Listener type="{ConnectionFailedEvent.CONNECTION_CLOSED}" method="hideToolbar" />
<mate:Listener type="{ConfigLoadedEvent.CONFIG_LOADED_EVENT}" method="handleConfigLoadedEvent" />
<mate:Listener type="{SettingsEvent.SETTINGS_MODULE_LOADED}" method="showSettingsButton" />
<mate:Listener type="{LocaleChangeEvent.LOCALE_CHANGED}" method="localeChanged" />
<mate:Listener type="{ShortcutEvent.REMOTE_OPEN_SHORTCUT_WIN}" method="remoteShortcutClick" />
<mate:Listener type="{ShortcutEvent.LOGOUT}" method="remoteLogout" />
<mate:Listener type="{ShortcutEvent.FOCUS_SHORTCUT_BUTTON}" method="focusShortcutButton" />
@ -53,45 +54,48 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
</fx:Declarations>
<fx:Script>
<![CDATA[
import com.asfusion.mate.events.Dispatcher;
import mx.binding.utils.BindingUtils;
import mx.controls.Alert;
import mx.core.FlexGlobals;
import mx.core.IToolTip;
import mx.core.UIComponent;
import mx.events.CloseEvent;
import mx.events.ToolTipEvent;
import mx.managers.PopUpManager;
import org.as3commons.lang.StringUtils;
import org.as3commons.logging.api.ILogger;
import org.as3commons.logging.api.getClassLogger;
import org.bigbluebutton.common.events.SettingsComponentEvent;
import org.bigbluebutton.common.events.ToolbarButtonEvent;
import org.bigbluebutton.core.BBB;
import org.bigbluebutton.core.Options;
import org.bigbluebutton.core.TimerUtil;
import org.bigbluebutton.core.UsersUtil;
import org.bigbluebutton.core.events.MeetingTimeRemainingEvent;
import org.bigbluebutton.core.model.Config;
import org.bigbluebutton.core.model.LiveMeeting;
import org.bigbluebutton.main.events.BBBEvent;
import org.bigbluebutton.main.events.ConfigLoadedEvent;
import org.bigbluebutton.main.events.LogoutEvent;
import org.bigbluebutton.main.events.NetworkStatsEvent;
import org.bigbluebutton.main.events.SettingsEvent;
import org.bigbluebutton.main.events.ShortcutEvent;
import org.bigbluebutton.main.events.SuccessfulLoginEvent;
import org.bigbluebutton.main.model.NetworkStatsData;
import org.bigbluebutton.main.model.options.BrandingOptions;
import org.bigbluebutton.main.model.options.LayoutOptions;
import org.bigbluebutton.main.model.options.ShortcutKeysOptions;
import org.bigbluebutton.main.model.users.events.ChangeMyRole;
import org.bigbluebutton.main.model.users.events.ConferenceCreatedEvent;
import org.bigbluebutton.main.model.users.events.ConnectionFailedEvent;
import org.bigbluebutton.modules.users.model.UsersOptions;
import org.bigbluebutton.util.i18n.ResourceUtil;
import com.asfusion.mate.events.Dispatcher;
import mx.binding.utils.BindingUtils;
import mx.controls.Alert;
import mx.core.FlexGlobals;
import mx.core.IToolTip;
import mx.core.UIComponent;
import mx.events.CloseEvent;
import mx.events.ToolTipEvent;
import mx.managers.PopUpManager;
import flashx.textLayout.formats.Direction;
import org.as3commons.lang.StringUtils;
import org.as3commons.logging.api.ILogger;
import org.as3commons.logging.api.getClassLogger;
import org.bigbluebutton.common.events.LocaleChangeEvent;
import org.bigbluebutton.common.events.SettingsComponentEvent;
import org.bigbluebutton.common.events.ToolbarButtonEvent;
import org.bigbluebutton.core.BBB;
import org.bigbluebutton.core.Options;
import org.bigbluebutton.core.TimerUtil;
import org.bigbluebutton.core.UsersUtil;
import org.bigbluebutton.core.events.MeetingTimeRemainingEvent;
import org.bigbluebutton.core.model.Config;
import org.bigbluebutton.core.model.LiveMeeting;
import org.bigbluebutton.main.events.BBBEvent;
import org.bigbluebutton.main.events.ConfigLoadedEvent;
import org.bigbluebutton.main.events.LogoutEvent;
import org.bigbluebutton.main.events.NetworkStatsEvent;
import org.bigbluebutton.main.events.SettingsEvent;
import org.bigbluebutton.main.events.ShortcutEvent;
import org.bigbluebutton.main.events.SuccessfulLoginEvent;
import org.bigbluebutton.main.model.NetworkStatsData;
import org.bigbluebutton.main.model.options.BrandingOptions;
import org.bigbluebutton.main.model.options.LayoutOptions;
import org.bigbluebutton.main.model.options.ShortcutKeysOptions;
import org.bigbluebutton.main.model.users.events.ChangeMyRole;
import org.bigbluebutton.main.model.users.events.ConferenceCreatedEvent;
import org.bigbluebutton.main.model.users.events.ConnectionFailedEvent;
import org.bigbluebutton.modules.users.model.UsersOptions;
import org.bigbluebutton.util.i18n.ResourceUtil;
private static const LOGGER:ILogger = getClassLogger(MainToolbar);
@ -408,6 +412,15 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
this.addChild(b);
}
private function localeChanged(event:LocaleChangeEvent) : void {
var styleNameExt : String = "";
if (ResourceUtil.getInstance().isRTLEnabled() && ResourceUtil.getInstance().getCurrentLanguageDirection() == Direction.RTL) {
styleNameExt = "RTL";
}
btnLogout.styleName = "logoutButtonStyle" + styleNameExt;
}
private function openSettings(e:Event = null):void{
var d:Dispatcher = new Dispatcher();
d.dispatchEvent(new SettingsEvent(SettingsEvent.OPEN_SETTINGS_PANEL));
@ -567,7 +580,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
styleName="helpLinkButtonStyle"
toolTip="{ResourceUtil.getInstance().getString('bbb.mainToolbar.helpBtn')}"
accessibilityName="{ResourceUtil.getInstance().getString('bbb.micSettings.access.helpButton')}"/>
<mx:Button label="" id="btnLogout" styleName="logoutButtonStyle"
<mx:Button id="btnLogout" styleName="logoutButtonStyle"
toolTip="{ResourceUtil.getInstance().getString('bbb.mainToolbar.logoutBtn.toolTip')}" right="10" click="confirmLogout()" height="30"/>
</mx:HBox>
</mx:HBox>

View File

@ -48,38 +48,40 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
<fx:Script>
<![CDATA[
import com.asfusion.mate.events.Dispatcher;
import flash.events.TextEvent;
import mx.binding.utils.BindingUtils;
import org.as3commons.lang.StringUtils;
import org.as3commons.logging.api.ILogger;
import org.as3commons.logging.api.getClassLogger;
import org.bigbluebutton.core.Options;
import org.bigbluebutton.core.UsersUtil;
import org.bigbluebutton.core.events.LockControlEvent;
import org.bigbluebutton.core.model.LiveMeeting;
import org.bigbluebutton.main.events.BBBEvent;
import org.bigbluebutton.main.events.ShortcutEvent;
import org.bigbluebutton.main.events.UserJoinedEvent;
import org.bigbluebutton.main.events.UserLeftEvent;
import org.bigbluebutton.main.model.users.events.ChangeMyRole;
import org.bigbluebutton.modules.chat.ChatUtil;
import org.bigbluebutton.modules.chat.events.ChatEvent;
import org.bigbluebutton.modules.chat.events.ChatHistoryEvent;
import org.bigbluebutton.modules.chat.events.ChatOptionsEvent;
import org.bigbluebutton.modules.chat.events.ClearPublicChatEvent;
import org.bigbluebutton.modules.chat.events.PrivateChatMessageEvent;
import org.bigbluebutton.modules.chat.events.PublicChatMessageEvent;
import org.bigbluebutton.modules.chat.events.SendPrivateChatMessageEvent;
import org.bigbluebutton.modules.chat.events.SendPublicChatMessageEvent;
import org.bigbluebutton.modules.chat.model.ChatConversation;
import org.bigbluebutton.modules.chat.model.ChatOptions;
import org.bigbluebutton.modules.chat.vo.ChatMessageVO;
import org.bigbluebutton.modules.polling.events.StartCustomPollEvent;
import org.bigbluebutton.util.i18n.ResourceUtil;
import com.asfusion.mate.events.Dispatcher;
import flash.events.TextEvent;
import mx.binding.utils.BindingUtils;
import flashx.textLayout.formats.Direction;
import org.as3commons.lang.StringUtils;
import org.as3commons.logging.api.ILogger;
import org.as3commons.logging.api.getClassLogger;
import org.bigbluebutton.core.Options;
import org.bigbluebutton.core.UsersUtil;
import org.bigbluebutton.core.events.LockControlEvent;
import org.bigbluebutton.core.model.LiveMeeting;
import org.bigbluebutton.main.events.BBBEvent;
import org.bigbluebutton.main.events.ShortcutEvent;
import org.bigbluebutton.main.events.UserJoinedEvent;
import org.bigbluebutton.main.events.UserLeftEvent;
import org.bigbluebutton.main.model.users.events.ChangeMyRole;
import org.bigbluebutton.modules.chat.ChatUtil;
import org.bigbluebutton.modules.chat.events.ChatEvent;
import org.bigbluebutton.modules.chat.events.ChatHistoryEvent;
import org.bigbluebutton.modules.chat.events.ChatOptionsEvent;
import org.bigbluebutton.modules.chat.events.ClearPublicChatEvent;
import org.bigbluebutton.modules.chat.events.PrivateChatMessageEvent;
import org.bigbluebutton.modules.chat.events.PublicChatMessageEvent;
import org.bigbluebutton.modules.chat.events.SendPrivateChatMessageEvent;
import org.bigbluebutton.modules.chat.events.SendPublicChatMessageEvent;
import org.bigbluebutton.modules.chat.model.ChatConversation;
import org.bigbluebutton.modules.chat.model.ChatOptions;
import org.bigbluebutton.modules.chat.vo.ChatMessageVO;
import org.bigbluebutton.modules.polling.events.StartCustomPollEvent;
import org.bigbluebutton.util.i18n.ResourceUtil;
private static const LOGGER:ILogger = getClassLogger(ChatBox);
@ -428,7 +430,18 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
var modifier:String = ExternalInterface.call("determineModifier");
addContextMenuItems();
updateStyles();
}
private function updateStyles():void {
var styleNameExt : String = "";
if (ResourceUtil.getInstance().isRTLEnabled() && ResourceUtil.getInstance().getCurrentLanguageDirection() == Direction.RTL) {
styleNameExt = "RTL";
}
sendBtn.styleName = "chatControlBarSendButtonStyle" + styleNameExt;
}
private function sendStartCustomPollEvent(answers:Array):void {
var dispatcher:Dispatcher = new Dispatcher();

View File

@ -26,14 +26,21 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
toolTip="{ResourceUtil.getInstance().getString('bbb.layout.broadcastButton.toolTip')}"
styleName="broadcastLayoutButtonStyle"
click="onClick(event)">
<fx:Declarations>
<mate:Listener type="{LocaleChangeEvent.LOCALE_CHANGED}" method="localeChanged" />
</fx:Declarations>
<fx:Script>
<![CDATA[
import com.asfusion.mate.events.Dispatcher;
import org.bigbluebutton.core.UsersUtil;
import org.bigbluebutton.modules.layout.events.LayoutEvent;
import org.bigbluebutton.util.i18n.ResourceUtil;
import com.asfusion.mate.events.Dispatcher;
import flashx.textLayout.formats.Direction;
import org.bigbluebutton.common.events.LocaleChangeEvent;
import org.bigbluebutton.core.UsersUtil;
import org.bigbluebutton.modules.layout.events.LayoutEvent;
import org.bigbluebutton.util.i18n.ResourceUtil;
private var _dispatcher:Dispatcher = new Dispatcher();
@ -48,6 +55,15 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
public function refreshRole(amIModerator:Boolean):void {
this.visible = this.includeInLayout = this.enabled = amIModerator;
}
private function localeChanged(event:LocaleChangeEvent) : void {
var styleNameExt : String = "";
if (ResourceUtil.getInstance().isRTLEnabled() && ResourceUtil.getInstance().getCurrentLanguageDirection() == Direction.RTL) {
styleNameExt = "RTL";
}
this.styleName = "broadcastLayoutButtonStyle" + styleNameExt;
}
]]>
</fx:Script>
</views:LayoutButton>

View File

@ -23,13 +23,15 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
<mx:TitleWindow xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:mate="http://mate.asfusion.com/"
xmlns:common="org.bigbluebutton.common.*"
xmlns:s="library://ns.adobe.com/flex/spark"
width="580"
verticalScrollPolicy="off"
horizontalScrollPolicy="off"
layout="absolute"
close="onCancelClicked()"
initialize="initData()"
creationComplete="onCreationComplete(event)" xmlns:common="org.bigbluebutton.common.*" xmlns:s="library://ns.adobe.com/flex/spark">
creationComplete="onCreationComplete(event)">
<fx:Declarations>
<mate:Dispatcher id="globalDispatch" />
@ -60,6 +62,8 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
import mx.events.ListEvent;
import mx.utils.StringUtil;
import flashx.textLayout.formats.Direction;
import org.as3commons.lang.StringUtils;
import org.as3commons.logging.api.ILogger;
import org.as3commons.logging.api.getClassLogger;
@ -112,6 +116,16 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
protected function onCreationComplete(event:FlexEvent):void
{
dispatcher = new Dispatcher();
updateStyles();
}
private function updateStyles() : void {
var styleNameExt : String = "";
if (ResourceUtil.getInstance().isRTLEnabled() && ResourceUtil.getInstance().getCurrentLanguageDirection() == Direction.RTL) {
styleNameExt = "RTL";
}
uploadBtn.styleName = "uploadFileButton" + styleNameExt;
}
private function initData():void {

View File

@ -71,6 +71,8 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
import mx.controls.Menu;
import mx.events.MenuEvent;
import flashx.textLayout.formats.Direction;
import flexlib.mdi.events.MDIWindowEvent;
import org.as3commons.logging.api.ILogger;
@ -391,29 +393,34 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
shareEvent.presentationName = presentationName;
dispatchEvent(shareEvent);
}
private function disableSlideNavigationButtons(pageNumber:int):void {
var styleNameExt : String = "";
if (ResourceUtil.getInstance().isRTLEnabled() && ResourceUtil.getInstance().getCurrentLanguageDirection() == Direction.RTL) {
styleNameExt = "RTL";
}
// We use mouseEnabled here instead of enabled because the tab position gets lost when going through
//the pages. Please don't change this if you don't know why this is.
if (pageNumber != 1) {
backButton.mouseEnabled = true;
backButton.styleName = "presentationBackButtonStyle";
backButton.styleName = "presentationBackButtonStyle" + styleNameExt;
} else {
backButton.mouseEnabled = false;
backButton.styleName = "presentationBackButtonDisabledStyle";
backButton.styleName = "presentationBackButtonDisabledStyle" + styleNameExt;
}
if (pageNumber < PresentationModel.getInstance().getNumberOfPages()) {
forwardButton.mouseEnabled = true;
forwardButton.styleName = "presentationForwardButtonStyle";
forwardButton.styleName = "presentationForwardButtonStyle" + styleNameExt;
} else {
forwardButton.mouseEnabled = false;
forwardButton.styleName = "presentationForwardButtonDisabledStyle";
forwardButton.styleName = "presentationForwardButtonDisabledStyle" + styleNameExt;
}
}
private function displaySlideNumber(currentSlide:int):void {
disableSlideNavigationButtons(currentSlide);
disableSlideNavigationButtons(currentSlide);
btnSlideNum.label = "" + currentSlide + '/' + PresentationModel.getInstance().getNumberOfPages();
btnSlideNum.accessibilityName = ResourceUtil.getInstance().getString('bbb.presentation.btnSlideNum.accessibilityName', [currentSlide, PresentationModel.getInstance().getNumberOfPages()])
}
@ -490,6 +497,8 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
addContextMenuItems();
setPollMenuData();
updateStyles();
}
private function localeChanged(e:Event):void{
@ -564,20 +573,20 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
private function onUploadButtonClicked():void {
openUploadWindow();
}
private function openUploadWindow():void {
if (presentOptions.openExternalFileUploadDialog) {
var fileEvent:UploadEvent = new UploadEvent(UploadEvent.OPEN_EXTERNAL_UPLOAD_WINDOW);
fileEvent.maxFileSize = presentOptions.maxFileSize;
var gDispatcher:Dispatcher = new Dispatcher();
gDispatcher.dispatchEvent(fileEvent);
} else {
var event:UploadEvent = new UploadEvent(UploadEvent.OPEN_UPLOAD_WINDOW);
event.maxFileSize = presentOptions.maxFileSize;
dispatchEvent(event);
}
if (presentOptions.openExternalFileUploadDialog) {
var fileEvent:UploadEvent = new UploadEvent(UploadEvent.OPEN_EXTERNAL_UPLOAD_WINDOW);
fileEvent.maxFileSize = presentOptions.maxFileSize;
var gDispatcher:Dispatcher = new Dispatcher();
gDispatcher.dispatchEvent(fileEvent);
} else {
var event:UploadEvent = new UploadEvent(UploadEvent.OPEN_UPLOAD_WINDOW);
event.maxFileSize = presentOptions.maxFileSize;
dispatchEvent(event);
}
}
private function quickPollClicked(e:MouseEvent):void {
sendStartPollEvent(Button(e.target).name);
}
@ -594,7 +603,13 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
}
pollMenuData.push({label: resourceUtil.getString("bbb.polling.customPollOption.label")});
}
private function updateStyles():void {
if (PresentationModel.getInstance().getCurrentPage()) {
disableSlideNavigationButtons(PresentationModel.getInstance().getCurrentPage().num);
}
}
private function onPollStartButtonClicked():void {
openPollTypeMenu();
}
@ -836,7 +851,6 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
styleName="presentationDownloadButtonStyle"
toolTip="{ResourceUtil.getInstance().getString('bbb.presentation.downloadPresBtn.toolTip')}"
click="onDownloadButtonClicked()" creationComplete="updateDownloadBtn()"/>
</mx:HBox>
<mx:HBox id="presenterControls" width="30%" height="100%" paddingTop="0" visible="false" includeInLayout="false" horizontalAlign="center" verticalAlign="middle">

View File

@ -35,6 +35,7 @@
<mate:Listener type="{SharedNotesEvent.CREATE_ADDITIONAL_NOTES_REPLY_EVENT}" method="handleNoteCreated"/>
<mate:Listener type="{SharedNotesEvent.DESTROY_ADDITIONAL_NOTES_REPLY_EVENT}" method="handleNoteDestroyed"/>
<mate:Listener type="{ShortcutEvent.FOCUS_SHARED_NOTES_WINDOW}" method="focusWindow" />
<mate:Listener type="{LocaleChangeEvent.LOCALE_CHANGED}" method="onLocaleChanged" />
</fx:Declarations>
<fx:Script>
@ -51,16 +52,19 @@
import mx.core.FlexGlobals;
import mx.core.IFlexDisplayObject;
import mx.events.CloseEvent;
import mx.events.MenuEvent;
import mx.events.FlexEvent;
import mx.events.MenuEvent;
import mx.managers.PopUpManager;
import flashx.textLayout.formats.Direction;
import flexlib.mdi.events.MDIWindowEvent;
import org.as3commons.logging.api.ILogger;
import org.as3commons.logging.api.getClassLogger;
import org.bigbluebutton.common.IBbbModuleWindow;
import org.bigbluebutton.common.Role;
import org.bigbluebutton.common.events.LocaleChangeEvent;
import org.bigbluebutton.core.Options;
import org.bigbluebutton.core.UsersUtil;
import org.bigbluebutton.core.model.LiveMeeting;
@ -554,6 +558,16 @@
focusManager.setFocus(titleBarOverlay);
}
}
private function onLocaleChanged(event:LocaleChangeEvent):void {
var styleNameExt : String = "";
if (ResourceUtil.getInstance().isRTLEnabled() && ResourceUtil.getInstance().getCurrentLanguageDirection() == Direction.RTL) {
styleNameExt = "RTL";
}
btnRedo.styleName = "sharedNotesRedoButtonStyle" + styleNameExt;
btnUndo.styleName = "sharedNotesUndoButtonStyle" + styleNameExt;
}
]]>
</fx:Script>

View File

@ -39,8 +39,10 @@ package org.bigbluebutton.util.i18n
import org.as3commons.logging.api.ILogger;
import org.as3commons.logging.api.getClassLogger;
import org.bigbluebutton.common.events.LocaleChangeEvent;
import org.bigbluebutton.core.Options;
import org.bigbluebutton.core.UsersUtil;
import org.bigbluebutton.main.events.AppVersionEvent;
import org.bigbluebutton.main.model.options.LanguageOptions;
public class ResourceUtil extends EventDispatcher {
private static const LOGGER:ILogger = getClassLogger(ResourceUtil);
@ -60,6 +62,7 @@ package org.bigbluebutton.util.i18n
//private var eventDispatcher:IEventDispatcher;
private var resourceManager:IResourceManager;
private var preferredLocale:String
private var preferredDirection:String
private var masterLocaleLoaded:Boolean = false;
private var masterLocaleLoadedCallback:Function = null;
@ -87,22 +90,23 @@ package org.bigbluebutton.util.i18n
_urlLoader.load(new URLRequest(localeReqURL));
}
private function buildRequestURL():String {
var swfURL:String = FlexGlobals.topLevelApplication.url;
var protocol:String = URLUtil.getProtocol(swfURL);
var serverName:String = URLUtil.getServerNameWithPort(swfURL);
return protocol + "://" + serverName + "/";
}
private function buildRequestURL():String {
var swfURL:String = FlexGlobals.topLevelApplication.url;
var protocol:String = URLUtil.getProtocol(swfURL);
var serverName:String = URLUtil.getServerNameWithPort(swfURL);
return protocol + "://" + serverName + "/";
}
private function handleComplete(e:Event):void{
parse(new XML(e.target.data));
preferredLocale = getDefaultLocale();
if (preferredLocale != MASTER_LOCALE) {
trace("Preferred locale=" + preferredLocale + " is not the same as master locale=" + MASTER_LOCALE);
trace("Preferred locale=" + preferredLocale + " is not the same as master locale=" + MASTER_LOCALE);
loadMasterLocale(MASTER_LOCALE);
}
setPreferredLocale(preferredLocale);
// To improve
setPreferredLocale({code:preferredLocale, direction:"ltr"});
}
private function parse(xml:XML):void{
@ -111,13 +115,15 @@ package org.bigbluebutton.util.i18n
locales.push({
code: DEFAULT_LOCALE_IDENTIFIER,
name: ""
name: "",
direction: "ltr"
});
for each(locale in list){
locales.push({
code: locale.@code.toString(),
name: locale.@name.toString()
name: locale.@name.toString(),
direction: locale.@direction.valueOf().toString().toLowerCase() == "rtl" ? "rtl" : "ltr"
});
}
}
@ -142,17 +148,19 @@ package org.bigbluebutton.util.i18n
return -1;
}
public function setPreferredLocale(locale:String):void {
if (locale == DEFAULT_LOCALE_IDENTIFIER) {
locale = getDefaultLocale();
public function setPreferredLocale(locale:Object):void {
var localeCode : String = locale.code;
if (localeCode == DEFAULT_LOCALE_IDENTIFIER) {
localeCode = getDefaultLocale();
}
if (isPreferredLocaleAvailable(locale)) {
preferredLocale = locale;
if (isPreferredLocaleAvailable(localeCode)) {
preferredLocale = localeCode;
}else{
preferredLocale = MASTER_LOCALE;
}
preferredDirection = locale.direction;
changeLocale(preferredLocale);
}
@ -204,7 +212,7 @@ package org.bigbluebutton.util.i18n
var date:Date = new Date();
var localeURI:String = buildRequestURL() + 'client/locale/' + language + '_resources.swf?a=' + date.time;
trace("Loading locale " + localeURI);
trace("Loading locale " + localeURI);
return resourceManager.loadResourceModule( localeURI, false);
}
@ -216,7 +224,7 @@ package org.bigbluebutton.util.i18n
}
private function changeLocaleHelper(locale:String):void {
var eventDispatcher:IEventDispatcher = loadResource(locale);
var eventDispatcher:IEventDispatcher = loadResource(locale);
eventDispatcher.addEventListener(ResourceEvent.COMPLETE, localeChangeComplete);
eventDispatcher.addEventListener(ResourceEvent.ERROR, handleResourceNotLoaded);
}
@ -226,7 +234,7 @@ package org.bigbluebutton.util.i18n
trace("Loading immediately " + locale);
changeLocaleHelper(locale);
} else {
trace("Registering callback to load " + locale + " later");
trace("Registering callback to load " + locale + " later");
masterLocaleLoadedCallback = function():void {
changeLocaleHelper(locale);
}
@ -253,27 +261,27 @@ package org.bigbluebutton.util.i18n
}
private function sendAppAndLocaleVersions():void {
trace("Sending locale version");
trace("Sending locale version");
var dispatcher:Dispatcher = new Dispatcher();
var versionEvent:AppVersionEvent = new AppVersionEvent();
versionEvent.configLocaleVersion = false;
dispatcher.dispatchEvent(versionEvent);
}
}
/**
* Defaults to DEFAULT_LANGUAGE when an error is thrown by the ResourceManager
* Defaults to DEFAULT_LANGUAGE when an error is thrown by the ResourceManager
* @param event
*/
private function handleResourceNotLoaded(event:ResourceEvent):void{
trace("Resource locale [" + preferredLocale + "] could not be loaded.");
resourceManager.localeChain = [MASTER_LOCALE];
preferredLocale = MASTER_LOCALE;
update();
*/
private function handleResourceNotLoaded(event:ResourceEvent):void {
trace("Resource locale [" + preferredLocale + "] could not be loaded.");
resourceManager.localeChain = [MASTER_LOCALE];
preferredLocale = MASTER_LOCALE;
update();
}
public function update():void{
reloadLocaleNames();
sendAppAndLocaleVersions();
sendAppAndLocaleVersions();
var dispatcher:Dispatcher = new Dispatcher;
dispatcher.dispatchEvent(new LocaleChangeEvent(LocaleChangeEvent.LOCALE_CHANGED));
dispatchEvent(new Event(Event.CHANGE));
@ -303,6 +311,10 @@ package org.bigbluebutton.util.i18n
public function getCurrentLanguageCode():String{
return preferredLocale;
}
public function getCurrentLanguageDirection():String{
return preferredDirection;
}
public function getCurrentLanguage():Object {
return locales[getCurrentLanguageIndex()];
@ -311,6 +323,11 @@ package org.bigbluebutton.util.i18n
public function getCurrentLanguageIndex():int {
return getIndexForLocale(preferredLocale);
}
public function isRTLEnabled() : Boolean {
var languageOptions : LanguageOptions = Options.getOptions(LanguageOptions) as LanguageOptions;
return languageOptions.rtlEnabled;
}
}
}