Merge branch 'pods_vol4' of https://github.com/antobinary/bigbluebutton into antobinary-pods_vol4

This commit is contained in:
Richard Alam 2017-10-29 12:23:30 -07:00
commit ffab469980
21 changed files with 155 additions and 168 deletions

View File

@ -1,35 +0,0 @@
//package org.bigbluebutton.core.apps.presentation
//
//import org.bigbluebutton.common2.msgs._
//import org.bigbluebutton.common2.domain.PresentationVO
//import org.bigbluebutton.core.apps.Presentation
//import org.bigbluebutton.core.bus.MessageBus
//import org.bigbluebutton.core.running.{ LiveMeeting, OutMsgRouter }
//
//trait GetPresentationInfoReqMsgHdlr {
// this: PresentationApp2x =>
//
// def handle(
// msg: GetPresentationInfoReqMsg,
// liveMeeting: LiveMeeting, bus: MessageBus
// ): Unit = {
// log.debug("Received GetPresentationInfoReqMsg")
//
// def broadcastEvent(msg: GetPresentationInfoReqMsg, presentations: Vector[Presentation]): Unit = {
// val routing = Routing.addMsgToClientRouting(MessageTypes.DIRECT, liveMeeting.props.meetingProp.intId, msg.header.userId)
// val envelope = BbbCoreEnvelope(GetPresentationInfoRespMsg.NAME, routing)
// val header = BbbClientMsgHeader(GetPresentationInfoRespMsg.NAME, liveMeeting.props.meetingProp.intId, msg.header.userId)
//
// val presVOs = presentations.map { p =>
// PresentationVO(p.id, p.name, p.current, p.pages.values.toVector, p.downloadable)
// }
//
// val body = GetPresentationInfoRespMsgBody(presVOs)
// val event = GetPresentationInfoRespMsg(header, body)
// val msgEvent = BbbCommonEnvCoreMsg(envelope, event)
// bus.outGW.send(msgEvent)
// }
//
// broadcastEvent(msg, getPresentationInfo(liveMeeting)) //
// }
//}

View File

@ -9,7 +9,6 @@ import org.bigbluebutton.core.running.LiveMeeting
class PresentationApp2x(implicit val context: ActorContext)
extends NewPresentationMsgHdlr
with ResizeAndMovePagePubMsgHdlr
with RemovePresentationPubMsgHdlr
with PresentationUploadTokenReqMsgHdlr
with PreuploadedPresentationsPubMsgHdlr
with PresentationConversionUpdatePubMsgHdlr

View File

@ -1,32 +0,0 @@
package org.bigbluebutton.core.apps.presentation
import org.bigbluebutton.common2.msgs._
import org.bigbluebutton.core.bus.MessageBus
import org.bigbluebutton.core.running.{ LiveMeeting }
trait RemovePresentationPubMsgHdlr {
this: PresentationApp2x =>
def handle(
msg: RemovePresentationPubMsg,
liveMeeting: LiveMeeting, bus: MessageBus
): Unit = {
def broadcastEvent(msg: RemovePresentationPubMsg): Unit = {
val routing = Routing.addMsgToClientRouting(MessageTypes.BROADCAST_TO_MEETING, liveMeeting.props.meetingProp.intId, msg.header.userId)
val envelope = BbbCoreEnvelope(RemovePresentationEvtMsg.NAME, routing)
val header = BbbClientMsgHeader(RemovePresentationEvtMsg.NAME, liveMeeting.props.meetingProp.intId, msg.header.userId)
val body = RemovePresentationEvtMsgBody(msg.body.presentationId)
val event = RemovePresentationEvtMsg(header, body)
val msgEvent = BbbCommonEnvCoreMsg(envelope, event)
bus.outGW.send(msgEvent)
}
for {
presentation <- removePresentation(liveMeeting, msg.body.presentationId)
} yield {
broadcastEvent(msg)
}
}
}

View File

@ -1,33 +0,0 @@
//package org.bigbluebutton.core.apps.presentation
//
//import org.bigbluebutton.common2.msgs._
//import org.bigbluebutton.core.bus.MessageBus
//import org.bigbluebutton.core.running.LiveMeeting
//
//trait SetCurrentPresentationPubMsgHdlr {
// this: PresentationApp2x =>
//
// def handle(
// msg: SetCurrentPresentationPubMsg,
// liveMeeting: LiveMeeting, bus: MessageBus
// ): Unit = {
//
// def broadcastEvent(msg: SetCurrentPresentationPubMsg): Unit = {
// val routing = Routing.addMsgToClientRouting(MessageTypes.BROADCAST_TO_MEETING, liveMeeting.props.meetingProp.intId, msg.header.userId)
// val envelope = BbbCoreEnvelope(SetCurrentPresentationEvtMsg.NAME, routing)
// val header = BbbClientMsgHeader(SetCurrentPresentationEvtMsg.NAME, liveMeeting.props.meetingProp.intId, msg.header.userId)
//
// val body = SetCurrentPresentationEvtMsgBody(msg.body.podId, msg.body.presentationId)
// val event = SetCurrentPresentationEvtMsg(header, body)
// val msgEvent = BbbCommonEnvCoreMsg(envelope, event)
// bus.outGW.send(msgEvent)
// }
//
// for {
//// pod <- getPr
// presentation <- setCurrentPresentation(liveMeeting, msg.body.presentationId)
// } yield {
// broadcastEvent(msg)
// }
// }
//}

View File

@ -11,6 +11,7 @@ class PresentationPodHdlrs(implicit val context: ActorContext)
with PresentationConversionCompletedSysPubMsgHdlr
with SetCurrentPagePubMsgHdlr
with SetPresenterInPodReqMsgHdlr
with RemovePresentationPubMsgHdlr
with RemovePresentationPodPubMsgHdlr {
val log = Logging(context.system, getClass)

View File

@ -0,0 +1,50 @@
package org.bigbluebutton.core.apps.presentationpod
import org.bigbluebutton.common2.msgs._
import org.bigbluebutton.core.bus.MessageBus
import org.bigbluebutton.core.domain.MeetingState2x
import org.bigbluebutton.core.running.LiveMeeting
trait RemovePresentationPubMsgHdlr {
this: PresentationPodHdlrs =>
def handle(
msg: RemovePresentationPubMsg, state: MeetingState2x,
liveMeeting: LiveMeeting, bus: MessageBus
): MeetingState2x = {
def broadcastRemovePresentationEvtMsg(podId: String, userId: String, presentationId: String): Unit = {
val routing = Routing.addMsgToClientRouting(
MessageTypes.BROADCAST_TO_MEETING,
liveMeeting.props.meetingProp.intId, userId
)
val envelope = BbbCoreEnvelope(RemovePresentationEvtMsg.NAME, routing)
val header = BbbClientMsgHeader(RemovePresentationEvtMsg.NAME, liveMeeting.props.meetingProp.intId, userId)
val body = RemovePresentationEvtMsgBody(podId, presentationId)
val event = RemovePresentationEvtMsg(header, body)
val msgEvent = BbbCommonEnvCoreMsg(envelope, event)
bus.outGW.send(msgEvent)
}
val podId = msg.body.podId
val presentationId = msg.body.presentationId
val newState = for {
pod <- PresentationPodsApp.getPresentationPod(state, podId)
} yield {
broadcastRemovePresentationEvtMsg(pod.id, msg.header.userId, presentationId)
val pods = state.presentationPodManager.removePresentationInPod(pod.id, presentationId)
log.warning("_____ RemovePresentationPubMsgHdlr _ " + pods.printPods())
state.update(pods)
}
newState match {
case Some(ns) => ns
case None => state
}
}
}

View File

@ -132,6 +132,19 @@ case class PresentationPodManager(presentationPods: collection.immutable.Map[Str
}
}
def removePresentationInPod(podId: String, presentationId: String): PresentationPodManager = {
val updatedManager = for {
pod <- getPod(podId)
} yield {
updatePresentationPod(pod.removePresentation(presentationId))
}
updatedManager match {
case Some(ns) => ns
case None => this
}
}
def printPods(): String = {
var a = s"printPods (${presentationPods.values.size}):"
presentationPods.values.foreach(pod => a = a.concat(pod.printPod()))

View File

@ -286,7 +286,6 @@ class MeetingActor(
// Presentation
case m: ResizeAndMovePagePubMsg => presentationApp2x.handle(m, liveMeeting, msgBus)
case m: RemovePresentationPubMsg => presentationApp2x.handle(m, liveMeeting, msgBus)
case m: PresentationUploadTokenReqMsg => presentationApp2x.handle(m, liveMeeting, msgBus)
case m: PreuploadedPresentationsSysPubMsg => presentationApp2x.handle(m, liveMeeting, msgBus)
case m: PresentationConversionUpdateSysPubMsg => presentationApp2x.handle(m, liveMeeting, msgBus)
@ -303,6 +302,7 @@ class MeetingActor(
case m: PresentationConversionCompletedSysPubMsg => state = presentationPodsApp.handle(m, state, liveMeeting, msgBus)
case m: SetCurrentPagePubMsg => state = presentationPodsApp.handle(m, state, liveMeeting, msgBus)
case m: SetPresenterInPodReqMsg => state = presentationPodsApp.handle(m, state, liveMeeting, msgBus)
case m: RemovePresentationPubMsg => state = presentationPodsApp.handle(m, state, liveMeeting, msgBus)
// Caption
case m: EditCaptionHistoryPubMsg => captionApp2x.handle(m, liveMeeting, msgBus)

View File

@ -12,9 +12,6 @@ object ResizeAndMovePagePubMsg { val NAME = "ResizeAndMovePagePubMsg"}
case class ResizeAndMovePagePubMsg(header: BbbClientMsgHeader, body: ResizeAndMovePagePubMsgBody) extends StandardMsg
case class ResizeAndMovePagePubMsgBody(presentationId: String, pageId: String, xOffset: Double, yOffset: Double, widthRatio: Double, heightRatio: Double)
object RemovePresentationPubMsg { val NAME = "RemovePresentationPubMsg"}
case class RemovePresentationPubMsg(header: BbbClientMsgHeader, body: RemovePresentationPubMsgBody) extends StandardMsg
case class RemovePresentationPubMsgBody(presentationId: String)
// ------------ client to akka-apps ------------
@ -46,10 +43,6 @@ object ResizeAndMovePageEvtMsg { val NAME = "ResizeAndMovePageEvtMsg"}
case class ResizeAndMovePageEvtMsg(header: BbbClientMsgHeader, body: ResizeAndMovePageEvtMsgBody) extends BbbCoreMsg
case class ResizeAndMovePageEvtMsgBody(presentationId: String, pageId: String, xOffset: Double, yOffset: Double, widthRatio: Double, heightRatio: Double)
object RemovePresentationEvtMsg { val NAME = "RemovePresentationEvtMsg"}
case class RemovePresentationEvtMsg(header: BbbClientMsgHeader, body: RemovePresentationEvtMsgBody) extends BbbCoreMsg
case class RemovePresentationEvtMsgBody(presentationId: String)
// html5 client only
object SyncGetPresentationInfoRespMsg { val NAME = "SyncGetPresentationInfoRespMsg"}

View File

@ -31,6 +31,10 @@ case class SetCurrentPagePubMsgBody(podId: String, presentationId: String, pageI
object SetPresenterInPodReqMsg { val NAME = "SetPresenterInPodReqMsg"}
case class SetPresenterInPodReqMsg(header: BbbClientMsgHeader, body: SetPresenterInPodReqMsgBody) extends StandardMsg
case class SetPresenterInPodReqMsgBody(podId: String, nextPresenterId: String)
object RemovePresentationPubMsg { val NAME = "RemovePresentationPubMsg"}
case class RemovePresentationPubMsg(header: BbbClientMsgHeader, body: RemovePresentationPubMsgBody) extends StandardMsg
case class RemovePresentationPubMsgBody(podId: String, presentationId: String)
// ------------ client to akka-apps ------------
@ -112,6 +116,10 @@ case class SetCurrentPageEvtMsgBody(podId: String, presentationId: String, pageI
object SetPresenterInPodRespMsg { val NAME = "SetPresenterInPodRespMsg"}
case class SetPresenterInPodRespMsg(header: BbbClientMsgHeader, body: SetPresenterInPodRespMsgBody) extends StandardMsg
case class SetPresenterInPodRespMsgBody(podId: String, nextPresenterId: String)
object RemovePresentationEvtMsg { val NAME = "RemovePresentationEvtMsg"}
case class RemovePresentationEvtMsg(header: BbbClientMsgHeader, body: RemovePresentationEvtMsgBody) extends BbbCoreMsg
case class RemovePresentationEvtMsgBody(podId: String, presentationId: String)
// ------------ akka-apps to client ------------

View File

@ -128,7 +128,7 @@ package org.bigbluebutton.main.api
}
private function handleDeletePresentationRequest(presentationID:String):void {
var rEvent:RemovePresentationEvent = new RemovePresentationEvent(RemovePresentationEvent.REMOVE_PRESENTATION_EVENT);
var rEvent:RemovePresentationEvent = new RemovePresentationEvent(RemovePresentationEvent.REMOVE_PRESENTATION_EVENT, "unknown");
rEvent.presentationName = presentationID;
_dispatcher.dispatchEvent(rEvent);
}

View File

@ -252,7 +252,7 @@ package org.bigbluebutton.modules.present.business
}
public function removePresentation(e:RemovePresentationEvent):void {
sender.removePresentation(e.presentationName);
sender.removePresentation(e.podId, e.presentationName);
}
/**

View File

@ -47,10 +47,11 @@ package org.bigbluebutton.modules.present.events
public var presentationName:String;
public var podId: String;
public function PresenterCommands(type:String, slideNumber:Number = 0)
public function PresenterCommands(type:String, _podId: String, slideNumber:Number = 0)
{
this.slideNumber = slideNumber;
super(type, true, false);
this.podId = _podId;
this.slideNumber = slideNumber;
}
}

View File

@ -32,10 +32,12 @@ package org.bigbluebutton.modules.present.events
public static const UPDATE_DOWNLOADABLE_FILES_EVENT:String = "Update Downloadable Files Event";
public var presentationName:String;
public var podId: String;
public function RemovePresentationEvent(type:String, bubbles:Boolean=true, cancelable:Boolean=false)
public function RemovePresentationEvent(type:String, _podId: String, bubbles:Boolean=true, cancelable:Boolean=false)
{
super(type, bubbles, cancelable);
this.podId = _podId;
}
}

View File

@ -144,25 +144,25 @@ package org.bigbluebutton.modules.present.services
}
}
public function removeAllPresentations():void {
// model.removeAllPresentations();
public function removeAllPresentations(podId: String):void {
podManager.getPod(podId).removeAllPresentations();
}
public function removePresentation(presentationID:String):void {
// var removedEvent:RemovePresentationEvent = new RemovePresentationEvent(RemovePresentationEvent.PRESENTATION_REMOVED_EVENT);
// removedEvent.presentationName = presentationID;
// dispatcher.dispatchEvent(removedEvent);
//
// var currPresentation:Presentation = model.getCurrentPresentation();
//
// if(currPresentation && presentationID == currPresentation.id) {
// var uploadEvent:UploadEvent = new UploadEvent(UploadEvent.CLEAR_PRESENTATION);
// dispatcher.dispatchEvent(uploadEvent);
// }
//
// model.removePresentation(presentationID);
// var updateEvent:RemovePresentationEvent = new RemovePresentationEvent(RemovePresentationEvent.UPDATE_DOWNLOADABLE_FILES_EVENT);
// dispatcher.dispatchEvent(updateEvent); // this event will trigger the disabling of the download button.
public function removePresentation(podId: String, presentationID:String):void {
var removedEvent:RemovePresentationEvent = new RemovePresentationEvent(RemovePresentationEvent.PRESENTATION_REMOVED_EVENT, podId);
removedEvent.presentationName = presentationID;
dispatcher.dispatchEvent(removedEvent);
var currPresentation:Presentation = podManager.getPod(podId).getCurrentPresentation();
if(currPresentation && presentationID == currPresentation.id) {
var uploadEvent:UploadEvent = new UploadEvent(UploadEvent.CLEAR_PRESENTATION);
dispatcher.dispatchEvent(uploadEvent);
}
podManager.getPod(podId).removePresentation(presentationID);
var updateEvent:RemovePresentationEvent = new RemovePresentationEvent(RemovePresentationEvent.UPDATE_DOWNLOADABLE_FILES_EVENT, podId);
dispatcher.dispatchEvent(updateEvent); // this event will trigger the disabling of the download button.
}
}
}

View File

@ -175,10 +175,13 @@ package org.bigbluebutton.modules.present.services.messaging
}
private function handleRemovePresentationEvtMsg(msg:Object):void {
service.removePresentation(msg.body.presentationId);
var podId: String = msg.body.podId as String;
var presentationId: String = msg.body.presentationId as String;
service.removePresentation(podId, presentationId);
}
private function handlePresentationConversionCompletedEvtMsg(msg:Object):void {
var presVO: PresentationVO = processUploadedPresentation(msg.body.presentation);
var podId: String = msg.body.podId as String;
@ -263,14 +266,15 @@ package org.bigbluebutton.modules.present.services.messaging
private function handleGetPresentationInfoRespMsg(msg:Object):void {
var presos:ArrayCollection = new ArrayCollection();
var presentations:Array = msg.body.presentations as Array;
var podId:String = msg.body.podId as String;
for (var j:int = 0; j < presentations.length; j++) {
var presentation:Object = presentations[j] as Object;
var presVO: PresentationVO = processUploadedPresentation(presentation);
presos.addItem(presVO);
}
service.removeAllPresentations();
// service.addPresentations(presos, podId); // TODO -- are they all on the same pod?
service.removeAllPresentations(podId);
service.addPresentations(podId, presos);
}
private function handlePresentationUploadTokenPassRespMsg(msg:Object):void {

View File

@ -102,10 +102,10 @@ package org.bigbluebutton.modules.present.services.messaging
);
}
public function removePresentation(presentationId:String):void {
public function removePresentation(podId: String, presentationId:String):void {
var message:Object = {
header: {name: "RemovePresentationPubMsg", meetingId: UsersUtil.getInternalMeetingID(), userId: UsersUtil.getMyUserID()},
body: {presentationId: presentationId}
body: {podId: podId, presentationId: presentationId}
};
var _nc:ConnectionManager = BBB.initConnectionManager();

View File

@ -88,6 +88,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
import org.bigbluebutton.modules.present.model.PresentOptions;
import org.bigbluebutton.modules.present.model.PresentationModel;
import org.bigbluebutton.modules.present.model.PresentationPodManager;
import org.bigbluebutton.modules.present.model.Presentation;
import org.bigbluebutton.util.i18n.ResourceUtil;
use namespace mx_internal;
@ -119,7 +120,15 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
public function setPodId(_podId: String): void {
podId = _podId;
presentationNamesAC = PresentationPodManager.getInstance().getPod(podId).getPresentations();
presentationNamesAC = new ArrayCollection();
var presNames: ArrayCollection = PresentationPodManager.getInstance().getPod(podId).getPresentations();
for (var i:int =0; i<presNames.length; i++) {
var pres: Presentation = presNames.getItemAt(i) as Presentation;
presentationNamesAC.addItem({ presName: pres.name, presCurrent: pres.current,
presId: pres.id, podId: this.podId});
}
if (presentationNamesAC.length <= 0) {
selectFile();
}
@ -343,7 +352,7 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
private function handlePresentationRemoved(e:RemovePresentationEvent):void {
for(var i:int = 0; i < presentationNamesAC.length; i++) {
if(e.presentationName == presentationNamesAC.getItemAt(i).id) {
if(e.presentationName == presentationNamesAC.getItemAt(i).presId && e.podId == this.podId) {
presentationNamesAC.removeItemAt(i);
return;
}
@ -355,9 +364,9 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
}
private function retryButtonClikcHandler(event:MouseEvent):void {
globalDispatch.dispatchEvent(new UploadEvent(UploadEvent.CLOSE_UPLOAD_WINDOW))
globalDispatch.dispatchEvent(new UploadEvent(UploadEvent.CLOSE_UPLOAD_WINDOW));
setTimeout(function():void {
globalDispatch.dispatchEvent(new UploadEvent(UploadEvent.OPEN_UPLOAD_WINDOW))
globalDispatch.dispatchEvent(new UploadEvent(UploadEvent.OPEN_UPLOAD_WINDOW));
}, 100);
}
]]>

View File

@ -207,9 +207,11 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
listOfPodControls.push({label: ResourceUtil.getInstance().getString('bbb.presentation.multipod.controls.newPresentationWindowOpen'),
icon: getStyle('iconClearStatus'), handler: newPresentationWindowHandler});
listOfPodControls.push({label: ResourceUtil.getInstance().getString('bbb.presentation.multipod.controls.closePresentationWindowOpen'),
icon: getStyle('iconClearStatus'), handler: closePresentationWindowHandler});
if (this.podId != "DEFAULT_PRESENTATION_POD") {
listOfPodControls.push({label: ResourceUtil.getInstance().getString('bbb.presentation.multipod.controls.closePresentationWindowOpen'),
icon: getStyle('iconClearStatus'), handler: closePresentationWindowHandler});
}
var presGroup: ArrayCollection = UsersUtil.getPresenterGroup();
for (var j:int = 0; j < presGroup.length; j++) {
@ -554,9 +556,8 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
}
private function notifyOthersOfSharingPresentation(presentationName:String):void {
var shareEvent:PresenterCommands = new PresenterCommands(PresenterCommands.SHARE_PRESENTATION_COMMAND);
var shareEvent:PresenterCommands = new PresenterCommands(PresenterCommands.SHARE_PRESENTATION_COMMAND, this.podId);
shareEvent.presentationName = presentationName;
shareEvent.podId = podId;
dispatchEvent(shareEvent);
}
@ -1017,6 +1018,9 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
}
private function handleUpdateDownloadableFilesEvent(e:RemovePresentationEvent):void {
if (e.podId == null || e.podId != this.podId) {
return;
}
updateDownloadBtn();
}

View File

@ -285,8 +285,11 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
}
private function notifyOthersOfZoomEvent():void {
var presentEvent:PresenterCommands = new PresenterCommands(PresenterCommands.ZOOM);
presentEvent.podId = this.podId;
if (this.podId == null) {
return;
}
var presentEvent:PresenterCommands = new PresenterCommands(PresenterCommands.ZOOM, this.podId);
presentEvent.xOffset = slideModel.viewedRegionX;
presentEvent.yOffset = slideModel.viewedRegionY;
presentEvent.slideToCanvasWidthRatio = slideModel.viewedRegionW;

View File

@ -26,17 +26,17 @@
private var globalDispatch:Dispatcher = new Dispatcher();
private function showPresentation():void {
var changePresCommand:ChangePresentationCommand = new ChangePresentationCommand('AAAAAUploadedPresentationRendererAAAA', data.id);
var changePresCommand:ChangePresentationCommand = new ChangePresentationCommand(data.podId, data.presId);
globalDispatch.dispatchEvent(changePresCommand);
globalDispatch.dispatchEvent(new UploadEvent(UploadEvent.CLOSE_UPLOAD_WINDOW));
}
private function deletePresentation():void {
LOGGER.debug("FileUploadWindow.mxml::deletePresentation() {0}", [data.id]);
LOGGER.debug("FileUploadWindow.mxml::deletePresentation() {0}", [data.presId]);
var rEvent:RemovePresentationEvent = new RemovePresentationEvent(RemovePresentationEvent.REMOVE_PRESENTATION_EVENT);
rEvent.presentationName = data.id as String;
var rEvent:RemovePresentationEvent = new RemovePresentationEvent(RemovePresentationEvent.REMOVE_PRESENTATION_EVENT, data.podId);
rEvent.presentationName = data.presId as String;
dispatchEvent(rEvent);
}
]]>
@ -45,19 +45,19 @@
width="{this.width-showBtn.width-deleteBtn.width-50}"
truncateToFit="true"
styleName="presentationNameLabel"
text="{data.name as String}" />
text="{data.presName as String}" />
<mx:Button id="showBtn"
height="32"
label="{ResourceUtil.getInstance().getString('bbb.fileupload.showBtn')}"
toolTip="{ResourceUtil.getInstance().getString('bbb.fileupload.showBtn.toolTip')}"
styleName="presentationUploadShowButtonStyle"
click="showPresentation()"
enabled="{!data.current}" />
enabled="{!data.presCurrent}" />
<mx:Button id="deleteBtn"
height="32"
toolTip="{ResourceUtil.getInstance().getString('bbb.fileupload.deleteBtn.toolTip')}"
styleName="presentationUploadDeleteButtonStyle"
click="deletePresentation()"
visible="{String(data.name) != 'default.pdf'}" />
visible="{String(data.presName) != 'default.pdf'}" />
</mx:HBox>