comparison ape.js @ 1467:1360ab96b10b

EXPERIMENTAL! New APE drag interface. Testing for OSX
author Nicholas Jillings <nickjillings@users.noreply.github.com>
date Fri, 27 Nov 2015 10:23:47 +0000
parents ffb7f1c1f97c
children 758ddd9cde2c
comparison
equal deleted inserted replaced
1466:a00c7be67424 1467:1360ab96b10b
4 */ 4 */
5 5
6 6
7 // Once this is loaded and parsed, begin execution 7 // Once this is loaded and parsed, begin execution
8 loadInterface(); 8 loadInterface();
9
10 var clicking = -1;
9 11
10 function loadInterface() { 12 function loadInterface() {
11 13
12 // Get the dimensions of the screen available to the page 14 // Get the dimensions of the screen available to the page
13 var width = window.innerWidth; 15 var width = window.innerWidth;
366 368
367 var loopPlayback = audioHolderObject.loop; 369 var loopPlayback = audioHolderObject.loop;
368 370
369 audioEngineContext.loopPlayback = loopPlayback; 371 audioEngineContext.loopPlayback = loopPlayback;
370 // Create AudioEngine bindings for playback 372 // Create AudioEngine bindings for playback
371 audioEngineContext.selectedTrack = function(id) {
372 console.log('Deprecated');
373 };
374 373
375 currentTestHolder = document.createElement('audioHolder'); 374 currentTestHolder = document.createElement('audioHolder');
376 currentTestHolder.id = audioHolderObject.id; 375 currentTestHolder.id = audioHolderObject.id;
377 currentTestHolder.repeatCount = audioHolderObject.repeatCount; 376 currentTestHolder.repeatCount = audioHolderObject.repeatCount;
378 377
403 402
404 canvas.appendChild(audioObject.interfaceDOM.trackSliderObj); 403 canvas.appendChild(audioObject.interfaceDOM.trackSliderObj);
405 audioObject.metric.initialised(convSliderPosToRate(audioObject.interfaceDOM.trackSliderObj)); 404 audioObject.metric.initialised(convSliderPosToRate(audioObject.interfaceDOM.trackSliderObj));
406 405
407 }); 406 });
407
408 $('.track-slider').mousedown(function() {
409 clicking = this.getAttribute('trackIndex');
410 });
411
412 $('#slider').mousemove(function(event) {
413 event.preventDefault();
414 if (clicking == -1)
415 {
416 return;
417 }
418 $("#track-slider-"+clicking).css("left",event.clientX + "px");
419 });
420
421 $(document).mouseup(function(event){
422 if (clicking >= 0)
423 {
424 var l = $("#track-slider-"+clicking).css("left");
425 var time = audioEngineContext.timer.getTestTime();
426 var rate = convSliderPosToRate(document.getElementById("track-slider-"+clicking));
427 audioEngineContext.audioObjects[clicking].metric.moved(time,rate);
428 console.log("slider "+clicking+" moved to "+rate+' ('+time+')');
429 }
430 clicking = -1;
431 });
432
433
408 if (commentShow) { 434 if (commentShow) {
409 interfaceContext.showCommentBoxes(feedbackHolder,true); 435 interfaceContext.showCommentBoxes(feedbackHolder,true);
410 } 436 }
411 437
412 $(audioHolderObject.commentQuestions).each(function(index,element) { 438 $(audioHolderObject.commentQuestions).each(function(index,element) {
450 this.trackSliderObj.className = 'track-slider track-slider-disabled'; 476 this.trackSliderObj.className = 'track-slider track-slider-disabled';
451 this.trackSliderObj.id = 'track-slider-'+audioObject.id; 477 this.trackSliderObj.id = 'track-slider-'+audioObject.id;
452 478
453 this.trackSliderObj.setAttribute('trackIndex',audioObject.id); 479 this.trackSliderObj.setAttribute('trackIndex',audioObject.id);
454 this.trackSliderObj.innerHTML = '<span>'+audioObject.id+'</span>'; 480 this.trackSliderObj.innerHTML = '<span>'+audioObject.id+'</span>';
455 this.trackSliderObj.draggable = true;
456 this.trackSliderObj.ondragend = dragEnd;
457
458 this.trackSliderObj.ondragstart = function(event){
459 event.dataTransfer.setData('Text',null);
460 };
461
462 this.trackSliderObj.ondrop = function(event)
463 {
464 if(event.stopPropagation) {event.stopPropagation();}
465 return false;
466 };
467 481
468 // Onclick, switch playback to that track 482 // Onclick, switch playback to that track
469 this.trackSliderObj.onclick = function(event) { 483 this.trackSliderObj.onclick = function(event) {
470 // Cannot continue to issue play command until audioObjects reported as ready! 484 // Cannot continue to issue play command until audioObjects reported as ready!
471 // Get the track ID from the object ID 485 // Get the track ID from the object ID
504 return node; 518 return node;
505 }; 519 };
506 this.getValue = function() { 520 this.getValue = function() {
507 return convSliderPosToRate(this.trackSliderObj); 521 return convSliderPosToRate(this.trackSliderObj);
508 }; 522 };
509 }
510
511 function dragEnd(ev) {
512 // Function call when a div has been dropped
513 var slider = document.getElementById('slider');
514 var marginSize = Number(slider.attributes['marginsize'].value);
515 var w = slider.style.width;
516 w = Number(w.substr(0,w.length-2));
517 var x
518 if (navigator.platform.substr(0,3) == "Win")
519 {
520 x = ev.screenX;
521 x -= Math.abs(window.screenX);
522 x = x % window.outerWidth;
523 } else
524 x = ev.clientX;
525
526 if (x >= marginSize && x < w+marginSize) {
527 this.style.left = (x)+'px';
528 } else {
529 if (x<marginSize) {
530 this.style.left = marginSize+'px';
531 } else {
532 this.style.left = (w+marginSize) + 'px';
533 }
534 }
535 var time = audioEngineContext.timer.getTestTime();
536 var id = Number(ev.currentTarget.getAttribute('trackindex'));
537 audioEngineContext.audioObjects[id].metric.moved(time,convSliderPosToRate(ev.currentTarget));
538 console.log('slider '+id+' moved to '+convSliderPosToRate(ev.currentTarget)+' ('+time+')');
539 } 523 }
540 524
541 function buttonSubmitClick() 525 function buttonSubmitClick()
542 { 526 {
543 var checks = testState.currentStateMap[testState.currentIndex].interfaces[0].options; 527 var checks = testState.currentStateMap[testState.currentIndex].interfaces[0].options;