89363e8aeb7f6cb7f1a5ad00cf8ee9d54932e847 tdreszer Thu Jan 23 11:05:33 2014 -0800 Adding 'jump or zoom' functionalight to drag highlight feature. Redmine #709. diff --git src/hg/js/hgTracks.js src/hg/js/hgTracks.js index afa0846..9dc5658 100644 --- src/hg/js/hgTracks.js +++ src/hg/js/hgTracks.js @@ -2097,41 +2097,47 @@ } } else if (cmd == 'hideComposite') { var rec = hgTracks.trackDb[id]; if (tdbIsSubtrack(rec)) { var row = $( 'tr#tr_' + id ); var rows = dragReorder.getCompositeSet(row); if (rows && rows.length > 0) { for (var ix=rows.length - 1; ix >= 0; ix--) { // from bottom, just in case remove screws with us $(rows[ix]).remove(); } var selectUpdated = vis.update(rec.parentTrack, 'hide'); setCartVar(rec.parentTrack, 'hide' ); imageV2.afterImgChange(true); } } - //else - // warn('What went wrong?'); - } else if (cmd == 'zoomToHighlight') { // If highlight exists for this assembly, zoom to it + } else if (cmd == 'jumpToHighlight') { // If highlight exists for this assembly, jump to it if (hgTracks.highlight) { - var pos = parsePositionWithDb(hgTracks.highlight); - if (pos && pos.db == getDb()) { + var newPos = parsePositionWithDb(hgTracks.highlight); + if (newPos && newPos.db == getDb()) { + if ( $('#highlightItem').length == 0) { // not visible? jump to it + var curPos = parsePosition(genomePos.get()); + var diff = ((curPos.end - curPos.start) - (newPos.end - newPos.start)); + if (diff > 0) { // new position is smaller then current, then center it + newPos.start = Math.max( Math.floor(newPos.start - (diff/2) ), 0 ); + newPos.end = newPos.start + (curPos.end - curPos.start); + } + } if (imageV2.inPlaceUpdate) { - var params = "position=" + pos.chrom + ':' + pos.start + '-' + pos.end; + var params = "position=" + newPos.chrom+':'+newPos.start+'-'+newPos.end; imageV2.navigateInPlace(params, null, true); } else { - genomePos.setByCoordinates(pos.chrom, pos.start, pos.end); + genomePos.setByCoordinates(newPos.chrom, newPos.start, newPos.end); jQuery('body').css('cursor', 'wait'); document.TrackHeaderForm.submit(); } } } } else if (cmd == 'removeHighlight') { hgTracks.highlight = null; setCartVars(['highlight'], ['[]']); imageV2.highlightRegion(); } else { // if ( cmd in 'hide','dense','squish','pack','full','show' ) // Change visibility settings: // // First change the select on our form: var rec = hgTracks.trackDb[id]; var selectUpdated = vis.update(id, cmd); @@ -2461,44 +2467,44 @@ o[(rightClick.selectedMenuItem.id == rightClick.floatingMenuItem ? selectedImg : blankImg) + " float"] = { onclick: function(menuItemClicked, menuObject) { rightClick.hit(menuItemClicked, menuObject, "float"); return true; } }; } menu.push($.contextMenu.separator); menu.push(o); } menu.push($.contextMenu.separator); if(hgTracks.highlight) { var o; if (hgTracks.highlight.search(getDb() + '.') == 0) { + var currentlySeen = ($('#highlightItem').length > 0); o = new Object(); - o[rightClick.makeImgTag("highlightZoom.png") + - " Zoom to highlighted region"] = - { onclick:function(menuItemClicked, menuObject) { - rightClick.hit(menuItemClicked, menuObject, "zoomToHighlight"); - return true; - } + // Jumps to highlight when not currently seen in image + var text = (currentlySeen ? " Zoom" : " Jump") + " to highlighted region"; + o[rightClick.makeImgTag("highlightZoom.png") + text] = { + onclick: rightClick.makeHitCallback('jumpToHighlight') }; - o[rightClick.makeImgTag("highlightRemove.png") + " Remove highlighting"] = - { onclick:function(menuItemClicked, menuObject) { - rightClick.hit(menuItemClicked, menuObject, "removeHighlight"); - return true; - } + + if ( currentlySeen ) { // Remove only when seen + o[rightClick.makeImgTag("highlightRemove.png") + + " Remove highlighting"] = { + onclick: rightClick.makeHitCallback('removeHighlight') }; + } menu.push(o); } } // Add view image at end var o = new Object(); o[rightClick.makeImgTag("eye.png") + " View image"] = { onclick: function(menuItemClicked, menuObject) { rightClick.hit(menuItemClicked, menuObject, "viewImg"); return true; } }; menu.push(o); return menu; }, {