This commit is contained in:
Markos Calderon 2013-01-10 17:24:00 -05:00
commit 3aacbd2de2
249 changed files with 7252 additions and 2288 deletions

View File

@ -0,0 +1,33 @@
package org.bigbluebutton.conference;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.red5.server.api.Red5;
public class BigBlueButtonService {
private ConnectionInvokerService connInvokerService;
public void sendMessage(HashMap<String, Object> params) {
Map<String, Object> messageToSend = new HashMap<String, Object>();
for (Iterator<String> it = params.keySet().iterator(); it.hasNext();) {
String key = it.next();
messageToSend.put(key, params.get(key));
}
ClientMessage m = new ClientMessage(ClientMessage.BROADCAST, getMeetingId(), (String) params.get("messageID"), messageToSend);
connInvokerService.sendMessage(m);
}
private String getMeetingId(){
return Red5.getConnectionLocal().getScope().getName();
}
public void setConnInvokerService(ConnectionInvokerService connInvokerService) {
this.connInvokerService = connInvokerService;
}
}

View File

@ -58,10 +58,12 @@ public class FreeswitchApplication extends Observable implements ConferenceServi
private FreeswitchHeartbeatMonitor heartbeatMonitor;
private boolean debug = false;
private String icecastProtocol = "shout";
private String icecastHost = "localhost";
private int icecastPort = 8000;
private String icecastUsername = "source";
private String icecastPassword = "hackme";
private String icecastStreamExtension = ".mp3";
private Boolean icecastBroadcast = false;
private final Integer USER = 0; /* not used for now */
@ -180,8 +182,8 @@ public class FreeswitchApplication extends Observable implements ConferenceServi
}
private void broadcastToIcecast(String room, String meetingid) {
String shoutPath = "shout://" + icecastUsername + ":" + icecastPassword + "@" + icecastHost + ":" + icecastPort
+ File.separatorChar + meetingid + ".mp3";
String shoutPath = icecastProtocol + "://" + icecastUsername + ":" + icecastPassword + "@" + icecastHost + ":" + icecastPort
+ File.separatorChar + meetingid + "." + icecastStreamExtension;
if (log.isDebugEnabled())
log.debug("Broadcast to {}", shoutPath);
@ -364,7 +366,11 @@ public class FreeswitchApplication extends Observable implements ConferenceServi
public void setDebugNullConferenceAction(boolean enabled) {
this.debug = enabled;
}
public void setIcecastProtocol(String protocol) {
icecastProtocol = protocol;
}
public void setIcecastHost(String host) {
icecastHost = host;
}
@ -384,6 +390,10 @@ public class FreeswitchApplication extends Observable implements ConferenceServi
public void setIcecastBroadcast(Boolean broadcast) {
icecastBroadcast = broadcast;
}
public void setIcecastStreamExtension(String ext) {
icecastStreamExtension = ext;
}
private Integer getMemberIdFromEvent(EslEvent e)
{

View File

@ -12,7 +12,11 @@
<property name="messagingService" ref="messagingService"></property>
<property name="conversionUpdatesMessageListener" ref="conversionUpdatesMessageListener"></property>
</bean>
<bean id="bigbluebutton.service" class="org.bigbluebutton.conference.BigBlueButtonService">
<property name="connInvokerService"> <ref bean="connInvokerService"/></property>
</bean>
<bean id="participantsHandler" class="org.bigbluebutton.conference.service.participants.ParticipantsHandler">
<property name="participantsApplication"> <ref local="participantsApplication"/></property>
<property name="recorderApplication"> <ref local="recorderApplication"/></property>

View File

@ -14,6 +14,7 @@
<beans:bean id="freeswitchApplication" class="org.bigbluebutton.webconference.voice.freeswitch.FreeswitchApplication">
<beans:property name="managerConnection" ref="eslConnection"/>
<beans:property name="DebugNullConferenceAction" value="true"/>
<beans:property name="icecastProtocol" value="${icecast.protocol}"/>
<beans:property name="icecastHost" value="${icecast.host}"/>
<beans:property name="icecastPort" value="${icecast.port}"/>
<beans:property name="icecastUsername" value="${icecast.username}"/>

View File

@ -31,6 +31,8 @@ version=0.63
redis.host=127.0.0.1
redis.port=6379
icecast.protocol=shout
icecast.streamExt=mp3
icecast.host=127.0.0.1
icecast.port=8000
icecast.username=source

View File

@ -0,0 +1,3 @@
This is the directory where you should put your custom skinning/styling.

View File

@ -0,0 +1 @@
This is the default BigBlueButton style.

View File

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- BigBlueButton Branding build.xml for use by Hudson builds. -->
<project name="BigBlueButton Branding" basedir="../.." default="branding" >
<property environment="env" />
<property name="DEBUG" value="true" />
<property name="BUILD_ENV" value="DEV" />
<property name="FLEX_HOME" value="${env.FLEX_HOME}" />
<property name="themeFile" value="BBBDefault.css" />
<property name="BASE_DIR" value="${basedir}" />
<property name="SRC_DIR" value="${BASE_DIR}/src" />
<property name="OUTPUT_DIR" value="${BASE_DIR}/bin" />
<taskdef resource="flexTasks.tasks" classpath="${FLEX_HOME}/ant/lib/flexTasks.jar" />
<target name="init-ant-contrib">
<property name="ant-contrib.jar" location="${BASE_DIR}/build/lib/ant-contrib-0.6.jar"/>
<taskdef resource="net/sf/antcontrib/antcontrib.properties" classpath="${ant-contrib.jar}"/>
</target>
<target name="branding" depends="init-ant-contrib">
<sequential>
<mxmlc file="${BASE_DIR}/branding/default/style/css/${themeFile}"
output="${OUTPUT_DIR}/branding/css/${themeFile}.swf"
debug="${DEBUG}"
mxml.compatibility-version="3.0.0"
swf-version="13"
optimize="true">
</mxmlc>
</sequential>
</target>
</project>

View File

@ -0,0 +1,504 @@
Application {
backgroundColor: #ffffff;
}
ApplicationControlBar {
highlightAlphas: 0.1, 0;
fillAlphas: 0, 0;
fillColors: #32343b, #32343b;
backgroundColor: #42444c;
backgroundAlpha: 1;
cornerRadius: 0;
dropShadowEnabled: true;
shadowDistance: 1;
shadowDirection: center;
dropShadowColor: #000000;
}
Panel {
borderColor: #dfdfdf;
borderAlpha: 1;
shadowDistance: 1;
dropShadowColor: #666666;
titleStyleName: "mypanelTitle";
}
.mypanelTitle {
color: #444444;
fontFamily: Arial;
fontSize: 12;
}
.whiteboardToolbarStyle {
backgroundColor: #CCCCCC;
cornerRadius: 5;
borderStyle: solid;
borderThickness: 1;
paddingBottom: 3;
paddingTop: 3;
paddingLeft: 3;
paddingRight: 3;
}
Button {
textIndent: 0;
paddingLeft: 1;
paddingRight: 1;
paddingTop: 1;
paddingBottom: 1;
highlightAlphas: 0.4, 0;
fillAlphas: 1, 1, 1, 1;
fillColors: #fefeff, #e1e2e5, #ffffff, #eeeeee;
color: #5e5f63;
textRollOverColor: #5e5f63;
textSelectedColor: #5e5f63;
borderColor: #b9babc;
themeColor: haloBlue;
fontFamily: Arial;
fontSize: 12;
}
.chatSendButtonStyle {
cornerRadius: 0;
highlightAlphas: 0, 0;
fillAlphas: 1, 1, 1, 1;
fillColors: #262626, #262626, #454545, #454545;
color: #ffffff;
textRollOverColor: #ffffff;
textSelectedColor: #262626;
borderColor: #000000;
themeColor: haloBlue;
fontFamily: Arial;
fontSize: 12;
}
.logoutButtonStyle {
cornerRadius: 0;
highlightAlphas: 0, 0;
fillAlphas: 1, 1, 1, 1;
fillColors: #262626, #262626, #454545, #454545;
color: #ffffff;
textRollOverColor: #ffffff;
textSelectedColor: #262626;
borderColor: #000000;
themeColor: haloBlue;
fontFamily: Arial;
fontSize: 12;
}
.helpLinkButtonStyle {
rollOverColor: #cccccc;
selectionColor: #999999;
color: #ffffff;
textRollOverColor: #504f3d;
textSelectedColor: #504f3d;
}
DataGrid {
backgroundColor: #e1e2e5;
rollOverColor: #f3f3f3;
textRollOverColor: #5e5f63;
selectionColor: #e1e2e5;
color: #5e5f63;
textSelectedColor: #5e5f63;
dropShadowEnabled: false;
fontFamily: arial;
fontSize: 11;
headerStyleName: "mydataGridHeaderStyle";
}
.mydataGridHeaderStyle {
color: #5e5f63;
fontFamily: arial;
fontSize: 12;
}
.whiteboardUndoButtonStyle, .whiteboardCircleButtonStyle, .whiteboardClearButtonStyle,
.whiteboardTriangleButtonStyle, .whiteboardTextButtonStyle, .whiteboardRectangleButtonStyle,
.whiteboardPanZoomButtonStyle, .whiteboardLineButtonStyle, .whiteboardScribbleButtonStyle
{
textIndent: 0;
paddingLeft: 0;
paddingRight: 0;
paddingTop: 5;
paddingBottom: 5;
highlightAlphas: 0.4, 0;
fillAlphas: 1, 1, 1, 1;
fillColors: #fefeff, #e1e2e5, #ffffff, #eeeeee;
color: #5e5f63;
textRollOverColor: #5e5f63;
textSelectedColor: #5e5f63;
borderColor: #b9babc;
themeColor: haloBlue;
fontFamily: Arial;
fontSize: 12;
}
.whiteboardUndoButtonStyle
{
icon: Embed('assets/images/undo.png');
}
.whiteboardCircleButtonStyle {
icon: Embed('assets/images/ellipse.png');
}
.whiteboardClearButtonStyle {
icon: Embed('assets/images/delete.png');
}
.whiteboardScribbleButtonStyle{
icon: Embed('assets/images/pencil.png');
}
.whiteboardLineButtonStyle {
icon: Embed('assets/images/line.png');
}
.whiteboardPanZoomButtonStyle {
icon: Embed('assets/images/hand.png');
}
.whiteboardRectangleButtonStyle {
icon: Embed('assets/images/square.png');
}
.whiteboardTextButtonStyle {
icon: Embed('assets/images/text.png');
}
.whiteboardTriangleButtonStyle {
icon: Embed('assets/images/triangle.png');
}
.presentationUploadButtonStyle, .presentationBackButtonStyle, .presentationForwardButtonStyle,
.presentationFitToWidthButtonStyle, .presentationFitToPageButtonStyle
{
textIndent: 0;
paddingLeft: 10;
paddingRight: 10;
paddingTop: 5;
paddingBottom: 5;
highlightAlphas: 0.4, 0;
fillAlphas: 1, 1, 1, 1;
fillColors: #fefeff, #e1e2e5, #ffffff, #eeeeee;
color: #5e5f63;
textRollOverColor: #5e5f63;
textSelectedColor: #5e5f63;
borderColor: #b9babc;
themeColor: haloBlue;
fontFamily: Arial;
fontSize: 12;
}
.presentationUploadButtonStyle {
icon: Embed('assets/images/upload.png');
}
.presentationBackButtonStyle {
icon: Embed('assets/images/left-arrow.png');
}
.presentationForwardButtonStyle {
icon: Embed('assets/images/right-arrow.png');
}
.presentationFitToWidthButtonStyle {
icon: Embed('assets/images/fit-to-width.png');
}
.presentationFitToPageButtonStyle {
icon: Embed('assets/images/fit-to-screen.png');
}
.presentationZoomSliderStyle{
labelOffset: 0;
thumbOffset: 3;
dataTipOffset: -1;
tickOffset: 2;
tickLength: 5;
tickThickness: 2;
tickColor: #6cccff;
showTrackHighlight: true;
invertThumbDirection: false;
borderColor: #b9babc;
trackColors: #aaaaaa, #aaaaaa;
themeColor: haloBlue;
fillAlphas: 1, 1, 1, 1;
fillColors: #fefeff, #e1e2e5, #ffffff, #eeeeee;
labelStyleName: "presentationZoomSliderLabelStyle";
}
.presentationZoomSliderLabelStyle {
color: #5e5f63;
fontFamily: Arial;
}
.videoMuteButtonStyle, .videoUnmutedButtonStyle, .videoSwitchPresenterButtonStyle, .videoEjectUserButtonStyle, .videoPrivateChatButtonStyle {
fillAlphas: 1, 1, 1, 1;
fillColors: #fefeff, #e1e2e5, #ffffff, #eeeeee;
color: #5e5f63;
textRollOverColor: #ffffff;
textSelectedColor: #ffffff;
borderColor: #b9babc;
cornerRadius: 17;
}
.videoMutedButtonStyle {
/* Need to duplicate info here as the styleName is programatically changed. Extracting it out doesn't have any effect. */
fillAlphas: 1, 1, 1, 1;
fillColors: #96c7e6, #50a6d7, #ffffff, #eeeeee;
color: #ffffff;
textRollOverColor: #ffffff;
textSelectedColor: #ffffff;
borderColor: #50a6d7;
cornerRadius: 17;
icon: Embed('assets/images/webcam-muted.png');
}
.videoUnmutedButtonStyle {
icon: Embed('assets/images/webcam-unmuted.png');
}
.videoSwitchPresenterButtonStyle {
icon: Embed('assets/images/webcam-switch-presenter.png');
}
.videoEjectUserButtonStyle {
icon: Embed('assets/images/webcam-eject-user.png');
}
.videoPrivateChatButtonStyle {
icon: Embed('assets/images/webcam-private-chat.png');
}
MDIWindow {
}
.mdiWindowFocus, .presentationWindowStyleFocus, .videoDockStyleFocus
{
headerHeight: 26;
roundedBottomCorners: true;
backgroundAlpha: 1;
backgroundColor: #b9babc;
backgroundSize: '100%';
borderStyle: solid;
borderColor: #b9babc;
borderAlpha: 1;
borderThickness: 1;
borderThicknessLeft: 1;
borderThicknessTop: 1;
borderThicknessBottom: 1;
borderThicknessRight: 1;
cornerRadius: 0;
dropShadowEnabled: false;
titleStyleName: "mypanelTitle";
cornerResizeImg: Embed(source="assets/swf/Blue.swf", symbol="Corner_Resize");
cornerResizeWidth: 2;
cornerResizeHeight: 2;
cornerResizePaddingRight: 2;
cornerResizePaddingBottom: 2;
controlButtonWidth: 10;
controlButtonHeight: 10;
controlButtonGap: 4;
}
.mdiWindowNoFocus, .presentationWindowStyleNoFocus, .videoDockStyleNoFocus
{
headerHeight: 26;
roundedBottomCorners: false;
backgroundAlpha: 0.5;
backgroundColor: #b9babc;
backgroundSize: '100%';
borderStyle: solid;
borderColor: #b9babc;
borderAlpha: 0.5;
borderThickness: 1;
borderThicknessLeft: 1;
borderThicknessTop: 1;
borderThicknessBottom: 1;
borderThicknessRight: 1;
cornerRadius: 0;
dropShadowEnabled: false;
titleStyleName: "mypanelTitle";
cornerResizeImg: Embed(source="assets/swf/Blue.swf", symbol="Corner_Resize");
cornerResizeWidth: 2;
cornerResizeHeight: 2;
cornerResizePaddingRight: 2;
cornerResizePaddingBottom: 2;
controlButtonWidth: 10;
controlButtonHeight: 10;
controlButtonGap: 4;
}
.presentationSlideViewStyle {
backgroundColor: #b9babc;
}
.presentationWindowControlsStyle {
paddingBottom: 5;
paddingTop: 3;
paddingLeft: 3;
paddingRight: 3;
bottom: 5;
cornerRadius: 0;
dropShadowEnabled: false;
}
.videoViewStyleNoFocus
{
borderColor: #b9babc;
borderAlpha: 0.5;
borderThicknessLeft: 5;
borderThicknessTop: 5;
borderThicknessBottom: 5;
borderThicknessRight: 5;
roundedBottomCorners: true;
cornerRadius: 5;
headerHeight: 20;
backgroundColor: #b9babc;
backgroundAlpha: 0.5;
dropShadowEnabled: false;
titleStyleName: "mypanelTitle";
}
.videoViewStyleFocus
{
borderColor: #b9babc;
borderAlpha: 1;
borderThicknessLeft: 5;
borderThicknessTop: 5;
borderThicknessBottom: 5;
borderThicknessRight: 5;
roundedBottomCorners: true;
cornerRadius: 5;
headerHeight: 20;
backgroundColor: #b9babc;
backgroundAlpha: 1;
dropShadowEnabled: false;
titleStyleName: "mypanelTitle";
}
.videoPublishStyleNoFocus
{
borderColor: #b9babc;
borderAlpha: 0.5;
borderThicknessLeft: 5;
borderThicknessTop: 5;
borderThicknessBottom: 5;
borderThicknessRight: 5;
roundedBottomCorners: true;
cornerRadius: 5;
headerHeight: 20;
backgroundColor: #b9babc;
backgroundAlpha: 0.5;
dropShadowEnabled: false;
titleStyleName: "mypanelTitle";
}
.videoPublishStyleFocus
{
borderColor: #b9babc;
borderAlpha: 1;
borderThicknessLeft: 5;
borderThicknessTop: 5;
borderThicknessBottom: 5;
borderThicknessRight: 5;
roundedBottomCorners: true;
cornerRadius: 5;
headerHeight: 20;
backgroundColor: #b9babc;
backgroundAlpha: 1;
dropShadowEnabled: false;
titleStyleName: "mypanelTitle";
}
.videoAvatarStyleNoFocus
{
borderColor: #b9babc;
borderAlpha: 0.5;
borderThicknessLeft: 5;
borderThicknessTop: 5;
borderThicknessBottom: 5;
borderThicknessRight: 5;
roundedBottomCorners: true;
cornerRadius: 5;
headerHeight: 20;
backgroundColor: #b9babc;
backgroundAlpha: 0.5;
dropShadowEnabled: false;
titleStyleName: "mypanelTitle";
}
.videoAvatarStyleFocus
{
borderColor: #b9babc;
borderAlpha: 1;
borderThicknessLeft: 5;
borderThicknessTop: 5;
borderThicknessBottom: 5;
borderThicknessRight: 5;
roundedBottomCorners: true;
cornerRadius: 5;
headerHeight: 20;
backgroundColor: #b9babc;
backgroundAlpha: 1;
dropShadowEnabled: false;
titleStyleName: "mypanelTitle";
}
.mypanelTitle {
color: #5e5f63;
fontFamily: Arial;
fontSize: 12;
}
.closeBtnFocus, .closeBtnNoFocus
{
upSkin: Embed('assets/images/3_closeButton.png');
overSkin: Embed('assets/images/3_closeButton.png');
downSkin: Embed('assets/images/3_closeButton.png');
disabledSkin: Embed('assets/images/3_closeButton.png');
}
.increaseBtnFocus, .increaseBtnNoFocus
{
upSkin: Embed('assets/images/3_increaseButton.png');
overSkin: Embed('assets/images/3_increaseButton.png');
downSkin: Embed('assets/images/3_increaseButton.png');
disabledSkin: Embed('assets/images/3_increaseButton.png');
}
.decreaseBtnFocus, .decreaseBtnNoFocus
{
upSkin: Embed('assets/images/3_decreaseButton.png');
overSkin: Embed('assets/images/3_decreaseButton.png');
downSkin: Embed('assets/images/3_decreaseButton.png');
disabledSkin: Embed('assets/images/3_decreaseButton.png');
}
.minimizeBtnFocus
{
upSkin: Embed('assets/images/3_minimizeButton.png');
overSkin: Embed('assets/images/3_minimizeButton.png');
downSkin: Embed('assets/images/3_minimizeButton.png');
disabledSkin: Embed('assets/images/3_minimizeButton.png');
}
.resizeHndlr
{
upSkin: Embed('assets/images/resizeHandler.png');
overSkin: Embed('assets/images/resizeHandler.png');
downSkin: Embed('assets/images/resizeHandler.png');
disabledSkin: Embed('assets/images/resizeHandler.png');
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 439 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 398 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 381 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 299 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 416 B

View File

@ -0,0 +1,38 @@
Silk icon set 1.3
_________________________________________
Mark James
http://www.famfamfam.com/lab/icons/silk/
_________________________________________
This work is licensed under a
Creative Commons Attribution 2.5 License.
[ http://creativecommons.org/licenses/by/2.5/ ]
This means you may use it for any purpose,
and make any changes you like.
All I ask is that you include a link back
to this page in your credits.
Are you using this icon set? Send me an email
(including a link or picture if available) to
mjames@gmail.com
Any other questions about this icon set please
contact mjames@gmail.com
==================================================
Diagona Icons
Copyright (C) 2007 Yusuke Kamiyamane. All rights reserved.
The icons are licensed under a Creative Commons Attribution
3.0 license. <http://creativecommons.org/licenses/by/3.0/>
If you can't or don't want to provide a link back, please
purchase a royalty-free license.
<http://p.yusukekamiyamane.com/>
I'm unavailable for custom icon design work. But your
suggestions are always welcome!
<mailto:p@yusukekamiyamane.com>
====================

Binary file not shown.

After

Width:  |  Height:  |  Size: 290 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 462 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 376 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 292 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 268 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 541 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 345 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 365 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 269 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -3,11 +3,14 @@
<project name="BigBlueButton Client" basedir="." default="clean-build-all" >
<property environment="env" />
<property name="STATIC_RSL" value="true" />
<property name="DEBUG" value="true" />
<property name="BUILD_ENV" value="DEV" />
<property name="FLEX_HOME" value="${env.FLEX_HOME}" />
<property name="LOCALE_DIR" value="${FLEX_HOME}/frameworks/locale"/>
<property name="BASE_DIR" value="${basedir}" />
<property name="RESOURCES_DIR" value="${BASE_DIR}/resources" />
<property name="themeFile" value="BBBDefault.css"/>
<property name="RESOURCES_DIR" value="${BASE_DIR}/resources" />
<property name="PROD_RESOURCES_DIR" value="${RESOURCES_DIR}/prod" />
<property name="SRC_DIR" value="${BASE_DIR}/src" />
@ -15,21 +18,20 @@
<taskdef resource="flexTasks.tasks" classpath="${FLEX_HOME}/ant/lib/flexTasks.jar" />
<!-- Declare module names here -->
<property name="BBB_MAIN_TEST" value="BigBlueButtonTest" />
<property name="BBB_MAIN" value="BigBlueButton" />
<property name="BROADCAST" value="BroadcastModule" />
<property name="CHAT" value="ChatModule" />
<property name="VIEWERS" value="ViewersModule" />
<property name="LISTENERS" value="ListenersModule" />
<property name="PRESENT" value="PresentModule" />
<property name="DESKSHARE" value="DeskShareModule" />
<property name="DESKSHARE_SA" value="DeskshareStandalone" />
<property name="CAM_PREVIEW_SA" value="WebcamPreviewStandalone" />
<property name="CAM_VIEW_SA" value="WebcamViewStandalone" />
<property name="PHONE" value="PhoneModule" />
<property name="NOTES" value="NotesModule" />
<property name="VIDEO" value="VideoconfModule" />
<property name="WHITEBOARD" value="WhiteboardModule" />
<property name="DYN_INFO" value="DynamicInfoModule" />
<property name="BREAKOUT" value="BreakoutModule" />
<property name="CLASSROOM_AUDIO" value="ClassroomAudioModule" />
<property name="SETTINGS" value="SettingsModule" />
<property name="VIDEO_DOCK" value="VideodockModule" />
<property name="LAYOUT" value="LayoutModule" />
@ -69,9 +71,9 @@
<target name="branding" depends="init-ant-contrib">
<sequential>
<mxmlc file="${SRC_DIR}/branding/css/${themeFile}"
<mxmlc file="${BASE_DIR}/branding/default/style/css/${themeFile}"
output="${OUTPUT_DIR}/branding/css/${themeFile}.swf"
debug="false"
debug="${DEBUG}"
mxml.compatibility-version="3.0.0"
swf-version="13"
optimize="true">
@ -162,14 +164,18 @@
<fileset dir="${BASE_DIR}/src/org/bigbluebutton/common/assets/images/" />
</copy>
</target>
<target name="build-breakout" description="Compile Breakout Module" >
<build-module src="${SRC_DIR}" target="${BREAKOUT}" />
</target>
<target name="build-broadcast" description="Compile Broadcast Module" >
<build-module src="${SRC_DIR}" target="${BROADCAST}" />
</target>
<target name="build-chat" description="Compile Chat Module">
<build-module src="${SRC_DIR}" target="${CHAT}" />
</target>
<target name="build-notes" description="Compile Notes Module">
<build-module src="${SRC_DIR}" target="${NOTES}" />
</target>
<target name="build-viewers" description="Compile Viewers Module">
<build-module src="${SRC_DIR}" target="${VIEWERS}" />
@ -183,16 +189,26 @@
<build-module src="${SRC_DIR}" target="${PRESENT}" />
</target>
<target name="build-deskshare-standalone" depends="build-deskshare-no-linker" description="Compile Deskshare Standalone Module">
<target name="build-deskshare-standalone" depends="build-deskshare-no-linker" description="Compile Deskshare Standalone Application">
<echo message="Compiling deskshare standalone without optimization." />
<build-module-no-link src="${SRC_DIR}" target="${DESKSHARE_SA}" />
</target>
<target name="build-deskshare-no-linker" description="Compile Deskshare Module without the linker">
<echo message="Compiling deskshare without optimization." />
<build-module-no-link src="${SRC_DIR}" target="${DESKSHARE}" />
</target>
<target name="build-deskshare-no-linker" description="Compile Deskshare Module without the linker">
<echo message="Compiling deskshare without optimization." />
<build-module-no-link src="${SRC_DIR}" target="${DESKSHARE}" />
</target>
<target name="build-webcam-preview-standalone" description="Compile Webcam Preview Standalone Application">
<echo message="Compiling webcam preview standalone without optimization." />
<build-module-no-link src="${SRC_DIR}" target="${CAM_PREVIEW_SA}" />
</target>
<target name="build-webcam-view-standalone" description="Compile Webcam View Standalone Application">
<echo message="Compiling webcam view standalone without optimization." />
<build-module-no-link src="${SRC_DIR}" target="${CAM_VIEW_SA}" />
</target>
<target name="build-deskshare" description="Compile Deskshare Module">
<build-module src="${SRC_DIR}" target="${DESKSHARE}" />
<echo message="Copying deskshare applet for Deskshare Module" />
@ -207,14 +223,6 @@
<fileset dir="${BASE_DIR}/src/org/bigbluebutton/modules/phone/views/assets/images/" />
</copy>
</target>
<target name="build-classroom-audio" description="Compile Classroom Audio Module">
<build-module src="${SRC_DIR}" target="${CLASSROOM_AUDIO}" />
</target>
<target name="build-settings" description="Compile Settings Module">
<build-module src="${SRC_DIR}" target="${SETTINGS}" />
</target>
<target name="build-video" description="Compile Video Module">
<build-module src="${SRC_DIR}" target="${VIDEO}" />
@ -228,24 +236,20 @@
<build-module src="${SRC_DIR}" target="${WHITEBOARD}" />
</target>
<target name="build-dyn" description="Compile Dynamic Info Module">
<build-module src="${SRC_DIR}" target="${DYN_INFO}" />
</target>
<target name="build-layout" description="Compile Layout Module">
<build-module src="${SRC_DIR}" target="${LAYOUT}" />
</target>
<!-- just a grouping of modules to compile -->
<target name="build-main-chat-viewers-listeners-present"
depends="build-bbb-main, build-bbb-main-test, build-chat, build-viewers, build-listeners, build-present, build-breakout, build-layout"
description="Compile main, chat, viewers, listeners, present, breakout modules">
depends="build-bbb-main, build-chat, build-viewers, build-listeners, build-present, build-layout, build-broadcast"
description="Compile main, chat, viewers, listeners, present modules">
</target>
<!-- just a grouping of modules to compile -->
<target name="build-deskshare-phone-video-whiteboard-dyn"
depends="build-deskshare, build-phone, build-video, build-videodock, build-whiteboard, build-dyn, build-classroom-audio, build-settings"
description="Compile deskshare, phone, video, whiteboard, dynamic info modules">
depends="build-deskshare, build-phone, build-video, build-videodock, build-whiteboard, build-notes"
description="Compile deskshare, phone, video, whiteboard modules">
</target>
<macrodef name="build-main">
@ -254,7 +258,7 @@
<attribute name="app" default="."/>
<attribute name="src" default="${SRC_DIR}" description="Path to the module to compile" />
<sequential>
<mxmlc file="@{src}/@{target}.mxml" output="${OUTPUT_DIR}/@{target}.swf" debug="false" mxml.compatibility-version="3.0.0" swf-version="13" optimize="true" link-report="linker-report.xml">
<mxmlc file="@{src}/@{target}.mxml" output="${OUTPUT_DIR}/@{target}.swf" debug="${DEBUG}" mxml.compatibility-version="3.0.0" swf-version="13" optimize="true" link-report="linker-report.xml">
<target-player>11</target-player>
<load-config filename="@{flex}/frameworks/flex-config.xml" />
<source-path path-element="@{flex}/frameworks" />
@ -293,7 +297,7 @@
<attribute name="app" default="."/>
<attribute name="src" default="${SRC_DIR}" description="Path to the module to compile" />
<sequential>
<mxmlc file="@{src}/@{target}.mxml" output="${OUTPUT_DIR}/@{target}.swf" debug="false" mxml.compatibility-version="3.0.0" swf-version="13">
<mxmlc file="@{src}/@{target}.mxml" output="${OUTPUT_DIR}/@{target}.swf" debug="${DEBUG}" mxml.compatibility-version="3.0.0" swf-version="13">
<target-player>11</target-player>
<load-config filename="@{flex}/frameworks/flex-config.xml" />
<source-path path-element="@{flex}/frameworks" />
@ -320,7 +324,7 @@
<attribute name="app" default="."/>
<attribute name="src" default="${SRC_DIR}" description="Path to the module to compile" />
<sequential>
<mxmlc file="@{src}/@{target}.mxml" output="${OUTPUT_DIR}/@{target}.swf" debug="false" mxml.compatibility-version="3.0.0" swf-version="13" optimize="true" load-externs="linker-report.xml">
<mxmlc file="@{src}/@{target}.mxml" output="${OUTPUT_DIR}/@{target}.swf" debug="${DEBUG}" mxml.compatibility-version="3.0.0" swf-version="13" optimize="true" load-externs="linker-report.xml">
<target-player>11</target-player>
<load-config filename="@{flex}/frameworks/flex-config.xml" />
<source-path path-element="@{flex}/frameworks" />
@ -378,7 +382,8 @@
<copy file="${PROD_RESOURCES_DIR}/BigBlueButtonTest.html" todir="${OUTPUT_DIR}" overwrite="true"/>
<copy file="${PROD_RESOURCES_DIR}/BigBlueButton.html" todir="${OUTPUT_DIR}" overwrite="true"/>
<copy file="${PROD_RESOURCES_DIR}/DeskshareStandalone.html" todir="${OUTPUT_DIR}" overwrite="true"/>
<copy file="${PROD_RESOURCES_DIR}/bbb.gif" todir="${OUTPUT_DIR}" overwrite="true"/>
<copy file="${PROD_RESOURCES_DIR}/bbb.gif" todir="${OUTPUT_DIR}" overwrite="true"/>
<copy file="${PROD_RESOURCES_DIR}/avatar.png" todir="${OUTPUT_DIR}" overwrite="true"/>
<copy file="${PROD_RESOURCES_DIR}/locales.xml" todir="${OUTPUT_DIR}/conf" overwrite="true"/>
<copy file="${PROD_RESOURCES_DIR}/expressInstall.swf" todir="${OUTPUT_DIR}" overwrite="true"/>
<copy file="${PROD_RESOURCES_DIR}/example-info-data.xml" todir="${OUTPUT_DIR}/conf" overwrite="true"/>
@ -455,13 +460,16 @@
<!-- NOTE: compile-deskshare-standalone MUST come first before compile-bbb as we need the deskshare-standalone
to be compiled withouth being optimized by using the linker -->
<target name="clean-build-bbb" depends="clean, init-ant-contrib, generate-html-wrapper, compile-deskshare-standalone, compile-bbb"
<target name="clean-build-bbb" depends="clean, init-ant-contrib, generate-html-wrapper, compile-deskshare-standalone,
build-webcam-preview-standalone, build-webcam-view-standalone, compile-bbb"
description="Build BBB client skipping compiling of locales"/>
<target name="clean-build-all" depends="clean, init-ant-contrib, generate-html-wrapper, compile-deskshare-standalone, compile-bbb"
<target name="clean-build-all" depends="clean, init-ant-contrib, generate-html-wrapper, compile-deskshare-standalone,
build-webcam-preview-standalone, build-webcam-view-standalone, compile-bbb, branding"
description="Build BBB client including locales"/>
<target name="modules" depends="init-ant-contrib, generate-html-wrapper, compile-deskshare-standalone, compile-bbb"
<target name="modules" depends="init-ant-contrib, generate-html-wrapper, compile-deskshare-standalone,
build-webcam-preview-standalone, build-webcam-view-standalone, compile-bbb"
description="Build BBB client without locales"/>
<target name="cleanandmake" depends="clean-build-all" description="Build BBB client including locales"/>
<target name="build-custom" depends="init-ant-contrib, build-classroom-audio" description="Build a custom defined module only, to save time as each build takes several minutes" />
<target name="build-custom" depends="init-ant-contrib" description="Build a custom defined module only, to save time as each build takes several minutes" />
</project>

View File

@ -173,6 +173,10 @@ bbb.logout.rejected = The connection to the server has been rejected
bbb.logout.invalidapp = The red5 app does not exist
bbb.logout.unknown = Your client has lost connection with the server
bbb.logout.usercommand = You have logged out of the conference
bbb.notes.title = Notes
bbb.notes.cmpColorPicker.toolTip = Text Color
bbb.notes.saveBtn = Save
bbb.notes.saveBtn.toolTip = Save Note
bbb.settings.deskshare.instructions = Click Allow on the prompt that pops up to check that desktop sharing is working properly for you
bbb.settings.deskshare.start = Check Desktop Sharing
bbb.settings.voice.volume = Microphone Activity
@ -217,6 +221,8 @@ bbb.accessibility.chat.plustab.fontsize = Font size
bbb.accessibility.chat.chatView.publicTabNew = NEW MESSAGE IN PUBLIC CHAT
bbb.accessibility.chat.chatView.privateTabNew = NEW MESSAGE IN PRIVATE CHAT WITH {0}
bbb.accessibility.notes.notesview.input = Notes input
bbb.shortcuthelp.title = Shortcut glossary
bbb.shortcuthelp.dropdown.all = All shortcuts
bbb.shortcuthelp.dropdown.general = General shortcuts

View File

@ -6,7 +6,7 @@
<porttest host="HOST" application="video" timeout="10000"/>
<application uri="rtmp://HOST/bigbluebutton" host="http://HOST/bigbluebutton/api/enter" />
<language userSelectionEnabled="true" />
<skinning enabled="false" url="branding/css/theme.css.swf" />
<skinning enabled="true" url="http://HOST/client/branding/css/BBBDefault.css.swf" />
<layout showLogButton="false" showVideoLayout="false" showResetLayout="true" defaultLayout="Default"
showToolbar="true" showFooter="true" showHelpButton="true" showLogoutWindow="true"/>
@ -25,13 +25,11 @@
uri="rtmp://HOST/bigbluebutton"
host="http://HOST/bigbluebutton/api/enter"
allowKickUser="false"
windowVisible="true"
/>
<module name="ListenersModule" url="http://HOST/client/ListenersModule.swf?v=VERSION"
uri="rtmp://HOST/bigbluebutton"
recordingHost="http://HOST"
windowVisible="true"
position="bottom-left"
/>
@ -74,7 +72,8 @@
filterDivisor="4"
enableH264 = "true"
h264Level = "2.1"
h264Profile = "main"
h264Profile = "main"
displayAvatar = "false"
/>
<module name="WhiteboardModule" url="http://HOST/client/WhiteboardModule.swf?v=VERSION"
@ -94,6 +93,7 @@
uri="rtmp://HOST/bigbluebutton"
dependsOn="VideoconfModule, ViewersModule"
autoDock="true"
showControls="true"
maximizeWindow="false"
position="bottom-right"
width="172"
@ -107,24 +107,22 @@
layoutConfig="http://HOST/client/conf/layout.xml"
enableEdit="true"
/>
<!-- new module in development:
<module name="DynamicInfoModule" url="http://HOST/client/DynamicInfoModule.swf?v=VERSION"
uri="rtmp://HOST/bigbluebutton"
host="http://HOST"
infoURL="http://HOST/client/conf/example-info-data.xml?user={userID}&role={role}&meetingID={meetingID}"
/>
-->
<!--<module name="ExampleChatModule" url="http://HOST/client/ExampleChatModule.swf?v=56"
uri="rtmp://HOST/bigbluebutton"
host="http://HOST"
/>-->
<!--<module name="SharedNotesModule" url="http://HOST/client/SharedNotesModule.swf?v=VERSION"
uri="http://192.168.0.225/bigbluebutton"
dependsOn="ViewersModule"
/>-->
<!--
<module name="NotesModule" url="http://HOST/client/NotesModule.swf?v=VERSION"
saveURL="http://HOST"
position="top-left"
/>
<module name="BroadcastModule" url="http://HOST/client/BroadcastModule.swf?v=VERSION"
uri="rtmp://HOST/bigbluebutton"
streamsUri="http://HOST/streams.xml"
position="top-left"
showStreams="true"
autoPlay="false"
dependsOn="ViewersModule"
/>
-->
</modules>
</config>

View File

@ -11,6 +11,8 @@
<script type="text/javascript" src="http://192.168.0.249/client/swfobject/swfobject.js"></script>
<script type="text/javascript">
swfobject.registerObject("BigBlueButton", "11", "expressInstall.swf");
swfobject.registerObject("WebcamPreviewStandalone", "11", "expressInstall.swf");
swfobject.registerObject("WebcamViewStandalone", "11", "expressInstall.swf");
</script>
<script src="http://192.168.0.249/client/lib/jquery-1.5.1.min.js" language="javascript"></script>
<script src="http://192.168.0.249/client/lib/bigbluebutton.js" language="javascript"></script>
@ -18,12 +20,21 @@
<script src="http://192.168.0.249/client/lib/bbb_blinker.js" language="javascript"></script>
<script src="http://192.168.0.249/client/lib/bbb_deskshare.js" language="javascript"></script>
<script type="text/javascript" src="http://192.168.0.249/client/lib/bbb_api_bridge.js"></script>
<script type="text/javascript" src="http://192.168.0.249/client/lib/bbb_api_cam_preview.js"></script>
<script type="text/javascript" src="http://192.168.0.249/client/lib/bbb_api_cam_view.js"></script>
<script type="text/javascript" src="http://192.168.0.235/3rd-party.js"></script>
<script>
window.displayBBBClient = function() {
var bbbc = document.getElementById("flashclient");
var wcpc = document.getElementById("webcampreviewclient");
wcpc.style.display = "none";
bbbc.style.display = "block";
}
window.displayWCClient = function() {
console.log("Displaying webcam preview client");
var wcpc = document.getElementById("webcampreview");
wcpc.style.display = "block";
}
window.onload = function() {
registerListeners();
}
@ -31,24 +42,77 @@
</head>
<body>
<div id="controls">
<button type="button" onclick="displayBBBClient()">Show Client</button>
<button type="button" onclick="BBB.shareVideoCamera()">Webcam</button>
<button type="button" onclick="registerListeners()">Listen for Events</button>
<button type="button" onclick="displayBBBClient()">Show BBB Client</button>
<button type="button" onclick="displayWCClient()">Show WC Client</button>
<button type="button" onclick="BBB.shareVideoCamera()">Share Webcam</button>
<button type="button" onclick="BBB.stopSharingCamera()">Stop Webcam</button>
<button type="button" onclick="BBB.switchPresenter('x8hxeozsqbk1')">Switch Presenter</button>
<button type="button" onclick="joinVoiceConference2()">Join Voice</button>
<button type="button" onclick="leaveVoiceConference2()">Leave Voice</button>
<button type="button" onclick="getMyUserID()">Get My UserID</button>
<button type="button" onclick="getMeetingID()">Get MeetingID</button>
<button type="button" onclick="getMyRoleAsynch()">Get My Role Asynch</button>
<button type="button" onclick="getMyRoleSynch()">Get My Role Synch</button>
<button type="button" onclick="muteMe()">Mute Me</button>
<button type="button" onclick="unmuteMe()">Unmute Me</button>
<button type="button" onclick="muteAll()">Mute All</button>
<button type="button" onclick="unmuteAll()">Unmute All</button>
<button type="button" onclick="switchLayout('Video Chat')">Switch Video Layout</button>
<button type="button" onclick="switchLayout('Lecture')">Switch Present Layout</button>
<button type="button" onclick="switchLayout('S2SVideoChat')">Switch Video Layout</button>
<button type="button" onclick="switchLayout('S2SPresentation')">Switch Present Layout</button>
<button type="button" onclick="lockLayout(true)">Lock Layout</button>
<button type="button" onclick="lockLayout(false)">Unlock Layout</button>
<button type="button" onclick="sendPublicChat()">Send Public Chat</button>
<button type="button" onclick="sendPrivateChat()">Send Private Chat</button>
<button type="button" onclick="amIPresenterSync()">Am I Presenter Sync</button>
<button type="button" onclick="amIPresenterAsync()">Am I Presenter Async</button>
</div>
<div id="flashclient" style="display: none">
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="100%" height="90%" id="BigBlueButton" name="BigBlueButton" align="middle">
<div id="webcampreview" style="background-color:#FFD700;height:240px;width:320px;float:left;">
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540001" width="320" height="240" id="WebcamPreviewStandalone" name="WebcamPreviewStandalone" align="middle">
<param name="movie" value="http://192.168.0.249/client/WebcamPreviewStandalone.swf?v=VERSION" />
<param name="quality" value="high" />
<param name="allowfullscreen" value="true" />
<param name="bgcolor" value="#869ca7" />
<param name="wmode" value="window" />
<param name="allowScriptAccess" value="always" />
<!--[if !IE]>-->
<object type="application/x-shockwave-flash" data="http://192.168.0.249/client/WebcamPreviewStandalone.swf?v=VERSION" width="100%" height="90%" align="middle">
<param name="quality" value="high" />
<param name="bgcolor" value="#869ca7" />
<param name="allowScriptAccess" value="always" />
<!--<![endif]-->
<a href="http://www.adobe.com/go/getflashplayer">
<img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" />
</a>
<!--[if !IE]>-->
</object>
<!--<![endif]-->
</object>
</div>
<div id="webcamview" style="background-color:#FFD700;height:240px;width:320px;float:left;">
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540002" width="320" height="240" id="WebcamViewStandalone" name="WebcamViewStandalone" align="middle">
<param name="movie" value="http://192.168.0.249/client/WebcamViewStandalone.swf?v=VERSION" />
<param name="quality" value="high" />
<param name="allowfullscreen" value="true" />
<param name="bgcolor" value="#869ca7" />
<param name="wmode" value="window" />
<param name="allowScriptAccess" value="always" />
<!--[if !IE]>-->
<object type="application/x-shockwave-flash" data="http://192.168.0.249/client/WebcamViewStandalone.swf?v=VERSION" width="100%" height="90%" align="middle">
<param name="quality" value="high" />
<param name="bgcolor" value="#869ca7" />
<param name="allowScriptAccess" value="always" />
<!--<![endif]-->
<a href="http://www.adobe.com/go/getflashplayer">
<img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" />
</a>
<!--[if !IE]>-->
</object>
<!--<![endif]-->
</object>
</div>
<div id="flashclient" style="background-color:#EEEEEE;height:900px;width:1200px;float:left;">
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="50%" height="50%" id="BigBlueButton" name="BigBlueButton" align="middle">
<param name="movie" value="http://192.168.0.249/client/BigBlueButton.swf?v=VERSION" />
<param name="quality" value="high" />
<param name="allowfullscreen" value="true" />
@ -68,7 +132,7 @@
</object>
<!--<![endif]-->
</object>
</div>
</div>
<div id="update-display"/>
<div id="notifications" aria-live="polite" role="region" aria-label="Chat Notifications"></div>
</body>

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@ -1,6 +1,8 @@
<?xml version="1.0"?>
<layouts>
<layout name="Video Chat">
<window name="NotesWindow" hidden="true" width="0.7" height="1" x="0" y="0" draggable="false" resizable="false"/>
<window name="BroadcastWindow" hidden="true" draggable="false" resizable="false"/>
<window name="ViewersWindow" minimized="true" order="3" hidden="true" />
<window name="VideoDock" width="1" height="1" x="0" y="0" order="0"/>
<window name="ChatWindow" width="0.303125" height="0.9955703211517165" x="0.3229166666666667" y="0.9656699889258029" order="4" hidden="true" />
@ -8,6 +10,8 @@
<window name="ListenersWindow" minimized="true" hidden="true" order="2"/>
</layout>
<layout name="Default" default="true">
<window name="NotesWindow" hidden="true" width="0.7" height="1" x="0" y="0" draggable="false" resizable="false"/>
<window name="BroadcastWindow" hidden="true" draggable="false" resizable="false"/>
<window name="ViewersWindow" width="0.1772793053545586" height="0.33643617021276595" x="0" y="0" />
<window name="ListenersWindow" width="0.1772793053545586" height="0.33643617021276595" x="0" y="0.34308510638297873" />
<window name="PresentationWindow" width="0.5137481910274964" height="0.9946808510638298" x="0.18017366136034732" y="0" />
@ -15,6 +19,8 @@
<window name="ChatWindow" width="0.3031837916063676" height="0.9960106382978723" x="0.6968162083936325" y="0" />
</layout>
<layout name="Meeting">
<window name="NotesWindow" hidden="true" width="0.7" height="1" x="0" y="0" draggable="false" resizable="false"/>
<window name="BroadcastWindow" hidden="true" draggable="false" resizable="false"/>
<window name="VideoDock" width="0.6570188133140377" height="0.9960106382978723" x="0" y="0" />
<window name="ChatWindow" width="0.3393632416787265" height="0.5305851063829787" x="0.658465991316932" y="0" />
<window name="ListenersWindow" hidden="true" />
@ -22,6 +28,8 @@
<window name="PresentationWindow" width="0.34008683068017365" height="0.4601063829787234" x="0.658465991316932" y="0.535904255319149" />
</layout>
<layout name="Webinar">
<window name="NotesWindow" hidden="true" width="0.7" height="1" x="0" y="0" draggable="false" resizable="false"/>
<window name="BroadcastWindow" hidden="true" draggable="false" resizable="false"/>
<window name="ViewersWindow" minimized="true" />
<window name="VideoDock" width="0.2923611111111111" height="0.4640957446808511" x="0.7048611111111112" y="0.535904255319149" />
<window name="ListenersWindow" minimized="true" />
@ -29,6 +37,8 @@
<window name="ChatWindow" width="0.2923611111111111" height="0.5305851063829787" x="0.7048611111111112" y="0" />
</layout>
<layout name="Lecture assistant">
<window name="NotesWindow" hidden="true" width="0.7" height="1" x="0" y="0" draggable="false" resizable="false"/>
<window name="BroadcastWindow" hidden="true" draggable="false" resizable="false"/>
<window name="ChatWindow" width="0.4597222222222222" height="0.9958677685950413" x="0.2263888888888889" y="0" />
<window name="ListenersWindow" width="0.2222222222222222" height="0.4765840220385675" x="0" y="0.5179063360881543" />
<window name="ViewersWindow" width="0.22152777777777777" height="0.5055096418732782" x="0" y="0" />
@ -36,6 +46,8 @@
<window name="VideoDock" width="0.30972222222222223" height="0.4256198347107438" x="0.6902777777777778" y="0.568870523415978" />
</layout>
<layout name="Lecture">
<window name="NotesWindow" hidden="true" width="0.7" height="1" x="0" y="0" draggable="false" resizable="false"/>
<window name="BroadcastWindow" hidden="true" draggable="false" resizable="false"/>
<window name="ViewersWindow" hidden="true" />
<window name="VideoDock" width="0.2923611111111111" height="0.4640957446808511" x="0.7048611111111112" y="0.535904255319149" />
<window name="ListenersWindow" hidden="true" />
@ -43,6 +55,8 @@
<window name="ChatWindow" width="0.2923611111111111" height="0.5305851063829787" x="0.7048611111111112" y="0" />
</layout>
<layout name="Lecture" role="presenter">
<window name="NotesWindow" hidden="true" width="0.7" height="1" x="0" y="0" draggable="false" resizable="false"/>
<window name="BroadcastWindow" hidden="true" draggable="false" resizable="false"/>
<window name="ChatWindow" hidden="true" />
<window name="ListenersWindow" hidden="true" />
<window name="ViewersWindow" hidden="true" />
@ -50,10 +64,48 @@
<window name="VideoDock" hidden="true" />
</layout>
<layout name="Lecture" role="moderator">
<window name="NotesWindow" hidden="true" width="0.7" height="1" x="0" y="0" draggable="false" resizable="false"/>
<window name="BroadcastWindow" hidden="true" draggable="false" resizable="false"/>
<window name="ChatWindow" width="0.4597222222222222" height="0.9958677685950413" x="0.2263888888888889" y="0" />
<window name="ListenersWindow" width="0.2222222222222222" height="0.4765840220385675" x="0" y="0.5179063360881543" />
<window name="ViewersWindow" width="0.22152777777777777" height="0.5055096418732782" x="0" y="0" />
<window name="PresentationWindow" width="0.3104166666666667" height="0.5537190082644629" x="0.6895833333333333" y="0" />
<window name="VideoDock" width="0.30972222222222223" height="0.4256198347107438" x="0.6902777777777778" y="0.568870523415978" />
</layout>
<layout name="S2SPresentation">
<window name="NotesWindow" hidden="true" width="0.7" height="1" x="0" y="0" draggable="false" resizable="false"/>
<window name="BroadcastWindow" hidden="true" draggable="false" resizable="false"/>
<window name="ChatWindow" hidden="true" draggable="false" resizable="false"/>
<window name="ListenersWindow" hidden="true" draggable="false" resizable="false"/>
<window name="ViewersWindow" hidden="true" draggable="false" resizable="false"/>
<window name="PresentationWindow" width="0.8" height="1" x="0" y="0" draggable="false" resizable="false"/>
<window name="VideoDock" hidden="true" draggable="false" resizable="false"/>
</layout>
<layout name="S2SVideoChat">
<window name="NotesWindow" hidden="true" width="0.7" height="1" x="0" y="0" draggable="false" resizable="false"/>
<window name="BroadcastWindow" hidden="true" draggable="false" resizable="false"/>
<window name="ViewersWindow" hidden="true" draggable="false" resizable="false"/>
<window name="VideoDock" width="1" height="1" x="0" y="0" draggable="false" resizable="false"/>
<window name="ChatWindow" hidden="true" draggable="false" resizable="false"/>
<window name="PresentationWindow" hidden="true" draggable="false" resizable="false"/>
<window name="ListenersWindow" hidden="true" draggable="false" resizable="false"/>
</layout>
<layout name="Notes">
<window name="NotesWindow" hidden="false" width="0.7" height="0.4" x="0" y="0.6" draggable="false" resizable="false"/>
<window name="BroadcastWindow" hidden="false" width="0.7" height="0.6" x="0" y="0" draggable="false" resizable="false"/>
<window name="ViewersWindow" hidden="true" draggable="false" resizable="false"/>
<window name="VideoDock" hidden="true" draggable="false" resizable="false"/>
<window name="ChatWindow" width="0.3" height="1" x="0.7" y="0" draggable="false" resizable="false"/>
<window name="PresentationWindow" hidden="true" draggable="false" resizable="false"/>
<window name="ListenersWindow" hidden="true" draggable="false" resizable="false"/>
</layout>
<layout name="Broadcast">
<window name="NotesWindow" hidden="false" width="0.7" height="1" x="0" y="0" draggable="false" resizable="false"/>
<window name="BroadcastWindow" hidden="false" width="0.7" height="0.9" x="0" y="0" draggable="false" resizable="false"/>
<window name="ViewersWindow" hidden="true" draggable="false" resizable="false"/>
<window name="VideoDock" hidden="true" draggable="false" resizable="false"/>
<window name="ChatWindow" width="0.3" height="1" x="0.7" y="0" draggable="false" resizable="false"/>
<window name="PresentationWindow" hidden="true" draggable="false" resizable="false"/>
<window name="ListenersWindow" hidden="true" draggable="false" resizable="false"/>
</layout>
</layouts>

View File

@ -1,26 +1,67 @@
var registerListeners = function() {
console.log("Listening for events.");
BBB.listen("UserLeftEvent", function(bbbEvent) {
console.log("User [" + bbbEvent.userID + "] has left.");
});
BBB.listen("UserJoinedEvent", function(bbbEvent) {
console.log("User [" + bbbEvent.userID + ", [" + bbbEvent.userName + "] has joined.");
});
BBB.listen("UserJoinedVoiceEvent", function(bbbEvent) {
console.log("Received userHasJoinedVoiceConference event");
});
BBB.listen("NewPublicChatEvent", function(bbbEvent) {
console.log("Received NewPublicChatEvent [" + bbbEvent.message + "]");
});
BBB.listen("NewPrivateChatEvent", function(bbbEvent) {
console.log("Received NewPrivateChatEvent event");
});
BBB.listen("UserJoinedVoiceEvent", function(bbbEvent) {
console.log("User [" + bbbEvent.userID + "] had joined the voice conference.");
});
BBB.listen("UserLeftVoiceEvent", function(bbbEvent) {
console.log("User [" + bbbEvent.userID + "has left the voice conference.");
});
BBB.listen("UserVoiceMutedEvent", function(bbbEvent) {
console.log("User [" + bbbEvent.userID + "] is muted [" + bbbEvent.muted + "]");
});
BBB.listen("UserLockedVoiceEvent", function(bbbEvent) {
console.log("User [" + bbbEvent.userID + "] is locked [" + bbbEvent.locked + "]");
});
BBB.listen("CamStreamSharedEvent", function(bbbEvent) {
console.log("User CamStreamSharedEvent [" + bbbEvent.uri + "," + bbbEvent.streamName + "]");
CAM_VIEW.viewWebcamStream(bbbEvent.uri, bbbEvent.streamName);
});
BBB.listen("BroadcastingCameraStartedEvent", function(bbbEvent) {
console.log("User BroadcastingCameraStartedEvent [" + bbbEvent.camIndex + "] [" + bbbEvent.camWidth + "]");
CAM_PREVIEW.previewCamera(bbbEvent.camIndex, bbbEvent.camWidth, bbbEvent.camHeight, bbbEvent.camKeyFrameInterval,
bbbEvent.camModeFps, bbbEvent.camQualityBandwidth, bbbEvent.camQualityPicture);
});
BBB.listen("BroadcastingCameraStoppedEvent", function(bbbEvent) {
console.log("User BroadcastingCameraStoppedEvent ]");
CAM_PREVIEW.stopPreviewCamera();
});
}
var leaveVoiceConference2 = function () {
BBB.leaveVoiceConference();
}
var joinVoiceConference2 = function () {
BBB.joinVoiceConference();
}
var amIPresenterAsync = function() {
BBB.listen("AmIPresenterQueryResponse", function(bbbEvent) {
console.log("Received AmIPresenterQueryResponse event [" + bbbEvent.amIPresenter + "]");
});
BBB.amIPresenter();
}
var amIPresenterSync = function() {
BBB.amIPresenter(function(amIPresenter) {
console.log("Am I Presenter = " + amIPresenter);
});
}
var getMyRoleAsynch = function() {
BBB.listen("GetMyRoleResponse", function(bbbEvent) {
console.log("Received GetMyRoleResponse event");
@ -35,6 +76,18 @@ var getMyRoleSynch = function() {
});
}
var getMyUserID = function() {
BBB.getMyUserID(function(userID) {
console.log("My user ID = [" + userID + "]");
});
}
var getMeetingID = function() {
BBB.getMeetingID(function(meetingID) {
console.log("Meeting ID = [" + meetingID + "]");
});
}
var muteMe = function() {
BBB.muteMe();
}

View File

@ -12,6 +12,33 @@
return swfobject.getObjectById("BigBlueButton");
}
BBB.switchPresenter = function(newPresenterUserID) {
var swfObj = getSwfObj();
if (swfObj) {
console.log("Request to switch presenter to [" + newPresenterUserID + "]");
swfObj.switchPresenterRequest(newPresenterUserID);
}
}
/**
* Query the Flash client if user is presenter.
* Params:
* callback - function if you want a callback as response. Otherwise, you need to listen
* for the response as an event.
*/
BBB.amIPresenter = function(callback) {
var swfObj = getSwfObj();
if (swfObj) {
if (arguments.length == 0) {
swfObj.amIPresenterRequestAsync();
} else {
if (typeof callback === 'function') {
callback(swfObj.amIPresenterRequestSync());
}
}
}
}
/**
* Query the Flash client for the user's role.
* Params:
@ -31,6 +58,32 @@
}
}
/**
* Get external meetingID.
*/
BBB.getMyUserID = function(callback) {
var swfObj = getSwfObj();
if (swfObj) {
console.log("Getting my userID");
if (typeof callback === 'function') {
callback(swfObj.getMyUserID());
}
}
}
/**
* Get external meetingID.
*/
BBB.getMeetingID = function(callback) {
var swfObj = getSwfObj();
if (swfObj) {
console.log("Getting external meetingID");
if (typeof callback === 'function') {
callback(swfObj.getExternalMeetingID());
}
}
}
/**
* Join the voice conference.
*/
@ -42,16 +95,35 @@
}
}
BBB.leaveVoiceConference = function() {
var swfObj = getSwfObj();
if (swfObj) {
console.log("Leave voice");
swfObj.leaveVoiceRequest();
}
}
/**
* Share user's webcam.
*/
BBB.shareVideoCamera = function() {
BBB.shareVideoCamera = function(publishInClient) {
var swfObj = getSwfObj();
if (swfObj) {
swfObj.shareVideoCamera();
if (typeof publishInClient === 'boolean') {
swfObj.shareVideoCamera(publishInClient);
} else {
swfObj.shareVideoCamera();
}
}
}
BBB.stopSharingCamera = function() {
var swfObj = getSwfObj();
if (swfObj) {
swfObj.stopShareCameraRequest();
}
}
BBB.muteMe = function() {
var swfObj = getSwfObj();
if (swfObj) {
@ -187,16 +259,32 @@
/************************************************
* EVENT NAME CONSTANTS
*
* See https://github.com/bigbluebutton/bigbluebutton/blob/master/bigbluebutton-client/src/org/bigbluebutton/core/EventConstants.as
*
************************************************/
var GET_MY_ROLE_REQ = 'GetMyRoleRequest';
var SWITCH_LAYOUT_REQ = 'SwitchLayoutRequest';
var JOIN_VOICE_REQ = 'JoinVoiceRequest';
var MUTE_ALL_REQ = 'MuteAllRequest';
var MUTE_ME_REQ = 'MuteMeRequest';
var SHARE_CAM_REQ = 'ShareCameraRequest';
var GET_MY_ROLE_RESP:String = 'GetMyRoleResponse';
var AM_I_PRESENTER_RESP:String = 'AmIPresenterQueryResponse';
var AM_I_SHARING_CAM_RESP:String = 'AmISharingCamQueryResponse';
var BROADCASTING_CAM_STARTED:String = 'BroadcastingCameraStartedEvent';
var BROADCASTING_CAM_STOPPED:String = 'BroadcastingCameraStoppedEvent';
var I_AM_SHARING_CAM:String = 'IAmSharingCamEvent';
var CAM_STREAM_SHARED:String = 'CamStreamSharedEvent';
var USER_JOINED:String = 'UserJoinedEvent';
var USER_LEFT:String = 'UserLeftEvent';
var SWITCHED_PRESENTER:String = 'SwitchedPresenterEvent';
var NEW_PRIVATE_CHAT:String = 'NewPrivateChatEvent';
var NEW_PUBLIC_CHAT:String = 'NewPublicChatEvent';
var SWITCHED_LAYOUT:String = 'SwitchedLayoutEvent';
var REMOTE_LOCKED_LAYOUT:String = 'RemoteLockedLayoutEvent';
var REMOTE_UNLOCKED_LAYOUT:String = 'RemoteUnlockedLayoutEvent';
var USER_JOINED_VOICE:String = 'UserJoinedVoiceEvent';
var USER_LEFT_VOICE:String = 'UserLeftVoiceEvent';
var USER_MUTED_VOICE:String = 'UserVoiceMutedEvent';
var USER_TALKING:String = 'UserTalkingEvent';
var USER_LOCKED_VOICE:String = 'UserLockedVoiceEvent';
var START_PRIVATE_CHAT:String = "StartPrivateChatEvent";
window.BBB = BBB;
})(this);

View File

@ -0,0 +1,44 @@
(function(window, undefined) {
var CAM_PREVIEW = {};
/**
* Internal function to get the BBB embed object. Seems like we have to do this
* each time and can't create a var for it.
*
* To get the object, see https://code.google.com/p/swfobject/wiki/api
*/
function getSwfObj() {
return swfobject.getObjectById("WebcamPreviewStandalone");
}
/**
* Preview user's webcam.
*/
CAM_PREVIEW.previewCamera = function(camIndex, camWidth, camHeight,
camKeyFrameInterval, camModeFps,
camQualityBandwidth, camQualityPicture) {
console.log("CAM_PREVIEW::previewCamera [" + camIndex + "]");
var swfObj = getSwfObj();
if (swfObj) {
swfObj.startPreviewCamera(camIndex, camWidth, camHeight, camKeyFrameInterval, camModeFps,
camQualityBandwidth, camQualityPicture);
}
}
/**
* Stop previewing user's webcam.
*/
CAM_PREVIEW.stopPreviewCamera = function() {
var swfObj = getSwfObj();
if (swfObj) {
swfObj.stopPreviewCamera();
}
}
console.log("CAM_PREVIEW INITIALIZED");
window.CAM_PREVIEW = CAM_PREVIEW;
})(this);

View File

@ -0,0 +1,42 @@
(function(window, undefined) {
var CAM_VIEW = {};
/**
* Internal function to get the BBB embed object. Seems like we have to do this
* each time and can't create a var for it.
*
* To get the object, see https://code.google.com/p/swfobject/wiki/api
*/
function getSwfObj() {
return swfobject.getObjectById("WebcamViewStandalone");
}
/**
* View user's webcam.
*/
CAM_VIEW.viewWebcamStream = function(url, streamName) {
console.log("CAM_VIEW::viewWebcamStream [" + url + "," + streamName + "]");
var swfObj = getSwfObj();
if (swfObj) {
console.log("CAM_VIEW::viewWebcamStream 2 [" + url + "," + streamName + "]");
swfObj.startViewCameraStream(url, streamName);
}
}
/**
* Stop viewing user's webcam.
*/
CAM_VIEW.stopViewWebcamStream = function() {
var swfObj = getSwfObj();
if (swfObj) {
swfObj.stopViewCameraStream();
}
}
console.log("CAM_VIEW INITIALIZED");
window.CAM_VIEW = CAM_VIEW;
})(this);

View File

@ -0,0 +1,5 @@
<?xml version="1.0" ?>
<streams>
<stream url="rtmp://192.168.153.128/oflaDemo" id="hobbit_vp6" name="The Hobbit"/>
<stream url="rtmp://192.168.153.128/oflaDemo" id="startrekintodarkness_vp6" name="Star Trek"/>
</streams>

View File

@ -25,12 +25,11 @@
xmlns:apimap="org.bigbluebutton.main.api.maps.*"
xmlns:coreMap="org.bigbluebutton.core.controllers.maps.*"
xmlns:mate="http://mate.asfusion.com/"
xmlns:m="library://melomel/2010"
pageTitle="BigBlueButton"
layout="absolute" preinitialize="init()"
preloader="org.bigbluebutton.main.model.BigBlueButtonPreloader"
applicationComplete="hotkeyCapture()">
<mx:Script>
<![CDATA[
import com.asfusion.mate.events.Dispatcher;
@ -50,7 +49,6 @@
import org.bigbluebutton.util.i18n.ResourceUtil;
private var langResources:ResourceUtil = null; //ResourceUtil.getInstance();
public var myFoo:String = "bar";
/**
* Thse two lines are workaround for this. (ralam - Nov 8, 2008)
@ -63,147 +61,8 @@
/** another workaround - for this issue: https://bugs.adobe.com/jira/browse/SDK-13121*/
private var hist:HistoryManager
private function handleChatEvent(e:Event):void {
trace('Got CHAT_EVENT');
}
public function setFoo(f:String):void {
myFoo = f;
}
/******************************
* Testing
******************************/
private var globalDispatcher:Dispatcher = new Dispatcher();
// Login test
private static var isLoggedIn:Boolean = false; // flag to indicate if we successfully logged in
// Chat test
private static var chatMessageSent:String = "";
private static var chatTestSucceeded:Boolean = false;
// Voice test
private static var didUserJoin:Boolean = false;
// Presentation test
private static var didPresentationConvert:Boolean = false;
// Video test
private static var didVideoStart:Boolean = false;
public function handleLoginEvent(event:BBBEvent):void {
LogUtil.debug("******************* Received loggedin event");
isLoggedIn = true;
LogUtil.debug("******************* Received loggedin event " + isLoggedIn.toString());
}
public function checkLogin():String {
LogUtil.debug("******************* " + isLoggedIn.toString());
return isLoggedIn.toString();
}
public function checkChat():String {
if (chatTestSucceeded)
{
chatTestSucceeded = false;
return "true";
} else {
return chatTestSucceeded.toString();
}
}
public function handleReceivedPublicChatMessageEvent(event:BBBEvent):void {
if (event.message.search(chatMessageSent) != -1) {
chatTestSucceeded = true;
}
}
// Creates a random string and sends it as a chat message.
public function sendRandomChatMessage():void {
chatMessageSent = generateRandomString(15);
globalDispatcher.dispatchEvent(new BBBEvent(BBBEvent.SEND_PUBLIC_CHAT_MESSAGE_EVENT, chatMessageSent));
}
/**
* Voice
*/
public function joinVoiceConference():void {
globalDispatcher.dispatchEvent(new BBBEvent(BBBEvent.JOIN_VOICE_CONFERENCE));
}
public function checkVoice():String {
return didUserJoin.toString();
}
public function handleAddedListenerEvent(event:BBBEvent):void {
// if (event.message == _attributes.username) {
didUserJoin = true;
// }
}
/**
* Presentation
*/
public function checkPresentation():String {
if (didPresentationConvert) {
didPresentationConvert = false;
return "true";
} else {
return "false";
}
}
public function handlePresentationConversion(event:Event):void {
didPresentationConvert = true;
}
// Obtained from: http://www.zedia.net/2008/generate-random-strings-in-as2-or-as3/
private function generateRandomString(newLength:uint = 1, userAlphabet:String = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"):String{
var alphabet:Array = userAlphabet.split("");
var alphabetLength:int = alphabet.length;
var randomLetters:String = "";
for (var i:uint = 0; i < newLength; i++){
randomLetters += alphabet[int(Math.floor(Math.random() * alphabetLength))];
}
return randomLetters;
}
/**
* Video
*/
public function startVideoConnection():String {
globalDispatcher.dispatchEvent(new BBBEvent(BBBEvent.START_VIDEO_CONNECTION));
return "true";
}
public function playVideo():String {
globalDispatcher.dispatchEvent(new BBBEvent(BBBEvent.START_VIDEO_STREAM, "640x480avatar.flv"));
return "true";
}
public function videoHasStarted(e:Event):void {
didVideoStart = true;
}
public function checkVideo():String {
return didVideoStart.toString();
}
/**
* Desktop Sharing
*/
public function startDeskshare():String {
globalDispatcher.dispatchEvent(new BBBEvent(BBBEvent.START_DESKSHARE));
return "true";
}
protected function init():void {
setupAPI();
EventBroadcaster.getInstance().addEventListener("configLoadedEvent", configLoadedEventHandler);
@ -226,17 +85,13 @@
private function determineHTMLURL():String {
var serverName:String = "*";
if(ExternalInterface.available) // import flash.external.ExternalInterface;
{
try
{
if(ExternalInterface.available) {
try {
var htmlURL:String = String(ExternalInterface.call("window.location.href.toString"));
serverName = URLUtil.getServerName(htmlURL);
// Alert.show("HTML URL [" + htmlURL + "]");
}
catch(s:Error)
{
// Alert.show("Cannot determine HTML URL");
trace("HTML URL [" + htmlURL + "]");
} catch(s:Error) {
trace("Cannot determine HTML URL");
}
}
@ -263,10 +118,10 @@
}
public function hotkeyCapture():void{
LogUtil.debug("Entering hotkeyCapture");
trace("Entering hotkeyCapture");
stage.addEventListener(KeyboardEvent.KEY_DOWN, handleKeyDown);
ResourceUtil.getInstance().addEventListener(Event.CHANGE, localeChanged); // Listen for locale changing
LogUtil.debug("Leaving hotkeyCapture");
trace("Leaving hotkeyCapture");
}
public function handleKeyDown(e:KeyboardEvent) :void
@ -277,7 +132,7 @@
if (keyCombos[keyPress])
{
LogUtil.debug("Chad keypress " + keyPress);
trace("Chad keypress " + keyPress);
globalDispatcher.dispatchEvent(new ShortcutEvent(keyCombos[keyPress]));
}
}
@ -289,9 +144,4 @@
<maps:ApplicationEventMap />
<views:MainApplicationShell id="mainShell"/>
<mate:Listener type="{BBBEvent.LOGIN_EVENT}" method="handleLoginEvent"/>
<mate:Listener type="{BBBEvent.RECEIVED_PUBLIC_CHAT_MESSAGE_EVENT}" method="handleReceivedPublicChatMessageEvent"/>
<mate:Listener type="{BBBEvent.ADDED_LISTENER}" method="handleAddedListenerEvent"/>
<mate:Listener type="{BBBEvent.PRESENTATION_CONVERTED}" method="handlePresentationConversion"/>
<mate:Listener type="{BBBEvent.VIDEO_STARTED}" method="videoHasStarted"/>
</mx:Application>

View File

@ -206,7 +206,7 @@
<mate:Listener type="{BBBEvent.LOGIN_EVENT}" method="handleLoginEvent"/>
<mate:Listener type="{BBBEvent.RECEIVED_PUBLIC_CHAT_MESSAGE_EVENT}" method="handleReceivedPublicChatMessageEvent"/>
<mate:Listener type="{BBBEvent.ADDED_LISTENER}" method="handleAddedListenerEvent"/>
<mate:Listener type="{BBBEvent.USER_VOICE_JOINED}" method="handleAddedListenerEvent"/>
<mate:Listener type="{BBBEvent.PRESENTATION_CONVERTED}" method="handlePresentationConversion"/>
<mate:Listener type="{BBBEvent.VIDEO_STARTED}" method="videoHasStarted"/>

View File

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
BigBlueButton open source conferencing system - http://www.bigbluebutton.org
Copyright (c) 2010 BigBlueButton Inc. and by respective authors (see below).
BigBlueButton 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 2.1 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/>.
$Id: $
-->
<mx:Module xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:maps="org.bigbluebutton.modules.broadcast.maps.*"
xmlns:mate="http://mate.asfusion.com/"
implements="org.bigbluebutton.common.IBigBlueButtonModule"
creationComplete="onCreationComplete()">
<maps:BroadcastEventMap id="broadcastEventMap" />
<mx:Script>
<![CDATA[
import com.asfusion.mate.events.Dispatcher;
import org.bigbluebutton.common.LogUtil;
private var _moduleName:String = "Broadcast Module";
private var _attributes:Object;
private var dispatcher:Dispatcher = new Dispatcher();
private function onCreationComplete():void {
LogUtil.debug("BrodcastModule Initialized");
}
public function get moduleName():String {
return _moduleName;
}
public function start(attributes:Object):void {
LogUtil.debug("***Starting BroadcastModule");
dispatcher.dispatchEvent(new Event("BroadcastModuleStartEvent"));
}
public function stop():void {
LogUtil.debug("Stop Broadcast Module");
}
]]>
</mx:Script>
</mx:Module>

View File

@ -34,7 +34,6 @@
<mx:Script>
<![CDATA[
import mx.controls.Image;
import org.bigbluebutton.modules.deskshare.events.CursorEvent;
import org.bigbluebutton.modules.deskshare.events.ViewStreamEvent;
import mx.controls.Button;

View File

@ -0,0 +1,59 @@
<?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 2.1 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/>.
Author: Felipe Cecagno <felipe@mconf.org>
$Id: $
-->
<mx:Module xmlns:mx="http://www.adobe.com/2006/mxml"
xmlns:maps="org.bigbluebutton.modules.notes.maps.*"
implements="org.bigbluebutton.common.IBigBlueButtonModule">
<maps:NotesEventMap id="notesEventMap" />
<mx:Script>
<![CDATA[
import com.asfusion.mate.events.Dispatcher;
import org.bigbluebutton.common.LogUtil;
import org.bigbluebutton.modules.notes.events.NotesModuleStartEvent;
private var _moduleName:String = "Layout Module";
private var _dispatcher:Dispatcher = new Dispatcher();
private function onCreationComplete():void {
LogUtil.debug(_moduleName + " initialized");
}
public function get moduleName():String {
return _moduleName;
}
public function start(attributes:Object):void {
_dispatcher.dispatchEvent(new NotesModuleStartEvent());
}
public function stop():void {
}
]]>
</mx:Script>
</mx:Module>

View File

@ -3,22 +3,20 @@
xmlns:maps="org.bigbluebutton.modules.videoconf.maps.*" implements="org.bigbluebutton.common.IBigBlueButtonModule">
<mx:Script>
<![CDATA[
import org.bigbluebutton.modules.videoconf.events.ShareCameraRequestEvent;
import com.asfusion.mate.events.Dispatcher;
import mx.controls.Alert;
import org.bigbluebutton.common.LogUtil;
import org.bigbluebutton.common.events.CloseWindowEvent;
import org.bigbluebutton.common.events.OpenWindowEvent;
import org.bigbluebutton.modules.videoconf.business.VideoProxy;
import org.bigbluebutton.modules.videoconf.events.CloseAllWindowsEvent;
import com.asfusion.mate.events.Dispatcher;
import org.bigbluebutton.common.LogUtil;
import org.bigbluebutton.common.events.CloseWindowEvent;
import org.bigbluebutton.common.events.OpenWindowEvent;
import org.bigbluebutton.modules.videoconf.business.VideoProxy;
import org.bigbluebutton.modules.videoconf.events.CloseAllWindowsEvent;
import org.bigbluebutton.modules.videoconf.events.ShareCameraRequestEvent;
import org.bigbluebutton.modules.videoconf.events.VideoModuleStartEvent;
import org.bigbluebutton.modules.videoconf.events.VideoModuleStopEvent;
private var _moduleName:String = "Videoconf Module";
private var _attributes:Object;
private var proxy:VideoProxy;
private var mockProxy:VideoProxy;
private function onCreationComplete():void {
LogUtil.debug("VideoconfModule initialized");
}
@ -38,15 +36,7 @@
public function get username():String {
return _attributes.username;
}
public function get connection():NetConnection {
return proxy.connection;
}
public function get mockConnection():NetConnection {
return mockProxy.connection;
}
public function get mode():String {
if (_attributes.mode == null) {
//_attributes.mode = "PLAYBACK"
@ -79,27 +69,16 @@
}
public function start(attributes:Object):void {
LogUtil.debug("Videoconf attr: " + attributes.username);
_attributes = attributes;
proxy = new VideoProxy(uri);
eventMap.module = this;
eventMap.proxy = proxy;
eventMap.addToolbarButton();
if (proxy.videoOptions.autoStart) {
var dispatcher:Dispatcher = new Dispatcher();
dispatcher.dispatchEvent(new ShareCameraRequestEvent());
}
trace("Starting Video Module");
var globalDispatcher:Dispatcher = new Dispatcher();
globalDispatcher.dispatchEvent(new VideoModuleStartEvent(VideoModuleStartEvent.START));
}
public function stop():void {
eventMap.stopModule();
var globalDispatcher:Dispatcher = new Dispatcher();
globalDispatcher.dispatchEvent(new VideoModuleStopEvent(VideoModuleStopEvent.STOP));
}
public function mockConnect():void {
mockProxy = new VideoProxy(proxy.connection.uri.substring(0, proxy.connection.uri.indexOf("video") + 5));
}
]]>
</mx:Script>

View File

@ -0,0 +1,168 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
BigBlueButton open source conferencing system - http://www.bigbluebutton.org
Copyright (c) 2010 BigBlueButton Inc. and by respective authors (see below).
BigBlueButton 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 2.1 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/>.
$Id: $
-->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
creationComplete="onCreationComplete()"
pageTitle="WebcamPreview" width="600" height="400" layout="absolute">
<mx:Script>
<![CDATA[
import mx.core.UIComponent;
import mx.utils.URLUtil;
[Bindable] private var defaultWidth:Number = 320;
[Bindable] private var defaultHeight:Number = 240;
private var _video:Video;
private var _videoHolder:UIComponent;
private var camIndex:int = 0;
private var camWidth:Number = 320;
private var camHeight:Number = 240;
private var _camera:Camera = null;
private var quality:Number = 0;
private var PADDING_HORIZONTAL:Number = 6;
private var PADDING_VERTICAL:Number = 29;
private var _minWidth:int = 160 + PADDING_HORIZONTAL;
private var _minHeight:int = 120 + PADDING_VERTICAL;
private var aspectRatio:Number = 1;
private function onCreationComplete():void{
_videoHolder = new UIComponent();
_videoHolder.width = camWidth;
_videoHolder.height = camHeight;
this.addChild(_videoHolder);
this.minWidth = _minWidth;
this.minHeight = _minHeight;
trace('WebcamPreviewSA::onCreationComplete');
Security.allowDomain(determineHTMLURL());
trace("WebcamPreviewSA:: Security.allowDomain(" + determineHTMLURL() + ");");
initExternalInterface();
// displayCamera("0", 30, 10, 0, 90);
}
private function determineHTMLURL():String {
var serverName:String = "*";
if(ExternalInterface.available) {
try {
var htmlURL:String = String(ExternalInterface.call("window.location.href.toString"));
serverName = URLUtil.getServerName(htmlURL);
trace("WebcamPreviewSA::determineHTMLURL HTML URL [" + htmlURL + "]");
} catch(s:Error) {
trace("WebcamPreviewSA::determineHTMLURL Cannot determine HTML URL");
}
}
return serverName;
}
private function initExternalInterface():void {
trace('WebcamPreviewSA::initExternalInterface');
if (ExternalInterface.available) {
ExternalInterface.addCallback("startPreviewCamera", handleStartPreviewCameraRequest);
ExternalInterface.addCallback("stopPreviewCamera", handleStopPreviewCamera);
}
}
private function handleStartPreviewCameraRequest(camIndex:String, camWidth:int, camHeight:int,
camKeyFrameInterval:int, camModeFps:Number,
camQualityBandwidth:int, camQualityPicture:int):void {
displayCamera(camIndex, camWidth, camHeight, camKeyFrameInterval, camModeFps, camQualityBandwidth, camQualityPicture);
}
private function handleStopPreviewCamera():void {
stopCamera();
}
public function displayCamera(camIndex:String, camWidth:int, camHeight:int, camKeyFrameInterval:int, camModeFps:Number, camQualityBandwidth:int, camQualityPicture:int):void {
trace('WebcamPreviewSA::displayCamera');
stopCamera();
if (Camera.names.length == 0) {
trace('WebcamPreviewSA::bbb.video.publish.hint.noCamera');
return;
}
_camera = Camera.getCamera(camIndex);
if (_camera == null) {
trace('WebcamPreviewSA::bbb.video.publish.hint.cantOpenCamera');
return;
}
setResolution(camWidth, camHeight);
_camera.setMotionLevel(5, 1000);
_camera.setKeyFrameInterval(camKeyFrameInterval);
_camera.setMode(camWidth, camHeight, camModeFps);
_camera.setQuality(camQualityBandwidth, camQualityPicture);
if (_camera.width != camWidth || _camera.height != camHeight) {
trace("WebcamPreviewSA::Resolution " + camWidth + "x" + camHeight + " is not supported, using " + _camera.width + "x" + _camera.height + " instead");
setResolution(_camera.width, _camera.height);
}
_video = new Video;
_video.attachCamera(_camera);
if (aspectRatio > _videoHolder.width / _videoHolder.height) {
_video.width = _videoHolder.width;
_video.height = _videoHolder.width / aspectRatio;
_video.x = 0;
_video.y = (_videoHolder.height - _video.height) / 2;
} else {
_video.width = _videoHolder.height * aspectRatio;
_video.height = _videoHolder.height;
_video.x = (_videoHolder.width - _video.width) / 2;
_video.y = 0;
}
_videoHolder.addChild(_video);
}
private function stopCamera():void {
_camera = null;
if (_video != null) {
_videoHolder.removeChild(_video);
_video.attachCamera(null);
_video.clear();
_video = null;
}
}
private function setResolution(width:int, height:int):void {
camWidth = width;
camHeight = height;
setAspectRatio(camWidth, camHeight);
}
private function setAspectRatio(width:int, height:int):void {
aspectRatio = (width/height);
this.minHeight = Math.floor((this.minWidth - PADDING_HORIZONTAL) / aspectRatio) + PADDING_VERTICAL;
}
]]>
</mx:Script>
</mx:Application>

View File

@ -0,0 +1,249 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
BigBlueButton open source conferencing system - http://www.bigbluebutton.org
Copyright (c) 2010 BigBlueButton Inc. and by respective authors (see below).
BigBlueButton 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 2.1 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/>.
$Id: $
-->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
creationComplete="onCreationComplete()"
pageTitle="WebcamView" width="600" height="400" layout="absolute">
<mx:Script>
<![CDATA[
import flash.net.NetConnection;
import mx.core.UIComponent;
import mx.utils.URLUtil;
private var _video:Video;
private var _videoHolder:UIComponent;
private var ns:NetStream;
private var nc:NetConnection;
private var PADDING_HORIZONTAL:Number = 6;
private var PADDING_VERTICAL:Number = 29;
private var _minWidth:int = 160 + PADDING_HORIZONTAL;
private var _minHeight:int = 120 + PADDING_VERTICAL;
private var aspectRatio:Number = 1;
private var camWidth:Number = 320;
private var camHeight:Number = 240;
private var _url:String;
private var _stream:String;
private var smoothVideo:Boolean = false;
private var applyConvolutionFilter:Boolean = false;
private var convolutionFilter:Array = [-1, 0, -1, 0, 6, 0, -1, 0, -1];
private var filterBias:Number = 0;
private var filterDivisor:Number = 4;
private var enableH264:Boolean = false;
private var h264Level:String = "2.1";
private var h264Profile:String = "main";
private function onCreationComplete():void{
_videoHolder = new UIComponent();
_videoHolder.width = camWidth;
_videoHolder.height = camHeight;
this.addChild(_videoHolder);
this.minWidth = _minWidth;
this.minHeight = _minHeight;
Security.allowDomain(determineHTMLURL());
trace("WebcamViewSA:: Security.allowDomain(" + determineHTMLURL() + ");");
initExternalInterface();
}
private function determineHTMLURL():String {
var serverName:String = "*";
if(ExternalInterface.available) {
try {
var htmlURL:String = String(ExternalInterface.call("window.location.href.toString"));
serverName = URLUtil.getServerName(htmlURL);
trace("WebcamViewSA::determineHTMLURL HTML URL [" + htmlURL + "]");
} catch(s:Error) {
trace("WebcamViewSA::determineHTMLURL Cannot determine HTML URL");
}
}
return serverName;
}
private function initExternalInterface():void {
trace('WebcamViewSA::initExternalInterface');
if (ExternalInterface.available) {
ExternalInterface.addCallback("startViewCameraStream", handleStartViewCameraRequest);
ExternalInterface.addCallback("stopViewCameraStream", handleStopViewCamera);
}
}
private function connect(url:String):void {
nc = new NetConnection();
nc.client = this;
nc.addEventListener(AsyncErrorEvent.ASYNC_ERROR, onAsyncError);
nc.addEventListener(IOErrorEvent.IO_ERROR, onIOError);
nc.addEventListener(NetStatusEvent.NET_STATUS, onNetConnectStatus);
nc.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError);
nc.connect(url);
}
public function onBWCheck(... rest):Number {
return 0;
}
public function onBWDone(... rest):void {
var p_bw:Number;
if (rest.length > 0) p_bw = rest[0];
// your application should do something here
// when the bandwidth check is complete
trace("WebcamViewSA:: bandwidth = " + p_bw + " Kbps.");
}
private function getVideoResolution(stream:String):Array {
var pattern:RegExp = new RegExp("(\\d+x\\d+)-([A-Za-z0-9]+)-\\d+", "");
if (pattern.test(stream)) {
trace("WebcamViewSA:: The stream name is well formatted [" + stream + "]");
trace("WebcamViewSA:: Stream resolution is [" + pattern.exec(stream)[1] + "]");
trace("WebcamViewSA:: Userid [" + pattern.exec(stream)[2] + "]");
return pattern.exec(stream)[1].split("x");
} else {
trace("WebcamViewSA:: The stream name doesn't follow the pattern <width>x<height>-<userId>-<timestamp>. Using 320x240 resolution.");
return "320x240".split("x");
}
}
private function onIOError(event:NetStatusEvent):void{
}
private function onNetConnectStatus(event:NetStatusEvent):void{
switch(event.info.code){
case "NetConnection.Connect.Success":
playWebcamStream();
break;
default:
trace("WebcamViewSA:: [" + event.info.code + "] for [" + _url + "]");
break;
}
}
private function onSecurityError(event:NetStatusEvent):void{
}
private function handleStartViewCameraRequest(url:String, stream:String):void {
_url = url;
_stream = stream;
connect(url);
}
private function handleStopViewCamera():void {
stopViewing();
}
private function stopViewing():void {
if (_video != null) {
trace("WebcamViewSA:: removing video from holder");
_videoHolder.removeChild(_video);
_video.clear();
_video = null;
}
_videoHolder.visible = false;
trace("WebcamViewSA:: closing stream");
ns.close();
}
private function playWebcamStream():void {
ns = new NetStream(nc);
ns.addEventListener( NetStatusEvent.NET_STATUS, onNetStatus );
ns.addEventListener(AsyncErrorEvent.ASYNC_ERROR, onAsyncError);
ns.client = this;
ns.bufferTime = 0;
ns.receiveVideo(true);
ns.receiveAudio(false);
var res:Array = getVideoResolution(_stream);
if (res == null) // error
return;
_video = new Video(Number(res[0]), Number(res[1]));
_video.width = Number(res[0]);
_video.height = Number(res[1]);
trace("WebcamViewSA:: resolution [" + _video.width + "," + _video.height + "]");
setAspectRatio(Number(res[0]), Number(res[1]));
_video.attachNetStream(ns);
_video.smoothing = smoothVideo;
if (applyConvolutionFilter) {
var filter:ConvolutionFilter = new flash.filters.ConvolutionFilter();
filter.matrixX = 3;
filter.matrixY = 3;
filter.matrix = convolutionFilter;
filter.bias = filterBias;
filter.divisor = filterDivisor;
_video.filters = [filter];
}
trace("WebcamViewSA:: adding video to video holder");
_videoHolder.addChild(_video);
_videoHolder.visible = true;
ns.play(_stream);
}
private function onAsyncError(e:AsyncErrorEvent):void{
trace("WebcamViewSA::asyncerror " + e.toString());
}
public function onMetaData(info:Object):void{
trace("WebcamViewSA:: metadata: width=" + info.width + " height=" + info.height);
_video.width = info.width;
_video.height = info.height;
setAspectRatio(info.width, info.height);
}
private function onNetStatus(e:NetStatusEvent):void{
switch(e.info.code){
case "NetStream.Publish.Start":
trace("WebcamViewSA:: NetStream.Publish.Start");
break;
case "NetStream.Play.UnpublishNotify":
trace("WebcamViewSA:: NetStream.Play.UnpublishNotify");
stopViewing();
break;
case "NetStream.Play.Start":
trace("WebcamViewSA:: Netstatus: " + e.info.code);
break;
case "NetStream.Play.FileStructureInvalid":
trace("WebcamViewSA:: The MP4's file structure is invalid.");
break;
case "NetStream.Play.NoSupportedTrackFound":
trace("WebcamViewSA:: The MP4 doesn't contain any supported tracks");
break;
}
}
private function setAspectRatio(width:int, height:int):void {
aspectRatio = (width/height);
this.minHeight = Math.floor((this.minWidth - PADDING_HORIZONTAL) / aspectRatio) + PADDING_VERTICAL;
}
]]>
</mx:Script>
</mx:Application>

Binary file not shown.

After

Width:  |  Height:  |  Size: 439 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 398 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 562 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 430 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 416 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 290 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 376 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 292 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 268 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 345 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 365 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 269 B

View File

@ -1,173 +0,0 @@
Application
{
backgroundColors: #000000,#3f3f3f;
backgroundImage: Embed(source="assets/img/bk3.jpg");
backgroundSize: "100%";
backgroundGradientColors: #B4BFCF, #78829C;
themeColor: #0094C7;
backgroundGradientAlphas: 0.62, 0.26;
}
MDICanvas
{
backgroundColor: #0094C7;
backgroundAlpha: 0;
}
Button
{
highlightAlphas: 1, 0.33;
fillAlphas: 1, 0.16, 0.18, 1;
fillColors: #5f89b9, #697182, #ffffff, #eeeeee;
}
.mdiWindowFocus
{
headerHeight: 26;
roundedBottomCorners: true;
backgroundAlpha: 1;
backgroundColor: #FFFFFF;
backgroundImage: Embed(source="assets/swf/Blue.swf", symbol="Window_Background");
backgroundSize: '100%';
borderStyle: solid;
borderColor: #ffffff;
borderAlpha: 1;
borderThickness: 2;
borderThicknessLeft: 0;
borderThicknessTop: 0;
borderThicknessBottom: 0;
borderThicknessRight: 0;
cornerRadius: 4;
dropShadowEnabled: false;
titleStyleName: "mypanelTitle";
cornerResizeImg: Embed(source="assets/swf/Blue.swf", symbol="Corner_Resize");
cornerResizeWidth: 15;
cornerResizeHeight: 15;
cornerResizePaddingRight: 2;
cornerResizePaddingBottom: 2;
controlButtonWidth: 10;
controlButtonHeight: 10;
controlButtonGap: 4;
}
.mdiWindowNoFocus
{
headerHeight: 26;
roundedBottomCorners: true;
backgroundAlpha: 0.5;
backgroundImage: Embed(source="assets/swf/Blue.swf", symbol="Window_Background");
backgroundSize: '100%';
borderStyle: solid;
borderColor: #ffffff;
borderAlpha: 1;
borderThickness: 2;
borderThicknessLeft: 0;
borderThicknessTop: 0;
borderThicknessBottom: 0;
borderThicknessRight: 0;
cornerRadius: 4;
dropShadowEnabled: false;
titleStyleName: "mypanelTitle";
cornerResizeImg: Embed(source="assets/swf/Blue.swf", symbol="Corner_Resize");
cornerResizeWidth: 15;
cornerResizeHeight: 15;
cornerResizePaddingRight: 2;
cornerResizePaddingBottom: 2;
controlButtonWidth: 10;
controlButtonHeight: 10;
controlButtonGap: 4;
}
.mypanelTitle
{
fontFamily: Arial;
fontSize: 12;
fontWeight: bold;
color: #ffffff;
}
.closeBtnFocus
{
upSkin: Embed('assets/img/3_closeButton.png');
overSkin: Embed('assets/img/3_closeButton.png');
downSkin: Embed('assets/img/3_closeButton.png');
disabledSkin: Embed('assets/img/3_closeButton.png');
}
.closeBtnNoFocus
{
upSkin: Embed('assets/img/3_closeButton.png');
overSkin: Embed('assets/img/3_closeButton.png');
downSkin: Embed('assets/img/3_closeButton.png');
disabledSkin: Embed('assets/img/3_closeButton.png');
}
.increaseBtnFocus
{
upSkin: Embed('assets/img/3_increaseButton.png');
overSkin: Embed('assets/img/3_increaseButton.png');
downSkin: Embed('assets/img/3_increaseButton.png');
disabledSkin: Embed('assets/img/3_increaseButton.png');
}
.increaseBtnNoFocus
{
upSkin: Embed('assets/img/3_increaseButton.png');
overSkin: Embed('assets/img/3_increaseButton.png');
downSkin: Embed('assets/img/3_increaseButton.png');
disabledSkin: Embed('assets/img/3_increaseButton.png');
}
.decreaseBtnFocus
{
upSkin: Embed('assets/img/3_decreaseButton.png');
overSkin: Embed('assets/img/3_decreaseButton.png');
downSkin: Embed('assets/img/3_decreaseButton.png');
disabledSkin: Embed('assets/img/3_decreaseButton.png');
}
.decreaseBtnNoFocus
{
upSkin: Embed('assets/img/3_decreaseButton.png');
overSkin: Embed('assets/img/3_decreaseButton.png');
downSkin: Embed('assets/img/3_decreaseButton.png');
disabledSkin: Embed('assets/img/3_decreaseButton.png');
}
.minimizeBtnFocus
{
upSkin: Embed('assets/img/3_minimizeButton.png');
overSkin: Embed('assets/img/3_minimizeButton.png');
downSkin: Embed('assets/img/3_minimizeButton.png');
disabledSkin: Embed('assets/img/3_minimizeButton.png');
}
.minimizeBtnNoFocus
{
upSkin: Embed('assets/img/3_minimizeButton.png');
overSkin: Embed('assets/img/3_minimizeButton.png');
downSkin: Embed('assets/img/3_minimizeButton.png');
disabledSkin: Embed('assets/img/3_minimizeButton.png');
}
.resizeHndlr
{
upSkin: Embed('assets/img/resizeHandler.png');
overSkin: Embed('assets/img/resizeHandler.png');
downSkin: Embed('assets/img/resizeHandler.png');
disabledSkin: Embed('assets/img/resizeHandler.png');
}

View File

@ -1,100 +0,0 @@
Application
{
backgroundImage: Embed(source="assets/img/BrushedMetalBack.jpg");
backgroundSize: "100%";
themeColor: #999999;
fontFamily: Arial;
paddingLeft:10; paddingRight:10; paddingTop:10; paddingBottom:10;
}
.mdiWindowFocus
{
borderStyle: solid;
borderColor: #FFFFFF;
borderAlpha: 0;
borderThickness: 1;
borderThicknessLeft: 5;
borderThicknessTop: 5;
borderThicknessBottom: 15;
borderThicknessRight: 5;
roundedBottomCorners: true;
cornerRadius: 5;
headerHeight: 27;
backgroundAlpha: 1;
backgroundColor: #FFFFFF;
backgroundImage: Embed(source="assets/swf/BrushedMetal.swf", symbol="Window_Background");
backgroundSize: "100%";
dropShadowEnabled: true;
cornerResizeImg: Embed(source="assets/swf/BrushedMetal.swf", symbol="Corner_Resize");
cornerResizeWidth: 12;
cornerResizeHeight: 12;
cornerResizePaddingRight: 2;
cornerResizePaddingBottom: 2;
titleStyleName: "mypanelTitle";
titleBackgroundSkin: Embed(source="assets/swf/BrushedMetal.swf", symbol="header");
controlButtonWidth: 10;
controlButtonHeight: 10;
controlButtonGap: 8;
}
.mdiWindowNoFocus
{
borderStyle: solid;
borderColor: #FFFFFF;
borderAlpha: 0;
borderThickness: 1;
borderThicknessLeft: 5;
borderThicknessTop: 5;
borderThicknessBottom: 15;
borderThicknessRight: 5;
roundedBottomCorners: true;
cornerRadius: 5;
headerHeight: 27;
backgroundAlpha: 1;
backgroundColor: #FFFFFF;
backgroundImage: Embed(source="assets/swf/BrushedMetal.swf", symbol="Window_Background");
backgroundSize: "100%";
dropShadowEnabled: true;
cornerResizeImg: Embed(source="assets/swf/BrushedMetal.swf", symbol="Corner_Resize");
cornerResizeWidth: 12;
cornerResizeHeight: 12;
cornerResizePaddingRight: 2;
cornerResizePaddingBottom: 2;
titleStyleName: "mypanelTitle";
titleBackgroundSkin: Embed(source="assets/swf/BrushedMetal.swf", symbol="header");
controlButtonWidth: 10;
controlButtonHeight: 10;
controlButtonGap: 8;
}
.mypanelTitle {
fontSize: 12;
fontWeight: bold;
color: #000000;
}
Button {
fillColors: #ffffff, #999999, #ffffff, #eeeeee;
themeColor: #999999;
}

View File

@ -1,83 +0,0 @@
Application
{
background-image: Embed(source="assets/img/wallpaperOS9.gif");
}
MDIWindow
{
titleStyleName: "macTitle";
}
.macTitle
{
fontFamily: Georgia;
fontSize: 12;
fontWeight: normal;
color: #000000;
}
.mdiWindowFocus
{
borderColor: #CCCCCC;
borderAlpha: 1;
borderThicknessLeft: 2;
borderThicknessTop: 0;
borderThicknessBottom: 2;
borderThicknessRight: 2;
roundedBottomCorners: false;
cornerRadius: 5;
dropShadowEnabled: false;
headerHeight: 29;
backgroundAlpha: 1;
backgroundColor: #FFFFFF;
titleBackgroundSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="macHeaderFocus");
}
.mdiWindowNoFocus
{
borderColor: #CCCCCC;
borderAlpha: 1;
borderThicknessLeft: 2;
borderThicknessTop: 0;
borderThicknessBottom: 2;
borderThicknessRight: 2;
roundedBottomCorners: false;
cornerRadius: 5;
dropShadowEnabled: false;
headerHeight: 29;
backgroundAlpha: 1;
backgroundColor: #FFFFFF;
titleBackgroundSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="macHeaderNoFocus");
}
.mdiWindowMinimizeBtn
{
upSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="minimizeBtnOS9");
overSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="minimizeBtnOS9");
downSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="minimizeBtnOS9");
disabledSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="minimizeBtnOS9");
}
.mdiWindowMaximizeBtn
{
upSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="maxRestoreBtnOS9");
overSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="maxRestoreBtnOS9");
downSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="maxRestoreBtnOS9");
disabledSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="maxRestoreBtnOS9");
}
.mdiWindowRestoreBtn
{
upSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="maxRestoreBtnOS9");
overSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="maxRestoreBtnOS9");
downSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="maxRestoreBtnOS9");
disabledSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="maxRestoreBtnOS9");
}
.mdiWindowCloseBtn
{
upSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="closeBtnOS9");
overSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="closeBtnOS9");
downSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="closeBtnOS9");
disabledSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="closeBtnOS9");
}

View File

@ -1,143 +0,0 @@
/*
Copyright (c) 2007 FlexLib Contributors. See:
http://code.google.com/p/flexlib/wiki/ProjectContributors
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
Application
{
background-image: Embed(source="assets/img/wallpaperWin.jpg");
}
MDIWindow
{
titleStyleName: "winXPTitleStyle";
minimizeBtnStyleNameNoFocus: "mdiWindowMinimizeBtnNoFocus";
maximizeBtnStyleNameNoFocus: "mdiWindowMaximizeBtnNoFocus";
restoreBtnStyleNameNoFocus: "mdiWindowRestoreBtnNoFocus";
closeBtnStyleNameNoFocus: "mdiWindowCloseBtnNoFocus";
}
.winXPTitleStyle
{
fontFamily: Verdana;
fontSize: 12;
fontWeight: normal;
color: #FFFFFF;
}
.mdiWindowFocus
{
borderColor: #0053E1;
borderAlpha: 1;
borderThicknessLeft: 2;
borderThicknessTop: 0;
borderThicknessBottom: 2;
borderThicknessRight: 2;
roundedBottomCorners: false;
cornerRadius: 5;
dropShadowEnabled: false;
headerHeight: 29;
backgroundAlpha: 1;
backgroundColor: #FFFFFF;
titleBackgroundSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="headerBgDefault");
}
.mdiWindowNoFocus
{
borderColor: #7B97E0;
borderAlpha: 1;
borderThicknessLeft: 2;
borderThicknessTop: 0;
borderThicknessBottom: 2;
borderThicknessRight: 2;
roundedBottomCorners: false;
cornerRadius: 5;
dropShadowEnabled: false;
headerHeight: 29;
backgroundAlpha: 1;
backgroundColor: #FFFFFF;
titleBackgroundSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="headerBgDefaultNoFocus");
}
.mdiWindowMinimizeBtn
{
upSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="minimizeBtnDefault_up");
overSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="minimizeBtnDefault_over");
downSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="minimizeBtnDefault_down");
disabledSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="minimizeBtnDefaultNoFocus");
}
.mdiWindowMinimizeBtnNoFocus
{
upSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="minimizeBtnDefaultNoFocus");
overSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="minimizeBtnDefaultNoFocus");
downSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="minimizeBtnDefaultNoFocus");
disabledSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="minimizeBtnDefaultNoFocus");
}
.mdiWindowMaximizeBtn
{
upSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="maximizeBtnDefault_up");
overSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="maximizeBtnDefault_over");
downSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="maximizeBtnDefault_down");
disabledSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="maximizeBtnDefaultNoFocus");
}
.mdiWindowMaximizeBtnNoFocus
{
upSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="maximizeBtnDefaultNoFocus");
overSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="maximizeBtnDefaultNoFocus");
downSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="maximizeBtnDefaultNoFocus");
disabledSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="maximizeBtnDefaultNoFocus");
}
.mdiWindowRestoreBtn
{
upSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="restoreBtnDefault_up");
overSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="restoreBtnDefault_over");
downSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="restoreBtnDefault_down");
disabledSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="restoreBtnDefaultNoFocus");
}
.mdiWindowRestoreBtnNoFocus
{
upSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="restoreBtnDefaultNoFocus");
overSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="restoreBtnDefaultNoFocus");
downSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="restoreBtnDefaultNoFocus");
disabledSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="restoreBtnDefaultNoFocus");
}
.mdiWindowCloseBtn
{
upSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="closeBtnDefault_up");
overSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="closeBtnDefault_over");
downSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="closeBtnDefault_down");
disabledSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="closeBtnDefaultNoFocus");
}
.mdiWindowCloseBtnNoFocus
{
upSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="closeBtnDefaultNoFocus");
overSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="closeBtnDefaultNoFocus");
downSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="closeBtnDefaultNoFocus");
disabledSkin: Embed(source="assets/swf/WindowsAssets.swf", symbol="closeBtnDefaultNoFocus");
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 220 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 210 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 230 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 250 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 83 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 84 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 84 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 97 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

View File

@ -1,6 +0,0 @@
/*The image for your logo is 200x200 pixels. No other size is currently supported so resize your logo accordingly. The logo will always appear in the lower right corner. */
BrandingLogo
{
backgroundImage: Embed(source="assets/img/BBBLogo.png");
backgroundSize: "100%";
}

View File

@ -1,180 +0,0 @@
Application
{
backgroundColors: #000000,#3f3f3f;
backgroundImage: Embed(source="assets/img/bk3.jpg");
backgroundSize: "100%";
backgroundGradientColors: #B4BFCF, #78829C;
themeColor: #0094C7;
backgroundGradientAlphas: 0.62, 0.26;
}
/*The image for your logo is 200x200 pixels. No other size is currently supported so resize your logo accordingly. The logo will always appear in the lower right corner. */
BrandingLogo
{
backgroundImage: Embed(source="assets/img/BBBLogo.png");
backgroundSize: "100%";
}
MDICanvas
{
backgroundColor: #0094C7;
backgroundAlpha: 0;
}
Button
{
highlightAlphas: 1, 0.33;
fillAlphas: 1, 0.16, 0.18, 1;
fillColors: #5f89b9, #697182, #ffffff, #eeeeee;
}
.mdiWindowFocus
{
headerHeight: 26;
roundedBottomCorners: true;
backgroundAlpha: 1;
backgroundColor: #FFFFFF;
backgroundImage: Embed(source="assets/swf/Blue.swf", symbol="Window_Background");
backgroundSize: '100%';
borderStyle: solid;
borderColor: #ffffff;
borderAlpha: 1;
borderThickness: 2;
borderThicknessLeft: 0;
borderThicknessTop: 0;
borderThicknessBottom: 0;
borderThicknessRight: 0;
cornerRadius: 4;
dropShadowEnabled: false;
titleStyleName: "mypanelTitle";
cornerResizeImg: Embed(source="assets/swf/Blue.swf", symbol="Corner_Resize");
cornerResizeWidth: 15;
cornerResizeHeight: 15;
cornerResizePaddingRight: 2;
cornerResizePaddingBottom: 2;
controlButtonWidth: 10;
controlButtonHeight: 10;
controlButtonGap: 4;
}
.mdiWindowNoFocus
{
headerHeight: 26;
roundedBottomCorners: true;
backgroundAlpha: 0.5;
backgroundImage: Embed(source="assets/swf/Blue.swf", symbol="Window_Background");
backgroundSize: '100%';
borderStyle: solid;
borderColor: #ffffff;
borderAlpha: 1;
borderThickness: 2;
borderThicknessLeft: 0;
borderThicknessTop: 0;
borderThicknessBottom: 0;
borderThicknessRight: 0;
cornerRadius: 4;
dropShadowEnabled: false;
titleStyleName: "mypanelTitle";
cornerResizeImg: Embed(source="assets/swf/Blue.swf", symbol="Corner_Resize");
cornerResizeWidth: 15;
cornerResizeHeight: 15;
cornerResizePaddingRight: 2;
cornerResizePaddingBottom: 2;
controlButtonWidth: 10;
controlButtonHeight: 10;
controlButtonGap: 4;
}
.mypanelTitle
{
fontFamily: Arial;
fontSize: 12;
fontWeight: bold;
color: #ffffff;
}
.closeBtnFocus
{
upSkin: Embed('assets/img/3_closeButton.png');
overSkin: Embed('assets/img/3_closeButton.png');
downSkin: Embed('assets/img/3_closeButton.png');
disabledSkin: Embed('assets/img/3_closeButton.png');
}
.closeBtnNoFocus
{
upSkin: Embed('assets/img/3_closeButton.png');
overSkin: Embed('assets/img/3_closeButton.png');
downSkin: Embed('assets/img/3_closeButton.png');
disabledSkin: Embed('assets/img/3_closeButton.png');
}
.increaseBtnFocus
{
upSkin: Embed('assets/img/3_increaseButton.png');
overSkin: Embed('assets/img/3_increaseButton.png');
downSkin: Embed('assets/img/3_increaseButton.png');
disabledSkin: Embed('assets/img/3_increaseButton.png');
}
.increaseBtnNoFocus
{
upSkin: Embed('assets/img/3_increaseButton.png');
overSkin: Embed('assets/img/3_increaseButton.png');
downSkin: Embed('assets/img/3_increaseButton.png');
disabledSkin: Embed('assets/img/3_increaseButton.png');
}
.decreaseBtnFocus
{
upSkin: Embed('assets/img/3_decreaseButton.png');
overSkin: Embed('assets/img/3_decreaseButton.png');
downSkin: Embed('assets/img/3_decreaseButton.png');
disabledSkin: Embed('assets/img/3_decreaseButton.png');
}
.decreaseBtnNoFocus
{
upSkin: Embed('assets/img/3_decreaseButton.png');
overSkin: Embed('assets/img/3_decreaseButton.png');
downSkin: Embed('assets/img/3_decreaseButton.png');
disabledSkin: Embed('assets/img/3_decreaseButton.png');
}
.minimizeBtnFocus
{
upSkin: Embed('assets/img/3_minimizeButton.png');
overSkin: Embed('assets/img/3_minimizeButton.png');
downSkin: Embed('assets/img/3_minimizeButton.png');
disabledSkin: Embed('assets/img/3_minimizeButton.png');
}
.minimizeBtnNoFocus
{
upSkin: Embed('assets/img/3_minimizeButton.png');
overSkin: Embed('assets/img/3_minimizeButton.png');
downSkin: Embed('assets/img/3_minimizeButton.png');
disabledSkin: Embed('assets/img/3_minimizeButton.png');
}
.resizeHndlr
{
upSkin: Embed('assets/img/resizeHandler.png');
overSkin: Embed('assets/img/resizeHandler.png');
downSkin: Embed('assets/img/resizeHandler.png');
disabledSkin: Embed('assets/img/resizeHandler.png');
}

View File

@ -21,6 +21,33 @@ package org.bigbluebutton.common
[Bindable]
public class Images
{
[Embed(source="assets/images/webcam_kickuser.png")]
public var webcam_kickuser:Class;
[Embed(source="assets/images/webcam_make_presenter.png")]
public var webcam_make_presenter:Class;
[Embed(source="assets/images/webcam_mute.png")]
public var webcam_mute:Class;
[Embed(source="assets/images/webcam_private_chat.png")]
public var webcam_private_chat:Class;
[Embed(source="assets/images/webcam_unmute.png")]
public var webcam_unmute:Class;
[Embed(source="assets/images/vdoc_bg.jpg")]
public var video_dock_bg:Class;
[Embed(source="assets/images/bandwidth.png")]
public var bandwidth:Class;
[Embed(source="assets/images/statistics.png")]
public var stats:Class;
[Embed(source="assets/images/avatar.png")]
public var avatar:Class;
[Embed(source="assets/images/sign-out.png")]
public var signOutIcon:Class;
@ -91,7 +118,7 @@ package org.bigbluebutton.common
public var sound:Class;
[Embed(source="assets/images/cancel.png")]
public var cancel_user:Class;
public var cancel:Class;
[Embed(source="assets/images/user_go.png")]
public var eject_user:Class;
@ -108,19 +135,19 @@ package org.bigbluebutton.common
[Embed(source="assets/images/shape_square.png")]
public var square_icon:Class;
[Embed(source="assets/images/arrow_undo.png")]
[Embed(source="assets/images/undo.png")]
public var undo_icon:Class;
[Embed(source="assets/images/hand_icon.png")]
[Embed(source="assets/images/hand.png")]
public var hand_icon:Class;
[Embed(source="assets/images/scribble_icon.png")]
[Embed(source="assets/images/marker.png")]
public var scribble_icon:Class;
[Embed(source="assets/images/text_icon.png")]
[Embed(source="assets/images/text.png")]
public var text_icon:Class;
[Embed(source="assets/images/circle.png")]
[Embed(source="assets/images/ellipse.png")]
public var circle_icon:Class;
[Embed(source="assets/images/arrow_out.png")]
@ -144,7 +171,7 @@ package org.bigbluebutton.common
[Embed(source="assets/images/table.png")]
public var table:Class;
[Embed(source="assets/images/cancel.png")]
[Embed(source="assets/images/trash.png")]
public var delete_icon:Class;
[Embed(source="assets/images/arrow_right.png")]
@ -223,7 +250,7 @@ package org.bigbluebutton.common
[Embed(source="assets/images/pointer_icon_small.png")]
public var select_icon:Class;
[Embed(source="assets/images/triangle_icon.png")]
[Embed(source="assets/images/triangle.png")]
public var triangle_icon:Class;
[Embed(source="assets/images/text_background_icon.png")]

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 880 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 442 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 475 B

Some files were not shown because too many files have changed in this diff Show More