Mercurial > hg > webaudioevaluationtool
diff ape.js @ 371:ad267c5e32ae
Merge of dev into default/master
author | Nicholas Jillings <n.g.r.jillings@se14.qmul.ac.uk> |
---|---|
date | Fri, 04 Dec 2015 11:00:55 +0000 |
parents | ed22a47dcacd |
children | 81246d594793 |
line wrap: on
line diff
--- a/ape.js Fri Dec 04 10:57:39 2015 +0000 +++ b/ape.js Fri Dec 04 11:00:55 2015 +0000 @@ -7,6 +7,8 @@ // Once this is loaded and parsed, begin execution loadInterface(); +var clicking = -1; + function loadInterface() { // Get the dimensions of the screen available to the page @@ -174,6 +176,37 @@ } }; + Interface.prototype.objectSelected = null; + Interface.prototype.objectMoved = false; + Interface.prototype.selectObject = function(object) + { + if (this.objectSelected == null) + { + this.objectSelected = object; + this.objectMoved = false; + } + }; + Interface.prototype.moveObject = function() + { + if (this.objectMoved == false) + { + this.objectMoved = true; + } + }; + Interface.prototype.releaseObject = function() + { + this.objectSelected = null; + this.objectMoved = false; + }; + Interface.prototype.getSelectedObject = function() + { + return this.objectSelected; + }; + Interface.prototype.hasSelectedObjectMoved = function() + { + return this.objectMoved; + }; + // Bindings for audioObjects // Create the top div for the Title element @@ -368,9 +401,6 @@ audioEngineContext.loopPlayback = loopPlayback; // Create AudioEngine bindings for playback - audioEngineContext.selectedTrack = function(id) { - console.log('Deprecated'); - }; currentTestHolder = document.createElement('audioHolder'); currentTestHolder.id = audioHolderObject.id; @@ -405,6 +435,54 @@ audioObject.metric.initialised(convSliderPosToRate(audioObject.interfaceDOM.trackSliderObj)); }); + + $('.track-slider').mousedown(function(event) { + interfaceContext.selectObject($(this)[0]); + }); + + $('.track-slider').mousemove(function(event) { + event.preventDefault(); + }); + + $('#slider').mousemove(function(event) { + event.preventDefault(); + var obj = interfaceContext.getSelectedObject(); + if (obj == null) {return;} + $(obj).css("left",event.clientX + "px"); + interfaceContext.moveObject(); + }); + + $(document).mouseup(function(event){ + event.preventDefault(); + var obj = interfaceContext.getSelectedObject(); + if (obj == null) {return;} + if (interfaceContext.hasSelectedObjectMoved() == true) + { + var l = $(obj).css("left"); + var id = obj.getAttribute('trackIndex'); + var time = audioEngineContext.timer.getTestTime(); + var rate = convSliderPosToRate(obj); + audioEngineContext.audioObjects[id].metric.moved(time,rate); + console.log("slider "+id+" moved to "+rate+' ('+time+')'); + } else { + var id = Number(obj.attributes['trackIndex'].value); + //audioEngineContext.metric.sliderPlayed(id); + audioEngineContext.play(id); + // Currently playing track red, rest green + + //document.getElementById('track-slider-'+index).style.backgroundColor = "#FF0000"; + $('.track-slider').removeClass('track-slider-playing'); + $(obj).addClass('track-slider-playing'); + $('.comment-div').removeClass('comment-box-playing'); + $('#comment-div-'+id).addClass('comment-box-playing'); + var outsideReference = document.getElementById('outside-reference'); + if (outsideReference != undefined) + $(outsideReference).removeClass('track-slider-playing'); + } + interfaceContext.releaseObject(); + }); + + if (commentShow) { interfaceContext.showCommentBoxes(feedbackHolder,true); } @@ -452,43 +530,8 @@ this.trackSliderObj.setAttribute('trackIndex',audioObject.id); this.trackSliderObj.innerHTML = '<span>'+audioObject.id+'</span>'; - this.trackSliderObj.draggable = true; - this.trackSliderObj.ondragend = dragEnd; - - this.trackSliderObj.ondragstart = function(event){ - event.dataTransfer.setData('Text',null); - }; - - this.trackSliderObj.ondrop = function(event) - { - if(event.stopPropagation) {event.stopPropagation();} - return false; - }; // Onclick, switch playback to that track - this.trackSliderObj.onclick = function(event) { - // Cannot continue to issue play command until audioObjects reported as ready! - // Get the track ID from the object ID - var element; - if (event.currentTarget.nodeName == "SPAN") { - element = event.currentTarget.parentNode; - } else { - element = event.currentTarget; - } - var id = Number(element.attributes['trackIndex'].value); - //audioEngineContext.metric.sliderPlayed(id); - audioEngineContext.play(id); - // Currently playing track red, rest green - - //document.getElementById('track-slider-'+index).style.backgroundColor = "#FF0000"; - $('.track-slider').removeClass('track-slider-playing'); - $(element).addClass('track-slider-playing'); - $('.comment-div').removeClass('comment-box-playing'); - $('#comment-div-'+id).addClass('comment-box-playing'); - var outsideReference = document.getElementById('outside-reference'); - if (outsideReference != undefined) - $(outsideReference).removeClass('track-slider-playing'); - }; this.enable = function() { if (this.parent.state == 1) @@ -508,32 +551,6 @@ }; } -function dragEnd(ev) { - // Function call when a div has been dropped - var slider = document.getElementById('slider'); - var marginSize = Number(slider.attributes['marginsize'].value); - var w = slider.style.width; - w = Number(w.substr(0,w.length-2)); - var x = ev.screenX; - - x += Math.abs(window.screenX); - x = x % window.outerWidth; - - if (x >= marginSize && x < w+marginSize) { - this.style.left = (x)+'px'; - } else { - if (x<marginSize) { - this.style.left = marginSize+'px'; - } else { - this.style.left = (w+marginSize) + 'px'; - } - } - var time = audioEngineContext.timer.getTestTime(); - var id = Number(ev.currentTarget.getAttribute('trackindex')); - audioEngineContext.audioObjects[id].metric.moved(time,convSliderPosToRate(ev.currentTarget)); - console.log('slider '+id+' moved to '+convSliderPosToRate(ev.currentTarget)+' ('+time+')'); -} - function buttonSubmitClick() { var checks = testState.currentStateMap[testState.currentIndex].interfaces[0].options; @@ -554,9 +571,8 @@ break; case 'fragmentFullPlayback': // Check all fragments have been played to their full length - var checkState = interfaceContext.checkAllPlayed(); + var checkState = interfaceContext.checkFragmentsFullyPlayed(); if (checkState == false) {canContinue = false;} - console.log('NOTE: fragmentFullPlayback not currently implemented, performing check fragmentPlayed instead'); break; case 'fragmentMoved': // Check all fragment sliders have been moved.