You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2017/05/18 05:36:27 UTC
[20/26] openmeetings git commit: Normalize all the line endings
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-flash/src/main/swf/video/baseVideoObject.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf/video/baseVideoObject.lzx b/openmeetings-flash/src/main/swf/video/baseVideoObject.lzx
index 676f9cf..d58daa5 100644
--- a/openmeetings-flash/src/main/swf/video/baseVideoObject.lzx
+++ b/openmeetings-flash/src/main/swf/video/baseVideoObject.lzx
@@ -1,721 +1,721 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
-
--->
-<library>
-
-
- <!--- Base container for a client, can be either: a remote-video (subscribing/playing a video) or a self-video (broadcasting
- a cam/mic) -->
- <class name="baseVideoObject" extends="view" bgcolor="0x000000" width="122" height="101">
-
- <switch>
- <when property="$as3">
- <passthrough>
- import flash.filters.DropShadowFilter;
- import flash.media.*
- import flash.net.SharedObject;
- </passthrough>
- </when>
- </switch>
-
- <!--- @keywords private -->
- <attribute name="chatpartnername" value="" type="string" />
- <!--- @keywords private -->
- <attribute name="showUserProfilePic" type="boolean" value="false" />
-
- <!--- color of this user, this is the color the user will also use for his chat-color -->
- <attribute name="usercolor" value="0" type="number" />
-
- <!--- publicSID is a hash-value to identify a user -->
- <attribute name="publicSID" value="" type="string" />
-
- <!--- micMuted indicates if the microphone is currently turned sound or gain to 0 -->
- <attribute name="micMuted" value="false" type="boolean" />
-
- <!--- @keywords private -->
- <attribute name="isremote" value="true" type="boolean" />
-
- <!--- @keywords private -->
- <attribute name="clientVars" value="null" />
-
- <!--- @keywords private -->
- <attribute name="isResizing" value="false" type="boolean" />
-
- <!--- @keywords private -->
- <attribute name="isInterview" value="false" type="boolean" />
-
- <attribute name="respectRatio" value="true" type="boolean" />
-
- <attribute name="minimized" value="false" type="boolean" />
-
- <attribute name="custom" value="false" type="boolean" />
-
- <attribute name="initH" value="40" type="number" />
- <attribute name="initW" value="40" type="number" />
-
- <attribute name="isShowMicMute" value="false" type="boolean" />
-
- <attribute name="isMutedByModerator" value="false" type="boolean" />
-
- <attribute name="isMicrophonesRoom" value="false" type="boolean" />
-
- <attribute name="lastPositiveVolume" type="number" value="50" />
-
- <!-- Initial stream ratio: width / height -->
- <attribute name="initRatio" type="number" value="null" />
- <attribute name="initialHeight" value="$once{ this.height }" type="number" />
-
- <handler name="onisremote" args="r">
- this.isremote = r;
- </handler>
-
- <handler name="oninit">
- <![CDATA[
- this.clientVars = new Array();
- this.clientVars['User']='No User Connected';
-
- if (this.isInterview) {
- this._toolbar._minimize.setAttribute("visibility","hidden");
- this._resizeview.setAttribute("visibility","hidden");
- this._innerbottom.setAttribute("visibility","hidden");
- return;
- }
-
- if (this.custom) {
- this._toolbar._minimize.setAttribute("visibility","hidden");
- this._resizeview.setAttribute("visibility","hidden");
- this._toolbar.setAttribute("visibility","hidden");
- this._resizeview.setAttribute("visibility","hidden");
- this._loudness.setAttribute("visibility","hidden");
- this._innertop.setAttribute("visibility","hidden");
- this._innerbottom.setAttribute("visibility","hidden");
- }
- this.setShadow();
-
- if (this.publicSID == canvas.publicSID) {
- this._toolbar._resync._tip.setAttribute("labelid",610);
- }
- this._giveExclusiveAudioView.bringToFront();
-
- this.isMicrophonesRoom = canvas.currentRoomObj.showMicrophoneStatus;
- if (isMicrophonesRoom) {
- this._innertop.setAttribute("bgcolor", "0xFF6600");
- this._innerbottom.setAttribute("bgcolor", "0xFF6600");
- } else {
- this._innerbottom.setAttribute("visibility", "hidden");
- }
- ]]>
- </handler>
-
- <handler name="ony">
- <![CDATA[
- if (this.isInterview || this.custom || canvas.currentRoomObj.hideWhiteboard) {
- return;
- }
- var bounds = this.getBounds();
- var parentBounds = canvas.getBounds();
- if (bounds.y < 0) {
- this.setAttribute('y',0);
- }
- if (bounds.y > (parentBounds.height - bounds.height)) {
- this.setAttribute('y', parentBounds.height - bounds.height );
- }
- ]]>
- </handler>
-
- <handler name="onx">
- <![CDATA[
- if (this.isInterview || this.custom) {
- return;
- }
-
- var bounds = this.getBounds();
- var parentBounds = canvas.getBounds();
- if (bounds.x < 0) {
- this.setAttribute('x',0);
- }
-
- if (bounds.x > (parentBounds.width - bounds.width)) {
- this.setAttribute('x', parentBounds.width - bounds.width );
- }
- ]]>
- </handler>
-
- <method name="setShadow">
- <![CDATA[
- if (this.isinited){
- this.normalMC = this.getDisplayObject();
- //if($debug) Debug.write(this.normalMC);
- //if($debug) Debug.write("this.normalMC: ",this.normalMC);
- //if($debug) Debug.write("this: ",this);
- this.displacementMap = new flash.filters.DropShadowFilter();
- this.normalMC.filters = [this.displacementMap];
- }
- ]]>
- </method>
-
- <!-- respect ratio and keep minimum width / height -->
- <method name="setItemContraintsWidth" args="unused">
- <![CDATA[
- if (!this.respectRatio) {
- return;
- }
- var h=this.width * this.initH/this.initW;
- h=((h < this.initH ) ? initH : h);
-
- if ($debug) Debug.write("setItemContraintsWidth",this.respectRatio,'orig',this.height,this.width,'new h',h);
-
- this.setAttribute("height",h);
- ]]>
- </method>
-
- <method name="setItemContraintsHeight" args="unused">
- <![CDATA[
- if (!this.respectRatio) {
- return;
- }
- var w=this.height * this.initW/this.initH;
- w=((w < this.initW ) ? initW : w);
-
- if ($debug) Debug.write("setItemContraintsHeight",this.respectRatio,'orig',this.height,this.width,'new w',w);
-
- this.setAttribute("width",w);
- ]]>
- </method>
-
- <method name="updateAVSettingsSymbol" args="rcl">
- <![CDATA[
- //FIXME: Set a Symbol whereve this Client is Audio(only)/Video(only), both or Profile Picture
- if ($debug) Debug.warn("updateAVSettingsSymbol TODO ", rcl, this);
- switch (rcl.avsettings) {
- case "av":
- this.setDefaultVideoSize(rcl.VWidth, rcl.VHeight);
- this.setAttribute("visible", true);
- this._toolbar._mute.setAttribute("visible", true);
- this._toolbar._volume.setAttribute("visible", true);
- if(!canvas.isInterview && this.minimized) {
- this.reminimize();
- }
- this.deleteVideoConfProfilePic();
- break;
- case "a":
- this.setAttribute("visible", true);
- this._toolbar._mute.setAttribute("visible", true);
- this._toolbar._volume.setAttribute("visible", true);
- if(!canvas.isInterview && this.minimized) {
- this.reminimize();
- }
- this.setVideouserProfilePic(rcl);
- break;
- case "v":
- this.setDefaultVideoSize(rcl.VWidth, rcl.VHeight);
- this.setAttribute("visible", true);
- this._toolbar._mute.setAttribute("visible", false);
- this._toolbar._volume.setAttribute("visible", false);
- if(!canvas.isInterview && this.minimized) {
- this.reminimize();
- }
- this.deleteVideoConfProfilePic();
- break;
- case "n":
- if ($debug) Debug.write("Do not Publish A/V");
- //Prevent from Hiding the Box in Event Modus
- if (canvas.thishib.modus == "conference") {
- this.setAttribute("visible", false);
- }
- break;
- default:
- if ($debug) Debug.warn("no valid device Setup chosen");
- break;
- }
- ]]>
- </method>
-
- <method name="doResize" args="bool">
- if ($debug) Debug.write("doResize",bool);
- if(bool) {
- dragHelper.create();
- } else {
- dragHelper.remove();
- }
- if (this.isInterview || this.custom) {
- return;
- }
-
- if (bool) {
- this.isResizing = true;
- this.rs.apply();
- } else {
- this.isResizing = false;
- this.rs.remove();
- }
- </method>
-
- <!--- resets all values and stops the streaming -->
- <method name="resetValues">
- <![CDATA[
- if ($debug) Debug.write("resetValues: ", this.isremote);
- this.clientVars = null;
- if (this.isremote) {
- this._chatvideoinner._videostream.restart();
- } else {
- deleteVideoConfProfilePic();
- this._chatvideoinner._videostream._stop();
- }
- ]]>
- </method>
-
- <method name="setVideouserProfilePic" args="value">
- if ($debug) Debug.write("### setVideouserProfilePic ",value);
- this.deleteVideoConfProfilePic();
- new lz.videoUserProfilePicSWF10(this._chatvideoinner,{name:'userProfilePic',value:value});
- this.showUserProfilePic = true;
- </method>
-
- <method name="deleteVideoConfProfilePic">
- if ($debug) Debug.write("### deleteVideoConfProfilePic ###");
- if ($debug) Debug.write("delete ",this.showUserProfilePic);
- if (this.showUserProfilePic) {
- this._chatvideoinner.userProfilePic.destroy();
- this.showUserProfilePic = false;
- }
- </method>
-
- <!--- @keywords private -->
- <method name="_startDragState" args="obj">
- if (this.isInterview || this.custom) {
- return;
- }
-
- dragHelper.create();
-
- this.bringToFront();
- parent.bringToFront();
- this.dragger.apply();
- </method>
-
- <!--- @keywords private -->
- <method name="_removeDragState" args="obj">
- <![CDATA[
- lz.Cursor.unlock();
-
- if (this.x < 0) {
- this.setAttribute("x",20);
- }
-
- if (this.y < 0) {
- this.setAttribute("y",20);
- }
-
- if (this.x+this.width > parent.width) {
- this.setAttribute("x",parent.width - this.width - 20);
- }
-
- if (this.y+this.height > parent.height) {
- this.setAttribute("y",parent.height - this.height - 20);
- }
- dragHelper.remove();
- this.dragger.remove();
- ]]>
- </method>
-
- <method name="minimize">
- <![CDATA[
- this.respectRatio = false;
-
- this.setAttribute("minimized",true);
-
- this._toolbar._minimize.setAttribute("visibility","hidden");
- this._toolbar._maximize2.setAttribute("visibility","visible");
-
- for (var eg in this.subviews) {
- if (this.subviews[eg].name != "_toolbar"
- && this.subviews[eg].name != "_innertop"
- && this.subviews[eg].name != "_loudness") {
- this.subviews[eg].setAttribute("visibility","hidden");
- }
- }
-
- this._loudness.setAttribute("x",this.width - 84 - (this.isShowMicMute ? 20 : 0));
- this._loudness.bringToFront();
-
- this.initialHeight = this.height;
- //this.setAttribute("height",20);
- this._minimizeZoom.setAttribute("to",20);
- this._minimizeZoom.setAttribute('started', true);
- ]]>
- </method>
-
- <method name="reminimize">
- <![CDATA[
- this.setAttribute("minimized",false);
-
- this._toolbar._minimize.setAttribute("visibility","visible");
- this._toolbar._maximize2.setAttribute("visibility","hidden");
-
- this._loudness.setAttribute("x",1);
-
- //this.setAttribute("height",this.initialHeight);
- if ($debug) Debug.write("this.initialHeight ",this.initialHeight);
- this._minimizeZoom.setAttribute("to",this.initialHeight);
- this._minimizeZoom.setAttribute('started', true);
- ]]>
- </method>
-
- <method name="reminimizeComplete">
- <![CDATA[
- if (!this.minimized) {
- for (var eg in this.subviews) {
- if (this.subviews[eg].name != "_toolbar"
- && this.subviews[eg].name != "_innertop"
- && this.subviews[eg].name != "_loudness"
- && this.subviews[eg].name != "_innerbottom") {
- this.subviews[eg].setAttribute("visibility","visible");
- }
- }
- if (isMicrophonesRoom) {
- this._innerbottom.setAttribute("visibility", "visible");
- }
- this.respectRatio = true;
- }
- ]]>
- </method>
-
- <view name="_innertop" width="${parent.width-2 }" height="18" x="1" y="1"
- bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }">
- <text text="${ parent.parent.chatpartnername }" onmousedown="parent.parent._startDragState(this)"
- onmouseup="parent.parent._removeDragState(this)"
- width="${ parent.width-2 }" fgcolor="white" fontsize="9">
- <handler name="onmouseover">
- //cursor="arrow_draw_panel_cursor"
- lz.Cursor.setCursorGlobal("arrow_draw_panel_cursor");
- </handler>
-
- <handler name="onmouseout">
- lz.Cursor.unlock();
- </handler>
- </text>
- </view>
-
- <view name="_innerbottom" width="${parent.width - 2}" x="1" y="${parent.height - 19}" height="18"
- bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }">
- <text text="${canvas.getLabelName(1434)}" width="${ parent.width-2 }" fgcolor="white" name="title" fontsize="9" />
- </view>
-
- <view name="_loudness" x="1" visible="${parent.isremote}" y="${parent.height - 20 - ((parent._innerbottom.visible) ? 18 : 0) }">
- <method name="setSpeaking" args="bool">
- this.loudness.setAttribute('opacity', bool ? 1 : 0.2);
- </method>
- <view x="2" y="2" name="loudness" resource="speaking" opacity="0.2" onmouseover="" onmouseout="">
- <handler name="onclick">
- <![CDATA[
- if (canvas.ismoderator || canvas.isAllowedToGiveExclusiveAudio) {
- parent.parent.confirmExclusiveAudio();
- } else {
- new lz.labelerrorPopup(canvas,{errorlabelid:1478});
- }
- ]]>
- </handler>
- <labelTooltip inittwice="true" labelid="372" />
- </view>
- </view>
-
- <view name="_resizeview" x="${ this.parent.width - 16 }" valign="bottom" resource="explorer_resize_rsc" cursor="explorer_resizemouse_rsc"
- onmousedown="this.parent.doResize(true)" onmouseup="this.parent.doResize(false)">
- <handler name="oninit">
- //if ($debug) Debug.write("setTint");
- //TODO: Fix this, does not work at the moment
- //canvas.protocol + '://code.google.com/p/openmeetings/issues/detail?id=470
- this.setAttribute("color", canvas.getThemeColor('baseMousecolorizer'));
- </handler>
- </view>
-
- <method name="resync">
- resetValues();
- if (!isremote) {
- canvas.commonVideoViewContent.removeVideoByUser(this.publicSID);
- canvas.commonVideoViewContent._startAvBroadcast(true);
- }
- </method>
-
- <view name="_toolbar" x="${ parent.width-this.width-2 }" layout="axis:x;spacing:0" y="2">
- <attribute name="isload" value="true" type="boolean" />
-
- <miniIconsPresenter name="_resync" iconRessourceName="resyncuser_rsc">
- <handler name="onclick">
- parent.parent.resync();
- </handler>
- <labelTooltip name="_tip" labelid="540" />
- </miniIconsPresenter>
-
- <miniIconsPresenter name="_mute" width="16" height="16" iconRessourceName="mute_micro_btn_rsc">
- <handler name="onclick">
- parent.parent.silenceMicrophone(!parent.parent.micMuted);
- </handler>
- <labelTooltip name="_tip" labelid="1405" />
- </miniIconsPresenter>
-
- <miniIconsPresenter x="0" y="0" name="_volume" width="16" height="16" iconRessourceName="volume">
- <handler name="oninit">
- _tip.setAttribute("labelid", parent.parent.isremote ? 1511 : 1512);
- </handler>
- <handler name="onclick">
- var volume = parent.parent.getStreamVolume();
-
- var sliderHeight = 120;
- var sliderX = this.getAttributeRelative('x',canvas) - 2;
- var pick = new lz.VolumeSlider(canvas, {
- height:sliderHeight,
- x:sliderX,
- y:(parent.getAttributeRelative('y',canvas) - sliderHeight/2),
- initialNumber:volume,
- videoObject:parent.parent
- });
- lz.ModeManager.makeModal(pick);
- </handler>
- <labelTooltip name="_tip" />
- </miniIconsPresenter>
-
- <miniIconsPresenter name="_minimize" iconRessourceName="btn_presenter_minimize">
- <handler name="onclick">
- this.parent.parent.minimize();
- </handler>
- <labelTooltip labelid="856" />
- </miniIconsPresenter>
-
- <miniIconsPresenter name="_maximize2" visibility="hidden" iconRessourceName="btn_presenter_maximize">
- <handler name="onclick">
- this.parent.parent.reminimize();
- </handler>
- <labelTooltip labelid="857" />
- </miniIconsPresenter>
-
- </view>
-
- <view name="_giveExclusiveAudioView" valign="middle" align="center" visible="false">
- <view name="_micButton" width="40" height="40" resource="mic_rsc" showhandcursor="true">
- <labelTooltip name="_toolTipTextExclusiveAudio" labelid="1386" />
- </view>
- </view>
-
- <method name="allowedExclusiveAudio">
- <![CDATA[
- return (canvas.ismoderator || canvas.isAllowedToGiveExclusiveAudio)
- && this.clientVars.avsettings.indexOf('a') > -1;
- ]]>
- </method>
-
- <handler name="onmouseover">
- <![CDATA[
- if (this.isInterview || this.minimized) {
- return;
- }
- if (allowedExclusiveAudio()) {
- this._giveExclusiveAudioView._micButton._toolTipTextExclusiveAudio.doonmouseover();
- this._giveExclusiveAudioView.setAttribute("visible", true);
- }
- ]]>
- </handler>
-
- <handler name="onmouseout">
- <![CDATA[
- if (this.isInterview || this.minimized) {
- return;
- }
- if (allowedExclusiveAudio()) {
- this._giveExclusiveAudioView._micButton._toolTipTextExclusiveAudio.cleanHolder();
- this._giveExclusiveAudioView.setAttribute("visible", false);
- }
- ]]>
- </handler>
-
- <handler name="onclick">
- <![CDATA[
- if (allowedExclusiveAudio()) {
- this._giveExclusiveAudioView._micButton._toolTipTextExclusiveAudio.cleanHolder();
- this.confirmExclusiveAudio();
- }
- ]]>
- </handler>
-
- <dragstate name="dragger" />
- <resizestatemin name="rs" resize_min_width="70" resize_min_height="70" />
- <dragHelper name="dragHelper" />
-
- <animator name="_minimizeZoom" attribute="height" duration="750" to="20" started="false">
- <handler name="onstop" args="s">
- parent.reminimizeComplete();
- </handler>
- </animator>
-
- <handler name="onismoderator" reference="canvas" args="m">
- <![CDATA[
- if ($debug) Debug.write("###### ismoderator ", m);
-
- if (this.minimized) {
- this._loudness.setAttribute("x",this.width - 84 - (this.isShowMicMute ? 20 : 0));
- this._loudness.bringToFront();
- }
- ]]>
- </handler>
-
- <method name="confirmExclusiveAudio">
- var so:SharedObject = SharedObject.getLocal('userdata');
- var userData = so.data;
- var dontShowExclusiveAudioConfirmation = userData["dontShowExclusiveAudioConfirmation"];
- var exclusiveAudioListener = new Object();
- exclusiveAudioListener.sendNoConfirmation = function(none) {};
- exclusiveAudioListener.sendConfirmation = function(answer, remember) {
- if (answer) {
- canvas.thishib.giveExclusiveAudio(this.publicSID);
- if (remember) {
- userData["dontShowExclusiveAudioConfirmation"] = true;
- so.flush();
- }
- }
- };
- if (dontShowExclusiveAudioConfirmation == true) {
- exclusiveAudioListener.sendConfirmation(true, true);
- } else {
- new lz.confirmationSingle(canvas,{
- labelid:1428,
- labeliderror:1539,
- refObj:exclusiveAudioListener,
- showCheckBox:true});
- }
- </method>
-
- <!-- This will mute the Microphone only to the person that is speaking if the gain is set to zero NOBODY will hear 'em -->
- <method name="muteMicrophone" args="roomClientObj">
- <![CDATA[
- if ($debug) Debug.write("############ muteMicrophone ", roomClientObj.micMuted, roomClientObj.publicSID, this.publicSID);
-
- if (roomClientObj.publicSID == this.publicSID) {
- if ($debug) Debug.write("Set Mute for Client :: ", roomClientObj);
- if ($debug) Debug.write("############ SET GAIN " + roomClientObj.micMuted);
- this._chatvideoinner._videostream.muteMicro(roomClientObj.micMuted);
- this.isMutedByModerator = roomClientObj.micMuted;
- this.setMicMuted(roomClientObj.micMuted);
- }
- ]]>
- </method>
-
- <!-- This will mute it only locally, that means on other screens the user might be still online and loud -->
- <method name="silenceMicrophone" args="mute">
- <![CDATA[
- if ($debug) Debug.write("############ silenceMicrophone ", this.publicSID);
- if (this.publicSID == canvas.publicSID) {
- //self sound turned off
- canvas.thishib.switchMicMuted.publicSID = this.publicSID;
- canvas.thishib.switchMicMuted.mute = mute;
- canvas.thishib.switchMicMuted.doCall();
- if (!mute) {
- this._chatvideoinner._videostream.muteMicro(false);
- }
- } else {
- //disable this action for now
- if (!canvas.ismoderator) {
- new lz.labelerrorPopup(canvas,{errorlabelid:1409});
- return;
- }
- //you can not unmute it locally by putting sound to 100 cause the gain is set to zero globally in the micro of the sender!
- //so setting the sound/volume on the other remote clients has zero effect
- if (this.isMutedByModerator && !canvas.ismoderator) {
- //FIXME: That is not true, you could restart audio/video ...
- var errorlabelid = this.publicSID == canvas.publicSID ? 1387 : 1402;
- new lz.labelerrorPopup(canvas,{errorlabelid:errorlabelid});
- return;
- }
- if (canvas.ismoderator) {
- canvas.thishib.switchMicMuted.publicSID = this.publicSID;
- canvas.thishib.switchMicMuted.mute = mute;
- canvas.thishib.switchMicMuted.doCall();
- } else {
- this._chatvideoinner._videostream.setSoundVolume(mute ? 0 : 100);
- }
- }
- this.setMicMuted(mute);
- ]]>
- </method>
-
- <method name="setMicMuted" args="micMuted">
- <![CDATA[
- this.micMuted = micMuted;
- this._toolbar._mute._tip.setAttribute("labelid", micMuted ? "1406" : "1405");
- this._toolbar._mute._itemRsc.setAttribute('frame', micMuted ? 2 : 1);
- if (isMicrophonesRoom) {
- var label = canvas.getLabelName(micMuted ? 1435 : 1434);
- var color = micMuted ? canvas.getThemeColor('basebgcolorizer') : "0xFF6600";
- this._innertop.setAttribute('bgcolor', color);
- this._innerbottom.setAttribute('bgcolor', color);
- this._innerbottom.title.setAttribute('text', label);
- }
- ]]>
- </method>
-
- <method name="setStreamVolume" args="v">
- if ($debug) Debug.write("############ setStreamVolume ", v, this.publicSID);
- var stream = this._chatvideoinner._videostream;
- if (this.isremote) {
- stream.setSoundVolume(v);
- } else {
- stream.setAttribute('micGain', v);
- stream.micro.gain = v;
- if (0 == v) {
- this.setMicMuted(true);
- canvas.thishib.switchMicMuted.publicSID = this.publicSID;
- canvas.thishib.switchMicMuted.mute = true;
- canvas.thishib.switchMicMuted.doCall();
- } else if (micMuted) {
- this.silenceMicrophone(false);
- }
- }
- </method>
-
- <method name="getStreamVolume">
- var stream = this._chatvideoinner._videostream;
- return this.isremote ? Number(stream._ns.soundTransform.volume * 100) : stream.micro.gain;
- </method>
-
- <handler name="onheight" args="value">
- if (null == initRatio || !respectRatio) {
- return;
- }
- var videoHeight = value - this.videoInsetY - this.bottomBarHeight;
- var expectedVideoWidth = videoHeight * initRatio;
- var expectedPodWidth = expectedVideoWidth + this.videoInsetX;
- if (this.width != expectedPodWidth) {
- this.setAttribute("width", expectedPodWidth);
- }
- </handler>
-
- <handler name="onwidth" args="value">
- if (null == initRatio || !respectRatio) {
- return;
- }
- var videoWidth = value - this.videoInsetX;
- var expectedVideoHeight = videoWidth / initRatio;
- var expectedPodHeight = expectedVideoHeight + this.videoInsetY + this.bottomBarHeight;
- if (this.height != expectedPodHeight) {
- this.setAttribute("height", expectedPodHeight);
- }
- </handler>
- </class>
-</library>
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+-->
+<library>
+
+
+ <!--- Base container for a client, can be either: a remote-video (subscribing/playing a video) or a self-video (broadcasting
+ a cam/mic) -->
+ <class name="baseVideoObject" extends="view" bgcolor="0x000000" width="122" height="101">
+
+ <switch>
+ <when property="$as3">
+ <passthrough>
+ import flash.filters.DropShadowFilter;
+ import flash.media.*
+ import flash.net.SharedObject;
+ </passthrough>
+ </when>
+ </switch>
+
+ <!--- @keywords private -->
+ <attribute name="chatpartnername" value="" type="string" />
+ <!--- @keywords private -->
+ <attribute name="showUserProfilePic" type="boolean" value="false" />
+
+ <!--- color of this user, this is the color the user will also use for his chat-color -->
+ <attribute name="usercolor" value="0" type="number" />
+
+ <!--- publicSID is a hash-value to identify a user -->
+ <attribute name="publicSID" value="" type="string" />
+
+ <!--- micMuted indicates if the microphone is currently turned sound or gain to 0 -->
+ <attribute name="micMuted" value="false" type="boolean" />
+
+ <!--- @keywords private -->
+ <attribute name="isremote" value="true" type="boolean" />
+
+ <!--- @keywords private -->
+ <attribute name="clientVars" value="null" />
+
+ <!--- @keywords private -->
+ <attribute name="isResizing" value="false" type="boolean" />
+
+ <!--- @keywords private -->
+ <attribute name="isInterview" value="false" type="boolean" />
+
+ <attribute name="respectRatio" value="true" type="boolean" />
+
+ <attribute name="minimized" value="false" type="boolean" />
+
+ <attribute name="custom" value="false" type="boolean" />
+
+ <attribute name="initH" value="40" type="number" />
+ <attribute name="initW" value="40" type="number" />
+
+ <attribute name="isShowMicMute" value="false" type="boolean" />
+
+ <attribute name="isMutedByModerator" value="false" type="boolean" />
+
+ <attribute name="isMicrophonesRoom" value="false" type="boolean" />
+
+ <attribute name="lastPositiveVolume" type="number" value="50" />
+
+ <!-- Initial stream ratio: width / height -->
+ <attribute name="initRatio" type="number" value="null" />
+ <attribute name="initialHeight" value="$once{ this.height }" type="number" />
+
+ <handler name="onisremote" args="r">
+ this.isremote = r;
+ </handler>
+
+ <handler name="oninit">
+ <![CDATA[
+ this.clientVars = new Array();
+ this.clientVars['User']='No User Connected';
+
+ if (this.isInterview) {
+ this._toolbar._minimize.setAttribute("visibility","hidden");
+ this._resizeview.setAttribute("visibility","hidden");
+ this._innerbottom.setAttribute("visibility","hidden");
+ return;
+ }
+
+ if (this.custom) {
+ this._toolbar._minimize.setAttribute("visibility","hidden");
+ this._resizeview.setAttribute("visibility","hidden");
+ this._toolbar.setAttribute("visibility","hidden");
+ this._resizeview.setAttribute("visibility","hidden");
+ this._loudness.setAttribute("visibility","hidden");
+ this._innertop.setAttribute("visibility","hidden");
+ this._innerbottom.setAttribute("visibility","hidden");
+ }
+ this.setShadow();
+
+ if (this.publicSID == canvas.publicSID) {
+ this._toolbar._resync._tip.setAttribute("labelid",610);
+ }
+ this._giveExclusiveAudioView.bringToFront();
+
+ this.isMicrophonesRoom = canvas.currentRoomObj.showMicrophoneStatus;
+ if (isMicrophonesRoom) {
+ this._innertop.setAttribute("bgcolor", "0xFF6600");
+ this._innerbottom.setAttribute("bgcolor", "0xFF6600");
+ } else {
+ this._innerbottom.setAttribute("visibility", "hidden");
+ }
+ ]]>
+ </handler>
+
+ <handler name="ony">
+ <![CDATA[
+ if (this.isInterview || this.custom || canvas.currentRoomObj.hideWhiteboard) {
+ return;
+ }
+ var bounds = this.getBounds();
+ var parentBounds = canvas.getBounds();
+ if (bounds.y < 0) {
+ this.setAttribute('y',0);
+ }
+ if (bounds.y > (parentBounds.height - bounds.height)) {
+ this.setAttribute('y', parentBounds.height - bounds.height );
+ }
+ ]]>
+ </handler>
+
+ <handler name="onx">
+ <![CDATA[
+ if (this.isInterview || this.custom) {
+ return;
+ }
+
+ var bounds = this.getBounds();
+ var parentBounds = canvas.getBounds();
+ if (bounds.x < 0) {
+ this.setAttribute('x',0);
+ }
+
+ if (bounds.x > (parentBounds.width - bounds.width)) {
+ this.setAttribute('x', parentBounds.width - bounds.width );
+ }
+ ]]>
+ </handler>
+
+ <method name="setShadow">
+ <![CDATA[
+ if (this.isinited){
+ this.normalMC = this.getDisplayObject();
+ //if($debug) Debug.write(this.normalMC);
+ //if($debug) Debug.write("this.normalMC: ",this.normalMC);
+ //if($debug) Debug.write("this: ",this);
+ this.displacementMap = new flash.filters.DropShadowFilter();
+ this.normalMC.filters = [this.displacementMap];
+ }
+ ]]>
+ </method>
+
+ <!-- respect ratio and keep minimum width / height -->
+ <method name="setItemContraintsWidth" args="unused">
+ <![CDATA[
+ if (!this.respectRatio) {
+ return;
+ }
+ var h=this.width * this.initH/this.initW;
+ h=((h < this.initH ) ? initH : h);
+
+ if ($debug) Debug.write("setItemContraintsWidth",this.respectRatio,'orig',this.height,this.width,'new h',h);
+
+ this.setAttribute("height",h);
+ ]]>
+ </method>
+
+ <method name="setItemContraintsHeight" args="unused">
+ <![CDATA[
+ if (!this.respectRatio) {
+ return;
+ }
+ var w=this.height * this.initW/this.initH;
+ w=((w < this.initW ) ? initW : w);
+
+ if ($debug) Debug.write("setItemContraintsHeight",this.respectRatio,'orig',this.height,this.width,'new w',w);
+
+ this.setAttribute("width",w);
+ ]]>
+ </method>
+
+ <method name="updateAVSettingsSymbol" args="rcl">
+ <![CDATA[
+ //FIXME: Set a Symbol whereve this Client is Audio(only)/Video(only), both or Profile Picture
+ if ($debug) Debug.warn("updateAVSettingsSymbol TODO ", rcl, this);
+ switch (rcl.avsettings) {
+ case "av":
+ this.setDefaultVideoSize(rcl.VWidth, rcl.VHeight);
+ this.setAttribute("visible", true);
+ this._toolbar._mute.setAttribute("visible", true);
+ this._toolbar._volume.setAttribute("visible", true);
+ if(!canvas.isInterview && this.minimized) {
+ this.reminimize();
+ }
+ this.deleteVideoConfProfilePic();
+ break;
+ case "a":
+ this.setAttribute("visible", true);
+ this._toolbar._mute.setAttribute("visible", true);
+ this._toolbar._volume.setAttribute("visible", true);
+ if(!canvas.isInterview && this.minimized) {
+ this.reminimize();
+ }
+ this.setVideouserProfilePic(rcl);
+ break;
+ case "v":
+ this.setDefaultVideoSize(rcl.VWidth, rcl.VHeight);
+ this.setAttribute("visible", true);
+ this._toolbar._mute.setAttribute("visible", false);
+ this._toolbar._volume.setAttribute("visible", false);
+ if(!canvas.isInterview && this.minimized) {
+ this.reminimize();
+ }
+ this.deleteVideoConfProfilePic();
+ break;
+ case "n":
+ if ($debug) Debug.write("Do not Publish A/V");
+ //Prevent from Hiding the Box in Event Modus
+ if (canvas.thishib.modus == "conference") {
+ this.setAttribute("visible", false);
+ }
+ break;
+ default:
+ if ($debug) Debug.warn("no valid device Setup chosen");
+ break;
+ }
+ ]]>
+ </method>
+
+ <method name="doResize" args="bool">
+ if ($debug) Debug.write("doResize",bool);
+ if(bool) {
+ dragHelper.create();
+ } else {
+ dragHelper.remove();
+ }
+ if (this.isInterview || this.custom) {
+ return;
+ }
+
+ if (bool) {
+ this.isResizing = true;
+ this.rs.apply();
+ } else {
+ this.isResizing = false;
+ this.rs.remove();
+ }
+ </method>
+
+ <!--- resets all values and stops the streaming -->
+ <method name="resetValues">
+ <![CDATA[
+ if ($debug) Debug.write("resetValues: ", this.isremote);
+ this.clientVars = null;
+ if (this.isremote) {
+ this._chatvideoinner._videostream.restart();
+ } else {
+ deleteVideoConfProfilePic();
+ this._chatvideoinner._videostream._stop();
+ }
+ ]]>
+ </method>
+
+ <method name="setVideouserProfilePic" args="value">
+ if ($debug) Debug.write("### setVideouserProfilePic ",value);
+ this.deleteVideoConfProfilePic();
+ new lz.videoUserProfilePicSWF10(this._chatvideoinner,{name:'userProfilePic',value:value});
+ this.showUserProfilePic = true;
+ </method>
+
+ <method name="deleteVideoConfProfilePic">
+ if ($debug) Debug.write("### deleteVideoConfProfilePic ###");
+ if ($debug) Debug.write("delete ",this.showUserProfilePic);
+ if (this.showUserProfilePic) {
+ this._chatvideoinner.userProfilePic.destroy();
+ this.showUserProfilePic = false;
+ }
+ </method>
+
+ <!--- @keywords private -->
+ <method name="_startDragState" args="obj">
+ if (this.isInterview || this.custom) {
+ return;
+ }
+
+ dragHelper.create();
+
+ this.bringToFront();
+ parent.bringToFront();
+ this.dragger.apply();
+ </method>
+
+ <!--- @keywords private -->
+ <method name="_removeDragState" args="obj">
+ <![CDATA[
+ lz.Cursor.unlock();
+
+ if (this.x < 0) {
+ this.setAttribute("x",20);
+ }
+
+ if (this.y < 0) {
+ this.setAttribute("y",20);
+ }
+
+ if (this.x+this.width > parent.width) {
+ this.setAttribute("x",parent.width - this.width - 20);
+ }
+
+ if (this.y+this.height > parent.height) {
+ this.setAttribute("y",parent.height - this.height - 20);
+ }
+ dragHelper.remove();
+ this.dragger.remove();
+ ]]>
+ </method>
+
+ <method name="minimize">
+ <![CDATA[
+ this.respectRatio = false;
+
+ this.setAttribute("minimized",true);
+
+ this._toolbar._minimize.setAttribute("visibility","hidden");
+ this._toolbar._maximize2.setAttribute("visibility","visible");
+
+ for (var eg in this.subviews) {
+ if (this.subviews[eg].name != "_toolbar"
+ && this.subviews[eg].name != "_innertop"
+ && this.subviews[eg].name != "_loudness") {
+ this.subviews[eg].setAttribute("visibility","hidden");
+ }
+ }
+
+ this._loudness.setAttribute("x",this.width - 84 - (this.isShowMicMute ? 20 : 0));
+ this._loudness.bringToFront();
+
+ this.initialHeight = this.height;
+ //this.setAttribute("height",20);
+ this._minimizeZoom.setAttribute("to",20);
+ this._minimizeZoom.setAttribute('started', true);
+ ]]>
+ </method>
+
+ <method name="reminimize">
+ <![CDATA[
+ this.setAttribute("minimized",false);
+
+ this._toolbar._minimize.setAttribute("visibility","visible");
+ this._toolbar._maximize2.setAttribute("visibility","hidden");
+
+ this._loudness.setAttribute("x",1);
+
+ //this.setAttribute("height",this.initialHeight);
+ if ($debug) Debug.write("this.initialHeight ",this.initialHeight);
+ this._minimizeZoom.setAttribute("to",this.initialHeight);
+ this._minimizeZoom.setAttribute('started', true);
+ ]]>
+ </method>
+
+ <method name="reminimizeComplete">
+ <![CDATA[
+ if (!this.minimized) {
+ for (var eg in this.subviews) {
+ if (this.subviews[eg].name != "_toolbar"
+ && this.subviews[eg].name != "_innertop"
+ && this.subviews[eg].name != "_loudness"
+ && this.subviews[eg].name != "_innerbottom") {
+ this.subviews[eg].setAttribute("visibility","visible");
+ }
+ }
+ if (isMicrophonesRoom) {
+ this._innerbottom.setAttribute("visibility", "visible");
+ }
+ this.respectRatio = true;
+ }
+ ]]>
+ </method>
+
+ <view name="_innertop" width="${parent.width-2 }" height="18" x="1" y="1"
+ bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }">
+ <text text="${ parent.parent.chatpartnername }" onmousedown="parent.parent._startDragState(this)"
+ onmouseup="parent.parent._removeDragState(this)"
+ width="${ parent.width-2 }" fgcolor="white" fontsize="9">
+ <handler name="onmouseover">
+ //cursor="arrow_draw_panel_cursor"
+ lz.Cursor.setCursorGlobal("arrow_draw_panel_cursor");
+ </handler>
+
+ <handler name="onmouseout">
+ lz.Cursor.unlock();
+ </handler>
+ </text>
+ </view>
+
+ <view name="_innerbottom" width="${parent.width - 2}" x="1" y="${parent.height - 19}" height="18"
+ bgcolor="$once{ canvas.getThemeColor('basebgcolorizer') }">
+ <text text="${canvas.getLabelName(1434)}" width="${ parent.width-2 }" fgcolor="white" name="title" fontsize="9" />
+ </view>
+
+ <view name="_loudness" x="1" visible="${parent.isremote}" y="${parent.height - 20 - ((parent._innerbottom.visible) ? 18 : 0) }">
+ <method name="setSpeaking" args="bool">
+ this.loudness.setAttribute('opacity', bool ? 1 : 0.2);
+ </method>
+ <view x="2" y="2" name="loudness" resource="speaking" opacity="0.2" onmouseover="" onmouseout="">
+ <handler name="onclick">
+ <![CDATA[
+ if (canvas.ismoderator || canvas.isAllowedToGiveExclusiveAudio) {
+ parent.parent.confirmExclusiveAudio();
+ } else {
+ new lz.labelerrorPopup(canvas,{errorlabelid:1478});
+ }
+ ]]>
+ </handler>
+ <labelTooltip inittwice="true" labelid="372" />
+ </view>
+ </view>
+
+ <view name="_resizeview" x="${ this.parent.width - 16 }" valign="bottom" resource="explorer_resize_rsc" cursor="explorer_resizemouse_rsc"
+ onmousedown="this.parent.doResize(true)" onmouseup="this.parent.doResize(false)">
+ <handler name="oninit">
+ //if ($debug) Debug.write("setTint");
+ //TODO: Fix this, does not work at the moment
+ //canvas.protocol + '://code.google.com/p/openmeetings/issues/detail?id=470
+ this.setAttribute("color", canvas.getThemeColor('baseMousecolorizer'));
+ </handler>
+ </view>
+
+ <method name="resync">
+ resetValues();
+ if (!isremote) {
+ canvas.commonVideoViewContent.removeVideoByUser(this.publicSID);
+ canvas.commonVideoViewContent._startAvBroadcast(true);
+ }
+ </method>
+
+ <view name="_toolbar" x="${ parent.width-this.width-2 }" layout="axis:x;spacing:0" y="2">
+ <attribute name="isload" value="true" type="boolean" />
+
+ <miniIconsPresenter name="_resync" iconRessourceName="resyncuser_rsc">
+ <handler name="onclick">
+ parent.parent.resync();
+ </handler>
+ <labelTooltip name="_tip" labelid="540" />
+ </miniIconsPresenter>
+
+ <miniIconsPresenter name="_mute" width="16" height="16" iconRessourceName="mute_micro_btn_rsc">
+ <handler name="onclick">
+ parent.parent.silenceMicrophone(!parent.parent.micMuted);
+ </handler>
+ <labelTooltip name="_tip" labelid="1405" />
+ </miniIconsPresenter>
+
+ <miniIconsPresenter x="0" y="0" name="_volume" width="16" height="16" iconRessourceName="volume">
+ <handler name="oninit">
+ _tip.setAttribute("labelid", parent.parent.isremote ? 1511 : 1512);
+ </handler>
+ <handler name="onclick">
+ var volume = parent.parent.getStreamVolume();
+
+ var sliderHeight = 120;
+ var sliderX = this.getAttributeRelative('x',canvas) - 2;
+ var pick = new lz.VolumeSlider(canvas, {
+ height:sliderHeight,
+ x:sliderX,
+ y:(parent.getAttributeRelative('y',canvas) - sliderHeight/2),
+ initialNumber:volume,
+ videoObject:parent.parent
+ });
+ lz.ModeManager.makeModal(pick);
+ </handler>
+ <labelTooltip name="_tip" />
+ </miniIconsPresenter>
+
+ <miniIconsPresenter name="_minimize" iconRessourceName="btn_presenter_minimize">
+ <handler name="onclick">
+ this.parent.parent.minimize();
+ </handler>
+ <labelTooltip labelid="856" />
+ </miniIconsPresenter>
+
+ <miniIconsPresenter name="_maximize2" visibility="hidden" iconRessourceName="btn_presenter_maximize">
+ <handler name="onclick">
+ this.parent.parent.reminimize();
+ </handler>
+ <labelTooltip labelid="857" />
+ </miniIconsPresenter>
+
+ </view>
+
+ <view name="_giveExclusiveAudioView" valign="middle" align="center" visible="false">
+ <view name="_micButton" width="40" height="40" resource="mic_rsc" showhandcursor="true">
+ <labelTooltip name="_toolTipTextExclusiveAudio" labelid="1386" />
+ </view>
+ </view>
+
+ <method name="allowedExclusiveAudio">
+ <![CDATA[
+ return (canvas.ismoderator || canvas.isAllowedToGiveExclusiveAudio)
+ && this.clientVars.avsettings.indexOf('a') > -1;
+ ]]>
+ </method>
+
+ <handler name="onmouseover">
+ <![CDATA[
+ if (this.isInterview || this.minimized) {
+ return;
+ }
+ if (allowedExclusiveAudio()) {
+ this._giveExclusiveAudioView._micButton._toolTipTextExclusiveAudio.doonmouseover();
+ this._giveExclusiveAudioView.setAttribute("visible", true);
+ }
+ ]]>
+ </handler>
+
+ <handler name="onmouseout">
+ <![CDATA[
+ if (this.isInterview || this.minimized) {
+ return;
+ }
+ if (allowedExclusiveAudio()) {
+ this._giveExclusiveAudioView._micButton._toolTipTextExclusiveAudio.cleanHolder();
+ this._giveExclusiveAudioView.setAttribute("visible", false);
+ }
+ ]]>
+ </handler>
+
+ <handler name="onclick">
+ <![CDATA[
+ if (allowedExclusiveAudio()) {
+ this._giveExclusiveAudioView._micButton._toolTipTextExclusiveAudio.cleanHolder();
+ this.confirmExclusiveAudio();
+ }
+ ]]>
+ </handler>
+
+ <dragstate name="dragger" />
+ <resizestatemin name="rs" resize_min_width="70" resize_min_height="70" />
+ <dragHelper name="dragHelper" />
+
+ <animator name="_minimizeZoom" attribute="height" duration="750" to="20" started="false">
+ <handler name="onstop" args="s">
+ parent.reminimizeComplete();
+ </handler>
+ </animator>
+
+ <handler name="onismoderator" reference="canvas" args="m">
+ <![CDATA[
+ if ($debug) Debug.write("###### ismoderator ", m);
+
+ if (this.minimized) {
+ this._loudness.setAttribute("x",this.width - 84 - (this.isShowMicMute ? 20 : 0));
+ this._loudness.bringToFront();
+ }
+ ]]>
+ </handler>
+
+ <method name="confirmExclusiveAudio">
+ var so:SharedObject = SharedObject.getLocal('userdata');
+ var userData = so.data;
+ var dontShowExclusiveAudioConfirmation = userData["dontShowExclusiveAudioConfirmation"];
+ var exclusiveAudioListener = new Object();
+ exclusiveAudioListener.sendNoConfirmation = function(none) {};
+ exclusiveAudioListener.sendConfirmation = function(answer, remember) {
+ if (answer) {
+ canvas.thishib.giveExclusiveAudio(this.publicSID);
+ if (remember) {
+ userData["dontShowExclusiveAudioConfirmation"] = true;
+ so.flush();
+ }
+ }
+ };
+ if (dontShowExclusiveAudioConfirmation == true) {
+ exclusiveAudioListener.sendConfirmation(true, true);
+ } else {
+ new lz.confirmationSingle(canvas,{
+ labelid:1428,
+ labeliderror:1539,
+ refObj:exclusiveAudioListener,
+ showCheckBox:true});
+ }
+ </method>
+
+ <!-- This will mute the Microphone only to the person that is speaking if the gain is set to zero NOBODY will hear 'em -->
+ <method name="muteMicrophone" args="roomClientObj">
+ <![CDATA[
+ if ($debug) Debug.write("############ muteMicrophone ", roomClientObj.micMuted, roomClientObj.publicSID, this.publicSID);
+
+ if (roomClientObj.publicSID == this.publicSID) {
+ if ($debug) Debug.write("Set Mute for Client :: ", roomClientObj);
+ if ($debug) Debug.write("############ SET GAIN " + roomClientObj.micMuted);
+ this._chatvideoinner._videostream.muteMicro(roomClientObj.micMuted);
+ this.isMutedByModerator = roomClientObj.micMuted;
+ this.setMicMuted(roomClientObj.micMuted);
+ }
+ ]]>
+ </method>
+
+ <!-- This will mute it only locally, that means on other screens the user might be still online and loud -->
+ <method name="silenceMicrophone" args="mute">
+ <![CDATA[
+ if ($debug) Debug.write("############ silenceMicrophone ", this.publicSID);
+ if (this.publicSID == canvas.publicSID) {
+ //self sound turned off
+ canvas.thishib.switchMicMuted.publicSID = this.publicSID;
+ canvas.thishib.switchMicMuted.mute = mute;
+ canvas.thishib.switchMicMuted.doCall();
+ if (!mute) {
+ this._chatvideoinner._videostream.muteMicro(false);
+ }
+ } else {
+ //disable this action for now
+ if (!canvas.ismoderator) {
+ new lz.labelerrorPopup(canvas,{errorlabelid:1409});
+ return;
+ }
+ //you can not unmute it locally by putting sound to 100 cause the gain is set to zero globally in the micro of the sender!
+ //so setting the sound/volume on the other remote clients has zero effect
+ if (this.isMutedByModerator && !canvas.ismoderator) {
+ //FIXME: That is not true, you could restart audio/video ...
+ var errorlabelid = this.publicSID == canvas.publicSID ? 1387 : 1402;
+ new lz.labelerrorPopup(canvas,{errorlabelid:errorlabelid});
+ return;
+ }
+ if (canvas.ismoderator) {
+ canvas.thishib.switchMicMuted.publicSID = this.publicSID;
+ canvas.thishib.switchMicMuted.mute = mute;
+ canvas.thishib.switchMicMuted.doCall();
+ } else {
+ this._chatvideoinner._videostream.setSoundVolume(mute ? 0 : 100);
+ }
+ }
+ this.setMicMuted(mute);
+ ]]>
+ </method>
+
+ <method name="setMicMuted" args="micMuted">
+ <![CDATA[
+ this.micMuted = micMuted;
+ this._toolbar._mute._tip.setAttribute("labelid", micMuted ? "1406" : "1405");
+ this._toolbar._mute._itemRsc.setAttribute('frame', micMuted ? 2 : 1);
+ if (isMicrophonesRoom) {
+ var label = canvas.getLabelName(micMuted ? 1435 : 1434);
+ var color = micMuted ? canvas.getThemeColor('basebgcolorizer') : "0xFF6600";
+ this._innertop.setAttribute('bgcolor', color);
+ this._innerbottom.setAttribute('bgcolor', color);
+ this._innerbottom.title.setAttribute('text', label);
+ }
+ ]]>
+ </method>
+
+ <method name="setStreamVolume" args="v">
+ if ($debug) Debug.write("############ setStreamVolume ", v, this.publicSID);
+ var stream = this._chatvideoinner._videostream;
+ if (this.isremote) {
+ stream.setSoundVolume(v);
+ } else {
+ stream.setAttribute('micGain', v);
+ stream.micro.gain = v;
+ if (0 == v) {
+ this.setMicMuted(true);
+ canvas.thishib.switchMicMuted.publicSID = this.publicSID;
+ canvas.thishib.switchMicMuted.mute = true;
+ canvas.thishib.switchMicMuted.doCall();
+ } else if (micMuted) {
+ this.silenceMicrophone(false);
+ }
+ }
+ </method>
+
+ <method name="getStreamVolume">
+ var stream = this._chatvideoinner._videostream;
+ return this.isremote ? Number(stream._ns.soundTransform.volume * 100) : stream.micro.gain;
+ </method>
+
+ <handler name="onheight" args="value">
+ if (null == initRatio || !respectRatio) {
+ return;
+ }
+ var videoHeight = value - this.videoInsetY - this.bottomBarHeight;
+ var expectedVideoWidth = videoHeight * initRatio;
+ var expectedPodWidth = expectedVideoWidth + this.videoInsetX;
+ if (this.width != expectedPodWidth) {
+ this.setAttribute("width", expectedPodWidth);
+ }
+ </handler>
+
+ <handler name="onwidth" args="value">
+ if (null == initRatio || !respectRatio) {
+ return;
+ }
+ var videoWidth = value - this.videoInsetX;
+ var expectedVideoHeight = videoWidth / initRatio;
+ var expectedPodHeight = expectedVideoHeight + this.videoInsetY + this.bottomBarHeight;
+ if (this.height != expectedPodHeight) {
+ this.setAttribute("height", expectedPodHeight);
+ }
+ </handler>
+ </class>
+</library>
http://git-wip-us.apache.org/repos/asf/openmeetings/blob/1cb3518f/openmeetings-flash/src/main/swf/video/editRecordStreamSWF10.lzx
----------------------------------------------------------------------
diff --git a/openmeetings-flash/src/main/swf/video/editRecordStreamSWF10.lzx b/openmeetings-flash/src/main/swf/video/editRecordStreamSWF10.lzx
index 2ef2c35..875489d 100644
--- a/openmeetings-flash/src/main/swf/video/editRecordStreamSWF10.lzx
+++ b/openmeetings-flash/src/main/swf/video/editRecordStreamSWF10.lzx
@@ -1,499 +1,499 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
-
--->
-<library>
-
-<!-- #######################
- Class editRecordStream
-
- Description:
- This Class shows a window where you can alter you Video-/Microphone- Input-Resources
- and start to stream. The app could also use the default values for Cam/Mic but
- most users don't know how to alter this (weather in System-Control-Panel or by Right Clicking
- on the Flash-Screen and *>Preferences>Camera* )
- So I think it is better if Users are forced to choose something from this list
-
- -->
-
-<class name="editRecordStreamSWF10" extends="labelExplorerBox" labelid="51"
- width="680" height="540" x="14" y="-540" >
- <switch>
- <when property="$as3">
- <passthrough>
- import flash.events.StatusEvent;
- import flash.media.Camera;
- import flash.media.Microphone;
- </passthrough>
- </when>
- </switch>
-
- <attribute name="initY" value="40" type="number" />
-
- <!---
- if true the user will see the dialog no matter if he has choosen "do not show again" or not
- -->
- <attribute name="doDefaultAnimation" value="true" type="boolean" />
- <attribute name="cam_default_width" value="320" type="number" />
- <attribute name="cam_default_height" value="260" type="number" />
- <attribute name="lastRecorded" value="" type="string" />
- <attribute name="isRunning" value="false" type="boolean" />
- <attribute name="recordingsCounter" value="5" type="number" />
- <attribute name="timerIsRunning" value="false" type="boolean" />
- <attribute name="counterDelegate" value="null" />
- <attribute name="executeAttachCamera" value="false" type="boolean" />
-
- <method name="startTimer">
- this.timerIsRunning = true;
- this.timerWasUnmutedTheFirstTime = true;
- lz.Timer.addTimer( this.counterDelegate, 1000 );
- </method>
-
- <method name="count" args="calleeObj">
- if (this.recordingsCounter != 0){
- this.recordingsCounter -= 1;
- lz.Timer.resetTimer(this.counterDelegate, 1000);
-
- this._text._info.setAttribute("text",""+this.recordingsCounter+" sec");
- } else {
- this._text.setAttribute("visibility","hidden");
- this.doStop();
- this.timerIsRunning = false;
- lz.Timer.removeTimer(this.counterDelegate);
- this.doPlay();
- }
- </method>
-
- <method name="startTimerToCount">
- if (!this.timerIsRunning) {
- this.startTimer();
- }
- </method>
-
- <handler name="oninit">
- <![CDATA[
- if (canvas.editRecordStream != null) {
- canvas.editRecordStream.destroy();
- }
- canvas.editRecordStream = this;
-
- this.counterDelegate = new LzDelegate(this, "count");
-
- if ($debug) Debug.write("editrecordstream ###################### ");
-
- initItems();
- if (this.doDefaultAnimation && !canvas.isInterview) {
- this._chooseDeviceAnimation.setAttribute('started', true);
- } else {
- this.setAttribute("y", initY);
- }
- this.executeAttachCamera = true;
- this.attachCamera();
- ]]>
- </handler>
-
- <handler name="ondestroy">
- <![CDATA[
- if ($debug) Debug.write("editrecordstream::ondestroy ");
- cleanVideos();
- canvas.editRecordStream = null;
- ]]>
- </handler>
-
- <method name="storeAVsettings">
- canvas.commonVideoViewContent.storeAVsettings(
- this.availableCams.getValue()
- , this.availableMics.getValue()
- , this.cam_default_width
- , this.cam_default_height
- );
- </method>
-
- <method name="doStartRecording">
- <![CDATA[
- this._btnStartRecording.setAttribute("enabled",false);
- this._play.setAttribute("enabled",false);
- this.recordingsCounter = 5;
- this._text.setAttribute("visibility","visible");
- this._text._info.setAttribute("text","5 sec");
- this.isRunning = true;
-
- var videoview = this._video.content._publisher._chatvideoinner._videostream;
- var _micro = canvas.commonVideoViewContent.getMic(this.availableMics.getValue());
- var _camera = canvas.commonVideoViewContent.getCam(this.availableCams.getValue(), cam_default_width, cam_default_height);
- if ($debug) Debug.write(_camera, _micro);
-
- if ($debug && _camera != null) Debug.warn("_camera.muted ", _camera.muted);
- if ($debug && _micro != null) Debug.warn("_micro.muted ", _micro.muted);
- if ((_camera != null && !_camera.muted) || (_micro != null && !_micro.muted)) {
- this.startTimer();
- }
-
- //start recording of client stream
- var t = new Date();
- this.lastRecorded = "TEST_SETUP_"+t.getTime();
- this._video.content._publisher.setAttribute("visibility","visible");
- this._video.content._viewer.setAttribute("visibility","hidden");
- videoview.record(this.lastRecorded,_camera,_micro);
- ]]>
- </method>
-
- <method name="doPlay">
- <![CDATA[
- if (this.lastRecorded == "") {
- //Error - nothing recorded yet
- if ($debug) Debug.warn("Nothing to Play");
- } else {
- this._play.setAttribute("enabled",true);
- this._video.content._publisher.setAttribute("visibility","hidden");
- this._video.content._viewer.setAttribute("visibility","visible");
- var videoview = this._video.content._viewer._chatvideoinner._videostream;
- videoview.justPlayStream(this.lastRecorded+".flv",0);
- }
- ]]>
- </method>
-
- <method name="doStop">
- if (this.isRunning) {
- this.isRunning = false;
- var videoview = this._video.content._publisher._chatvideoinner._videostream;
- this._btnStartRecording.setAttribute("enabled",true);
- videoview._stop();
- this.doPlay();
- }
- var videoviewViewer = this._video.content._viewer._chatvideoinner._videostream;
- videoviewViewer._stop();
- </method>
-
- <animator name="_chooseDeviceAnimation" started="false" attribute="y" to="40" duration="750" />
-
- <labelText fontstyle="bold" labelid="758" width="${ parent.width-2 }" height="30" multiline="true" y="20" />
-
- <method name="fillDeviceList" args="list,combo,prop">
- <![CDATA[
- //Initialize and get eventually stored property
- var dev = canvas.commonVideoViewContent.getAvSetting(prop);
- if ($debug) Debug.write("fillDeviceList:: ", prop, dev);
-
- //Get all availible devices
- var foundStoredDev = null;
- combo.addItem(canvas.getLabelName(159), -1);
- if ("-1" == dev) {
- foundStoredDev = "-1";
- }
- for (var eg = 0; eg < list.length; ++eg) {
- combo.addItem(list[eg], eg);
- var r = "" + eg;
- if (r == dev) {
- foundStoredDev = r;
- }
- }
- return foundStoredDev;
- ]]>
- </method>
-
- <method name="selectListItem" args="combo, selected, select">
- if (selected != null) {
- combo.selectItem(selected);
- } else {
- combo.selectItemAt(select ? 1 : 0);
- }
- </method>
-
- <!--
- Initialize the default settings for cam and resolution and attach the camera
- after we have made sure the values are there one time
- -->
- <method name="initItems">
- <![CDATA[
- //fill list of Cameras
- var cameras = Camera.names;
- var foundStoredCam = fillDeviceList(cameras, availableCams, "cam");
- selectListItem(availableCams, foundStoredCam, cameras.length > 0);
-
- //fill list of Mics
- var mics = Microphone.names;
- var foundStoredMic = fillDeviceList(mics, availableMics, "mic");
- selectListItem(availableMics, foundStoredMic, mics.length > 0);
-
- // settings
- var addCams = !canvas.currentRoomObj.audioOnly && cameras.length > 0;
- var addMics = mics.length > 0;
- ]]>
- </method>
-
- <method name="attachCamera">
- <![CDATA[
- //Don't execute before combobox items are not initialized
- if (!this.executeAttachCamera) {
- if ($debug) Debug.write("Return, executeAttachCamera is false");
- return;
- }
-
- if (_video == undefined) {
- if ($debug) Debug.write("Return, video not yet ready");
- return;
- }
- _video.content._publisher.setAttribute("visible", true);
- _video.content._viewer.setAttribute("visible", false);
- var videoview = this._video.content._publisher._chatvideoinner._videostream;
- //stop will not call clear as there is no NetStream
- videoview._stop();
- videoview.clear();
- var _camera = canvas.commonVideoViewContent.getCam(availableCams.getValue(), cam_default_width, cam_default_height);
- if (_camera != null) {
- videoview.attachCamera(_camera);
- }
- ]]>
- </method>
-
- <method name="cleanVideos">
- if (_video == undefined) return;
- //make sure stop and clear is called, as the _stop method does not work for all
- //videoviews in the device settings.
- _video.content._publisher._chatvideoinner._videostream._stop();
- _video.content._viewer._chatvideoinner._videostream._stop();
- _video.content._publisher._chatvideoinner._videostream.clear();
- _video.content._viewer._chatvideoinner._videostream.clear();
- if ($debug) Debug.write("Cleaned up videos and free resources");
- </method>
-
- <method name="updateVisibility">
- <![CDATA[
- var camVisible = availableCams.getValue() > -1;
- var micVisible = availableMics.getValue() > -1;
- var textVisible = !camVisible && !micVisible;
- this._btnStartRecording.setAttribute("visible", camVisible || micVisible);
- this._video.setAttribute("visible", camVisible);
- this._play.setAttribute("visible", camVisible || micVisible);
- this._level_meter.setAttribute("visible", micVisible);
- this.infoTextNoAV.setAttribute("visible", textVisible);
- this.availibleResolutionsLabel.setAttribute("visible", ((canvas.isInterview) ? false : camVisible));
- this.availibleResolutionsWarning.setAttribute("visible", ((canvas.isInterview) ? false : camVisible));
- this.availibleResolutions.setAttribute("visible", ((canvas.isInterview) ? false : camVisible));
- ]]>
- </method>
-
- <labelText name="availableCamsLabel" labelid="52" fontsize="11" x="10" y="80" width="$once{ parent.width-20 }" />
- <resetCombobox fontsize="11" name="availableCams" x="10" y="100" width="280" editable="false">
- <handler name="onselect">
- parent.updateVisibility();
- parent.attachCamera();
- </handler>
- </resetCombobox>
-
- <labelText name="availableMicsLabel" labelid="53" fontsize="11" x="10" y="120" width="$once{ parent.width-20 }" />
- <resetCombobox fontsize="11" name="availableMics" x="10" y="140" width="280" editable="false">
- <handler name="onselect">
- parent.updateVisibility();
- </handler>
- </resetCombobox>
-
- <labelText name="infoTextNoAV" labelid="452" multiline="true" width="280"
- fontsize="11" x="10" y="164" visibility="hidden" />
-
- <labelText name="availibleResolutionsLabel" labelid="1429"
- fontsize="11" x="10" y="164" width="$once{ parent.width-20 }" />
-
- <view name="availibleResolutionsWarning" x="272" y="164"
- resource="warning_icon_popup_devices_rsc" clickable="true">
- <labelTooltip multiline="true" labelid="1430" />
- </view>
-
- <resetCombobox fontsize="11" name="availibleResolutions" x="10" shownitems="10"
- y="184" width="280" editable="false">
- <!--- @keywords private -->
- <attribute name="counter" value="0" />
- <handler name="oninit">
- <![CDATA[
- var i = getItemAt(0);
- if ($debug) Debug.write("oninit ", this.selected, this, i);
- if (!this.selected && !!i) {
- selectItemAt(0);
- onselect.sendEvent(i);
- }
- ]]>
- </handler>
- <handler name="onselect" args="item">
- <![CDATA[
- if (!canvas.isInterview) {
- if ($debug) Debug.write("availibleResolutions::onselect cam [W x H] ", item.cam_width, item.cam_height);
- parent.setAttribute("cam_default_width", item.cam_width);
- parent.setAttribute("cam_default_height", item.cam_height);
-
- var py = parent.y < 0 ? 5 : parent.y;
- var maxWidth = Math.min(600, canvas.width - parent.x - 10)
- , maxHeight = Math.min(500, canvas.height - py - 10)
- , newWidth = maxWidth, newHeight = maxHeight;
- if (item.cam_width > 240) {
- newWidth = maxWidth + item.cam_width - 240;
- }
- if (item.cam_height > 180) {
- newHeight = maxHeight + item.cam_height - 180;
- }
-
- if (newWidth + parent.x + 10 > canvas.width) {
- newWidth = maxWidth;
- }
- if (newHeight + py + 10 > canvas.height) {
- newHeight = maxHeight;
- }
- parent.setAttribute("width", newWidth);
- parent.setAttribute("height", newHeight);
- }
- parent.attachCamera();
- ]]>
- </handler>
- <textlistitem datapath="myConfigSet:/config/availableCameraResolutions/resolution" >
- <attribute name="cam_width" value="320" type="number" />
- <attribute name="cam_height" value="240" type="number" />
- <handler name="ondata">
- <![CDATA[
- //if ($debug) Debug.write("ondata ", this);
- var type = this.datapath.xpathQuery('@type');
- this.cam_width = Number(this.datapath.xpathQuery('@width'));
- this.cam_height = Number(this.datapath.xpathQuery('@height'));
- this.setAttribute("text", "" + this.cam_width + "x" + this.cam_height + " [" + type + "]");
- var isDefault = this.datapath.xpathQuery('@isDefault') == "true";
-
- var width = canvas.commonVideoViewContent.getAvSetting("width");
- var height = canvas.commonVideoViewContent.getAvSetting("height");
- if (!!width && !!height && width == this.cam_width && height == this.cam_height) {
- parent.selectItemAt(parent.counter);
- parent.onselect.sendEvent(this);
- parent.selected = this;
- } else if (isDefault) {
- if ($debug) Debug.write("Found default one ", type);
- parent.selectItemAt(parent.counter);
- parent.onselect.sendEvent(this);
- }
- parent.counter++;
- ]]>
- </handler>
- </textlistitem>
- </resetCombobox>
-
- <simpleLabelButton name="_btnStartRecording" labelid="775" width="140" x="150" y="220" height="28">
- <handler name="onclick">
- parent._level_meter.startLevel();
- parent.doStartRecording();
- </handler>
- </simpleLabelButton>
-
- <view x="340" y="60" name="_video" clip="true"
- width="${ parent.width-this.x-10 }" height="${ parent.height-260 }">
- <view name="content">
- <videoObjectTestBroadcast name="_publisher"
- width="${ parent.parent.parent.cam_default_width }"
- height="${ parent.parent.parent.cam_default_height }">
- <handler name="sendCameraStatus" args="camStatus">
- if ($debug) Debug.write("sendCameraStatus -1- ",camStatus);
- if (camStatus == "Camera.Unmuted") {
- parent.parent.parent.startTimerToCount();
- }
- </handler>
-
- <handler name="sendMicroStatus" args="micStatus">
- if ($debug) Debug.write("sendMicroStatus -1- ",micStatus);
- if (micStatus == "Microphone.Unmuted") {
- parent.parent.parent.startTimerToCount();
- }
- </handler>
- </videoObjectTestBroadcast>
-
- <videoObjectPlayTestBroadcast name="_viewer" visibility="hidden"
- width="${ parent.parent.parent.cam_default_width }"
- height="${ parent.parent.parent.cam_default_height }" />
- </view>
-
- <om_vscrollbar />
- <om_hscrollbar />
- </view>
-
- <view name="_text" x="340" y="60" width="240" height="180" visibility="hidden">
- <text name="_info" resize="true" bgcolor="0xFFFFFF" align="right" fontsize="12" fontstyle="bold" />
- </view>
-
- <simpleLabelButton name="_play" y="${ parent.height-166 }" x="490" enabled="false" width="90" labelid="764">
- <handler name="onclick">
- parent.doPlay();
- </handler>
- </simpleLabelButton>
-
- <view name="_level_meter" x="340" y="${ parent.height-190 }" width="240" height="20" clip="true" bgcolor="0x000000">
- <!--- Level delegate, used to track level changes.
- @keywords private -->
- <attribute name="_leveldel" value="$once{new LzDelegate(this, '_updateLevel')}"/>
-
- <method name="_updateLevel" args="no">
- <![CDATA[
- if (parent._video.content._publisher._chatvideoinner._videostream.micro == null) {
- return;
- }
- this.setNewLevel(parent._video.content._publisher._chatvideoinner._videostream.micro.activityLevel);
- ]]>
- </method>
-
- <method name="startLevel">
- this._leveldel.register(lz.Idle, "onidle");
- </method>
-
- <method name="resetNewLevel">
- this._leveldel.unregisterAll();
- this.setNewLevel(0);
- </method>
-
- <method name="setNewLevel" args="no">
- <![CDATA[
- var newLevel = (238 / 100) * no;
- this._over.setAttribute("width", 238 - newLevel);
- this._over.setAttribute("x", 1 + newLevel);
- ]]>
- </method>
-
- <view name="_bg" width="238" height="18" x="1" y="1" bgcolor="0xFFFFFF" />
- <view name="_grip" resource="level_meter_rsc" x="1" y="1" />
- <view name="_over" width="238" height="18" x="1" y="1" bgcolor="0xFFFFFF" />
- <labelText labelid="767" x="2" y="2" height="16" width="236" resize="false" />
- </view>
-
- <view y="${ parent.height-98 }" resource="test_setup_info_rsc" x="16" />
-
- <labelText fontstyle="bold" labelid="765" x="39" y="${ parent.height-100 }"
- width="${ parent.width-50 }" multiline="true" />
-
- <simpleLabelButton fontsize="11" labelid="918" x="${ parent.width-220 }" y="${ parent.height-50 }"
- height="28" width="100">
- <handler name="onclick">
- parent.cleanVideos();
- parent.close();
- </handler>
- </simpleLabelButton>
-
- <simpleLabelButton fontsize="11" labelid="144" x="${ parent.width-110 }" y="${ parent.height-50 }"
- height="28" width="100" >
- <handler name="onclick">
- parent.cleanVideos();
- parent.storeAVsettings();
- parent.close();
- </handler>
- </simpleLabelButton>
-</class>
-
-</library>
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+-->
+<library>
+
+<!-- #######################
+ Class editRecordStream
+
+ Description:
+ This Class shows a window where you can alter you Video-/Microphone- Input-Resources
+ and start to stream. The app could also use the default values for Cam/Mic but
+ most users don't know how to alter this (weather in System-Control-Panel or by Right Clicking
+ on the Flash-Screen and *>Preferences>Camera* )
+ So I think it is better if Users are forced to choose something from this list
+
+ -->
+
+<class name="editRecordStreamSWF10" extends="labelExplorerBox" labelid="51"
+ width="680" height="540" x="14" y="-540" >
+ <switch>
+ <when property="$as3">
+ <passthrough>
+ import flash.events.StatusEvent;
+ import flash.media.Camera;
+ import flash.media.Microphone;
+ </passthrough>
+ </when>
+ </switch>
+
+ <attribute name="initY" value="40" type="number" />
+
+ <!---
+ if true the user will see the dialog no matter if he has choosen "do not show again" or not
+ -->
+ <attribute name="doDefaultAnimation" value="true" type="boolean" />
+ <attribute name="cam_default_width" value="320" type="number" />
+ <attribute name="cam_default_height" value="260" type="number" />
+ <attribute name="lastRecorded" value="" type="string" />
+ <attribute name="isRunning" value="false" type="boolean" />
+ <attribute name="recordingsCounter" value="5" type="number" />
+ <attribute name="timerIsRunning" value="false" type="boolean" />
+ <attribute name="counterDelegate" value="null" />
+ <attribute name="executeAttachCamera" value="false" type="boolean" />
+
+ <method name="startTimer">
+ this.timerIsRunning = true;
+ this.timerWasUnmutedTheFirstTime = true;
+ lz.Timer.addTimer( this.counterDelegate, 1000 );
+ </method>
+
+ <method name="count" args="calleeObj">
+ if (this.recordingsCounter != 0){
+ this.recordingsCounter -= 1;
+ lz.Timer.resetTimer(this.counterDelegate, 1000);
+
+ this._text._info.setAttribute("text",""+this.recordingsCounter+" sec");
+ } else {
+ this._text.setAttribute("visibility","hidden");
+ this.doStop();
+ this.timerIsRunning = false;
+ lz.Timer.removeTimer(this.counterDelegate);
+ this.doPlay();
+ }
+ </method>
+
+ <method name="startTimerToCount">
+ if (!this.timerIsRunning) {
+ this.startTimer();
+ }
+ </method>
+
+ <handler name="oninit">
+ <![CDATA[
+ if (canvas.editRecordStream != null) {
+ canvas.editRecordStream.destroy();
+ }
+ canvas.editRecordStream = this;
+
+ this.counterDelegate = new LzDelegate(this, "count");
+
+ if ($debug) Debug.write("editrecordstream ###################### ");
+
+ initItems();
+ if (this.doDefaultAnimation && !canvas.isInterview) {
+ this._chooseDeviceAnimation.setAttribute('started', true);
+ } else {
+ this.setAttribute("y", initY);
+ }
+ this.executeAttachCamera = true;
+ this.attachCamera();
+ ]]>
+ </handler>
+
+ <handler name="ondestroy">
+ <![CDATA[
+ if ($debug) Debug.write("editrecordstream::ondestroy ");
+ cleanVideos();
+ canvas.editRecordStream = null;
+ ]]>
+ </handler>
+
+ <method name="storeAVsettings">
+ canvas.commonVideoViewContent.storeAVsettings(
+ this.availableCams.getValue()
+ , this.availableMics.getValue()
+ , this.cam_default_width
+ , this.cam_default_height
+ );
+ </method>
+
+ <method name="doStartRecording">
+ <![CDATA[
+ this._btnStartRecording.setAttribute("enabled",false);
+ this._play.setAttribute("enabled",false);
+ this.recordingsCounter = 5;
+ this._text.setAttribute("visibility","visible");
+ this._text._info.setAttribute("text","5 sec");
+ this.isRunning = true;
+
+ var videoview = this._video.content._publisher._chatvideoinner._videostream;
+ var _micro = canvas.commonVideoViewContent.getMic(this.availableMics.getValue());
+ var _camera = canvas.commonVideoViewContent.getCam(this.availableCams.getValue(), cam_default_width, cam_default_height);
+ if ($debug) Debug.write(_camera, _micro);
+
+ if ($debug && _camera != null) Debug.warn("_camera.muted ", _camera.muted);
+ if ($debug && _micro != null) Debug.warn("_micro.muted ", _micro.muted);
+ if ((_camera != null && !_camera.muted) || (_micro != null && !_micro.muted)) {
+ this.startTimer();
+ }
+
+ //start recording of client stream
+ var t = new Date();
+ this.lastRecorded = "TEST_SETUP_"+t.getTime();
+ this._video.content._publisher.setAttribute("visibility","visible");
+ this._video.content._viewer.setAttribute("visibility","hidden");
+ videoview.record(this.lastRecorded,_camera,_micro);
+ ]]>
+ </method>
+
+ <method name="doPlay">
+ <![CDATA[
+ if (this.lastRecorded == "") {
+ //Error - nothing recorded yet
+ if ($debug) Debug.warn("Nothing to Play");
+ } else {
+ this._play.setAttribute("enabled",true);
+ this._video.content._publisher.setAttribute("visibility","hidden");
+ this._video.content._viewer.setAttribute("visibility","visible");
+ var videoview = this._video.content._viewer._chatvideoinner._videostream;
+ videoview.justPlayStream(this.lastRecorded+".flv",0);
+ }
+ ]]>
+ </method>
+
+ <method name="doStop">
+ if (this.isRunning) {
+ this.isRunning = false;
+ var videoview = this._video.content._publisher._chatvideoinner._videostream;
+ this._btnStartRecording.setAttribute("enabled",true);
+ videoview._stop();
+ this.doPlay();
+ }
+ var videoviewViewer = this._video.content._viewer._chatvideoinner._videostream;
+ videoviewViewer._stop();
+ </method>
+
+ <animator name="_chooseDeviceAnimation" started="false" attribute="y" to="40" duration="750" />
+
+ <labelText fontstyle="bold" labelid="758" width="${ parent.width-2 }" height="30" multiline="true" y="20" />
+
+ <method name="fillDeviceList" args="list,combo,prop">
+ <![CDATA[
+ //Initialize and get eventually stored property
+ var dev = canvas.commonVideoViewContent.getAvSetting(prop);
+ if ($debug) Debug.write("fillDeviceList:: ", prop, dev);
+
+ //Get all availible devices
+ var foundStoredDev = null;
+ combo.addItem(canvas.getLabelName(159), -1);
+ if ("-1" == dev) {
+ foundStoredDev = "-1";
+ }
+ for (var eg = 0; eg < list.length; ++eg) {
+ combo.addItem(list[eg], eg);
+ var r = "" + eg;
+ if (r == dev) {
+ foundStoredDev = r;
+ }
+ }
+ return foundStoredDev;
+ ]]>
+ </method>
+
+ <method name="selectListItem" args="combo, selected, select">
+ if (selected != null) {
+ combo.selectItem(selected);
+ } else {
+ combo.selectItemAt(select ? 1 : 0);
+ }
+ </method>
+
+ <!--
+ Initialize the default settings for cam and resolution and attach the camera
+ after we have made sure the values are there one time
+ -->
+ <method name="initItems">
+ <![CDATA[
+ //fill list of Cameras
+ var cameras = Camera.names;
+ var foundStoredCam = fillDeviceList(cameras, availableCams, "cam");
+ selectListItem(availableCams, foundStoredCam, cameras.length > 0);
+
+ //fill list of Mics
+ var mics = Microphone.names;
+ var foundStoredMic = fillDeviceList(mics, availableMics, "mic");
+ selectListItem(availableMics, foundStoredMic, mics.length > 0);
+
+ // settings
+ var addCams = !canvas.currentRoomObj.audioOnly && cameras.length > 0;
+ var addMics = mics.length > 0;
+ ]]>
+ </method>
+
+ <method name="attachCamera">
+ <![CDATA[
+ //Don't execute before combobox items are not initialized
+ if (!this.executeAttachCamera) {
+ if ($debug) Debug.write("Return, executeAttachCamera is false");
+ return;
+ }
+
+ if (_video == undefined) {
+ if ($debug) Debug.write("Return, video not yet ready");
+ return;
+ }
+ _video.content._publisher.setAttribute("visible", true);
+ _video.content._viewer.setAttribute("visible", false);
+ var videoview = this._video.content._publisher._chatvideoinner._videostream;
+ //stop will not call clear as there is no NetStream
+ videoview._stop();
+ videoview.clear();
+ var _camera = canvas.commonVideoViewContent.getCam(availableCams.getValue(), cam_default_width, cam_default_height);
+ if (_camera != null) {
+ videoview.attachCamera(_camera);
+ }
+ ]]>
+ </method>
+
+ <method name="cleanVideos">
+ if (_video == undefined) return;
+ //make sure stop and clear is called, as the _stop method does not work for all
+ //videoviews in the device settings.
+ _video.content._publisher._chatvideoinner._videostream._stop();
+ _video.content._viewer._chatvideoinner._videostream._stop();
+ _video.content._publisher._chatvideoinner._videostream.clear();
+ _video.content._viewer._chatvideoinner._videostream.clear();
+ if ($debug) Debug.write("Cleaned up videos and free resources");
+ </method>
+
+ <method name="updateVisibility">
+ <![CDATA[
+ var camVisible = availableCams.getValue() > -1;
+ var micVisible = availableMics.getValue() > -1;
+ var textVisible = !camVisible && !micVisible;
+ this._btnStartRecording.setAttribute("visible", camVisible || micVisible);
+ this._video.setAttribute("visible", camVisible);
+ this._play.setAttribute("visible", camVisible || micVisible);
+ this._level_meter.setAttribute("visible", micVisible);
+ this.infoTextNoAV.setAttribute("visible", textVisible);
+ this.availibleResolutionsLabel.setAttribute("visible", ((canvas.isInterview) ? false : camVisible));
+ this.availibleResolutionsWarning.setAttribute("visible", ((canvas.isInterview) ? false : camVisible));
+ this.availibleResolutions.setAttribute("visible", ((canvas.isInterview) ? false : camVisible));
+ ]]>
+ </method>
+
+ <labelText name="availableCamsLabel" labelid="52" fontsize="11" x="10" y="80" width="$once{ parent.width-20 }" />
+ <resetCombobox fontsize="11" name="availableCams" x="10" y="100" width="280" editable="false">
+ <handler name="onselect">
+ parent.updateVisibility();
+ parent.attachCamera();
+ </handler>
+ </resetCombobox>
+
+ <labelText name="availableMicsLabel" labelid="53" fontsize="11" x="10" y="120" width="$once{ parent.width-20 }" />
+ <resetCombobox fontsize="11" name="availableMics" x="10" y="140" width="280" editable="false">
+ <handler name="onselect">
+ parent.updateVisibility();
+ </handler>
+ </resetCombobox>
+
+ <labelText name="infoTextNoAV" labelid="452" multiline="true" width="280"
+ fontsize="11" x="10" y="164" visibility="hidden" />
+
+ <labelText name="availibleResolutionsLabel" labelid="1429"
+ fontsize="11" x="10" y="164" width="$once{ parent.width-20 }" />
+
+ <view name="availibleResolutionsWarning" x="272" y="164"
+ resource="warning_icon_popup_devices_rsc" clickable="true">
+ <labelTooltip multiline="true" labelid="1430" />
+ </view>
+
+ <resetCombobox fontsize="11" name="availibleResolutions" x="10" shownitems="10"
+ y="184" width="280" editable="false">
+ <!--- @keywords private -->
+ <attribute name="counter" value="0" />
+ <handler name="oninit">
+ <![CDATA[
+ var i = getItemAt(0);
+ if ($debug) Debug.write("oninit ", this.selected, this, i);
+ if (!this.selected && !!i) {
+ selectItemAt(0);
+ onselect.sendEvent(i);
+ }
+ ]]>
+ </handler>
+ <handler name="onselect" args="item">
+ <![CDATA[
+ if (!canvas.isInterview) {
+ if ($debug) Debug.write("availibleResolutions::onselect cam [W x H] ", item.cam_width, item.cam_height);
+ parent.setAttribute("cam_default_width", item.cam_width);
+ parent.setAttribute("cam_default_height", item.cam_height);
+
+ var py = parent.y < 0 ? 5 : parent.y;
+ var maxWidth = Math.min(600, canvas.width - parent.x - 10)
+ , maxHeight = Math.min(500, canvas.height - py - 10)
+ , newWidth = maxWidth, newHeight = maxHeight;
+ if (item.cam_width > 240) {
+ newWidth = maxWidth + item.cam_width - 240;
+ }
+ if (item.cam_height > 180) {
+ newHeight = maxHeight + item.cam_height - 180;
+ }
+
+ if (newWidth + parent.x + 10 > canvas.width) {
+ newWidth = maxWidth;
+ }
+ if (newHeight + py + 10 > canvas.height) {
+ newHeight = maxHeight;
+ }
+ parent.setAttribute("width", newWidth);
+ parent.setAttribute("height", newHeight);
+ }
+ parent.attachCamera();
+ ]]>
+ </handler>
+ <textlistitem datapath="myConfigSet:/config/availableCameraResolutions/resolution" >
+ <attribute name="cam_width" value="320" type="number" />
+ <attribute name="cam_height" value="240" type="number" />
+ <handler name="ondata">
+ <![CDATA[
+ //if ($debug) Debug.write("ondata ", this);
+ var type = this.datapath.xpathQuery('@type');
+ this.cam_width = Number(this.datapath.xpathQuery('@width'));
+ this.cam_height = Number(this.datapath.xpathQuery('@height'));
+ this.setAttribute("text", "" + this.cam_width + "x" + this.cam_height + " [" + type + "]");
+ var isDefault = this.datapath.xpathQuery('@isDefault') == "true";
+
+ var width = canvas.commonVideoViewContent.getAvSetting("width");
+ var height = canvas.commonVideoViewContent.getAvSetting("height");
+ if (!!width && !!height && width == this.cam_width && height == this.cam_height) {
+ parent.selectItemAt(parent.counter);
+ parent.onselect.sendEvent(this);
+ parent.selected = this;
+ } else if (isDefault) {
+ if ($debug) Debug.write("Found default one ", type);
+ parent.selectItemAt(parent.counter);
+ parent.onselect.sendEvent(this);
+ }
+ parent.counter++;
+ ]]>
+ </handler>
+ </textlistitem>
+ </resetCombobox>
+
+ <simpleLabelButton name="_btnStartRecording" labelid="775" width="140" x="150" y="220" height="28">
+ <handler name="onclick">
+ parent._level_meter.startLevel();
+ parent.doStartRecording();
+ </handler>
+ </simpleLabelButton>
+
+ <view x="340" y="60" name="_video" clip="true"
+ width="${ parent.width-this.x-10 }" height="${ parent.height-260 }">
+ <view name="content">
+ <videoObjectTestBroadcast name="_publisher"
+ width="${ parent.parent.parent.cam_default_width }"
+ height="${ parent.parent.parent.cam_default_height }">
+ <handler name="sendCameraStatus" args="camStatus">
+ if ($debug) Debug.write("sendCameraStatus -1- ",camStatus);
+ if (camStatus == "Camera.Unmuted") {
+ parent.parent.parent.startTimerToCount();
+ }
+ </handler>
+
+ <handler name="sendMicroStatus" args="micStatus">
+ if ($debug) Debug.write("sendMicroStatus -1- ",micStatus);
+ if (micStatus == "Microphone.Unmuted") {
+ parent.parent.parent.startTimerToCount();
+ }
+ </handler>
+ </videoObjectTestBroadcast>
+
+ <videoObjectPlayTestBroadcast name="_viewer" visibility="hidden"
+ width="${ parent.parent.parent.cam_default_width }"
+ height="${ parent.parent.parent.cam_default_height }" />
+ </view>
+
+ <om_vscrollbar />
+ <om_hscrollbar />
+ </view>
+
+ <view name="_text" x="340" y="60" width="240" height="180" visibility="hidden">
+ <text name="_info" resize="true" bgcolor="0xFFFFFF" align="right" fontsize="12" fontstyle="bold" />
+ </view>
+
+ <simpleLabelButton name="_play" y="${ parent.height-166 }" x="490" enabled="false" width="90" labelid="764">
+ <handler name="onclick">
+ parent.doPlay();
+ </handler>
+ </simpleLabelButton>
+
+ <view name="_level_meter" x="340" y="${ parent.height-190 }" width="240" height="20" clip="true" bgcolor="0x000000">
+ <!--- Level delegate, used to track level changes.
+ @keywords private -->
+ <attribute name="_leveldel" value="$once{new LzDelegate(this, '_updateLevel')}"/>
+
+ <method name="_updateLevel" args="no">
+ <![CDATA[
+ if (parent._video.content._publisher._chatvideoinner._videostream.micro == null) {
+ return;
+ }
+ this.setNewLevel(parent._video.content._publisher._chatvideoinner._videostream.micro.activityLevel);
+ ]]>
+ </method>
+
+ <method name="startLevel">
+ this._leveldel.register(lz.Idle, "onidle");
+ </method>
+
+ <method name="resetNewLevel">
+ this._leveldel.unregisterAll();
+ this.setNewLevel(0);
+ </method>
+
+ <method name="setNewLevel" args="no">
+ <![CDATA[
+ var newLevel = (238 / 100) * no;
+ this._over.setAttribute("width", 238 - newLevel);
+ this._over.setAttribute("x", 1 + newLevel);
+ ]]>
+ </method>
+
+ <view name="_bg" width="238" height="18" x="1" y="1" bgcolor="0xFFFFFF" />
+ <view name="_grip" resource="level_meter_rsc" x="1" y="1" />
+ <view name="_over" width="238" height="18" x="1" y="1" bgcolor="0xFFFFFF" />
+ <labelText labelid="767" x="2" y="2" height="16" width="236" resize="false" />
+ </view>
+
+ <view y="${ parent.height-98 }" resource="test_setup_info_rsc" x="16" />
+
+ <labelText fontstyle="bold" labelid="765" x="39" y="${ parent.height-100 }"
+ width="${ parent.width-50 }" multiline="true" />
+
+ <simpleLabelButton fontsize="11" labelid="918" x="${ parent.width-220 }" y="${ parent.height-50 }"
+ height="28" width="100">
+ <handler name="onclick">
+ parent.cleanVideos();
+ parent.close();
+ </handler>
+ </simpleLabelButton>
+
+ <simpleLabelButton fontsize="11" labelid="144" x="${ parent.width-110 }" y="${ parent.height-50 }"
+ height="28" width="100" >
+ <handler name="onclick">
+ parent.cleanVideos();
+ parent.storeAVsettings();
+ parent.close();
+ </handler>
+ </simpleLabelButton>
+</class>
+
+</library>