src/hg/hgTracks/hgTracks.c 1.1611
1.1611 2009/12/05 01:29:00 larrym
CONTEXT_MENU stuff; mostly turned off, except map area id's are live
Index: src/hg/hgTracks/hgTracks.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/hgTracks/hgTracks.c,v
retrieving revision 1.1610
retrieving revision 1.1611
diff -b -B -U 4 -r1.1610 -r1.1611
--- src/hg/hgTracks/hgTracks.c 4 Dec 2009 17:02:25 -0000 1.1610
+++ src/hg/hgTracks/hgTracks.c 5 Dec 2009 01:29:00 -0000 1.1611
@@ -95,8 +95,10 @@
boolean dragZooming = TRUE;
struct hash *oldVars = NULL;
boolean hideControls = FALSE; /* Hide all controls? */
+boolean trackImgOnly = FALSE; /* caller wants the image and map for just the given track */
+boolean ideogramToo = FALSE; /* caller wants the ideoGram (when requesting just one track) */
/* Structure returned from findGenomePos.
* We use this to to expand any tracks to full
* that were found to contain the searched-upon
@@ -279,9 +281,9 @@
}
static void mapBoxTrackUi(struct hvGfx *hvg, int x, int y, int width,
- int height, char *name, char *shortLabel)
+ int height, char *name, char *shortLabel, char *id)
/* Print out image map rectangle that invokes hgTrackUi. */
{
x = hvGfxAdjXW(hvg, x, width);
char *encodedName = cgiEncode(name);
@@ -292,9 +294,9 @@
safef(link,sizeof(link),"%s?%s=%u&g=%s",
hgTrackUiName(), cartSessionVarName(),cartSessionId(cart), encodedName);
char title[128];
safef(title,sizeof(title),"%s controls", shortLabel);
- imgTrackAddMapItem(curImgTrack,link,title,x, y, x+width, y+height);
+ imgTrackAddMapItem(curImgTrack,link,title,x, y, x+width, y+height, id);
}
else
{
hPrintf("<AREA SHAPE=RECT COORDS=\"%d,%d,%d,%d\" ", x, y, x+width, y+height);
@@ -318,9 +320,9 @@
{
char link[512];
safef(link,sizeof(link),"%s?complement_%s=%d&%s",
hgTracksName(), database, !cartUsualBooleanDb(cart, database, COMPLEMENT_BASES_VAR, FALSE),ui->string);
- imgTrackAddMapItem(curImgTrack,link,(char *)(message != NULL?message:NULL),x, y, x+width, y+height);
+ imgTrackAddMapItem(curImgTrack,link,(char *)(message != NULL?message:NULL),x, y, x+width, y+height, NULL);
}
else
{
hPrintf("<AREA SHAPE=RECT COORDS=\"%d,%d,%d,%d\" ", x, y, x+width, y+height);
@@ -524,8 +526,12 @@
/* If no ideogram don't draw. */
if(ideoTrack == NULL)
doIdeo = FALSE;
+else if(trackImgOnly && !ideogramToo)
+ {
+ doIdeo = FALSE;
+ }
else
{
ideogramAvail = TRUE;
/* Remove the track from the group and track list. */
@@ -1778,9 +1784,9 @@
curMap = sliceMapFindOrStart(curSlice,RULER_TRACK_NAME,NULL); // No common linkRoot
}
drawGrayButtonBox(hvg, trackTabX, y, trackTabWidth, height, TRUE);
mapBoxTrackUi(hvg, trackTabX, y, trackTabWidth, height,
- RULER_TRACK_NAME, RULER_TRACK_LABEL);
+ RULER_TRACK_NAME, RULER_TRACK_LABEL, "ruler");
y += height + 1;
}
for (track = trackList; track != NULL; track = track->next)
{
@@ -1815,9 +1821,9 @@
{
curMap = sliceMapFindOrStart(curSlice,track->tdb->tableName,NULL); // No common linkRoot
}
mapBoxTrackUi(hvg, trackTabX, yStart, trackTabWidth, h,
- track->mapName, track->shortLabel);
+ track->mapName, track->shortLabel, track->mapName);
}
}
}
butOff = trackTabX + trackTabWidth;
@@ -2501,12 +2507,19 @@
{
struct trackDb *tdb, *tdbList = NULL;
struct track *track;
TrackHandler handler;
-tdbList = hTrackDb(database, chromName);
+char *trackNameFilter = cartOptionalString(cart, "hgt.trackNameFilter");
+if(trackNameFilter == NULL)
+ tdbList = hTrackDb(database, chromName);
+else
+ tdbList = hTrackDbForTrack(database, trackNameFilter);
tdbSortPrioritiesFromCart(cart, &tdbList);
for (tdb = tdbList; tdb != NULL; tdb = tdb->next)
{
+ if(trackNameFilter != NULL && strcmp(trackNameFilter, tdb->tableName))
+ // suppress loading & display of all tracks except for the one passed in via trackNameFilter
+ continue;
track = trackFromTrackDb(tdb);
track->hasUi = TRUE;
if (slCount(tdb->subtracks) != 0) {
tdbSortPrioritiesFromCart(cart, &(tdb->subtracks));
@@ -3923,8 +3936,24 @@
tg->limitedVisSet = TRUE;
}
}
+#ifdef CONTEXT_MENU
+
+static void trackJson(struct dyString *trackDbJson, struct track *track, int count)
+{
+// add entry for given track to the trackDbJson string
+if(count)
+ dyStringAppend(trackDbJson, "\n,");
+dyStringPrintf(trackDbJson, "\t%s: {", track->mapName);
+if(track->tdb->parent != NULL)
+ dyStringPrintf(trackDbJson, "\n\t\tparentTrack: '%s',", track->tdb->parent->tableName);
+dyStringPrintf(trackDbJson, "\n\t\tshortLabel: '%s',\n\t\tlongLabel: '%s',\n\t\tcanPack: %d,\n\t\tvisibility: %d\n\t}",
+ track->shortLabel, track->longLabel, track->canPack, track->limitedVis);
+}
+
+#endif
+
void doTrackForm(char *psOutput, struct tempName *ideoTn)
/* Make the tracks display form with the zoom/scroll buttons and the active
* image. If the ideoTn parameter is not NULL, it is filled in if the
* ideogram is created. */
@@ -3937,8 +3966,13 @@
boolean showedRuler = FALSE;
boolean showTrackControls = cartUsualBoolean(cart, "trackControlsOnMain", TRUE);
long thisTime = 0, lastTime = 0;
char *clearButtonJavascript;
+#ifdef CONTEXT_MENU
+struct dyString *trackDbJson = newDyString(1000);
+int trackDbJsonCount = 0;
+dyStringAppend(trackDbJson, "<script>var trackDbJson = {\n");
+#endif
basesPerPixel = ((float)winBaseCount) / ((float)insideWidth);
zoomedToBaseLevel = (winBaseCount <= insideWidth / tl.mWidth);
zoomedToCodonLevel = (ceil(winBaseCount/3) * tl.mWidth) <= insideWidth;
@@ -4034,11 +4068,29 @@
{
thisTime = clock1000();
track->loadTime = thisTime - lastTime;
}
+#ifdef CONTEXT_MENU
+ trackJson(trackDbJson, track, trackDbJsonCount++);
+ if (trackIsCompositeWithSubtracks(track))
+ {
+ struct track *subtrack;
+ for (subtrack = track->subtracks; subtrack != NULL; subtrack = subtrack->next)
+ {
+ // isSubtrackVisible is causing a problem in panTro2
+ if (isSubtrackVisible(subtrack))
+ trackJson(trackDbJson, subtrack, trackDbJsonCount++);
+ }
+ }
+#endif
}
}
+#ifdef CONTEXT_MENU
+dyStringAppend(trackDbJson, "}\n</script>\n");
+hPrintf(dyStringContents(trackDbJson));
+#endif
+
/* Generate two lists of hidden variables for track group visibility. Kludgy,
but required b/c we have two different navigation forms on this page, but
we want open/close changes in the bottom form to be submitted even if the user
submits via the top form. */
@@ -4193,8 +4245,13 @@
/* Make clickable image and map. */
makeActiveImage(trackList, psOutput);
fflush(stdout);
+
+if(trackImgOnly)
+ // bail out b/c we are done
+ return;
+
if (!hideControls)
{
struct controlGrid *cg = NULL;
@@ -5049,8 +5106,18 @@
dragZooming = advancedJavascriptFeaturesEnabled(cart);
/* Do main display. */
+if (cartUsualBoolean(cart, "hgt.trackImgOnly", FALSE))
+ {
+ trackImgOnly = TRUE;
+ ideogramToo = cartUsualBoolean(cart, "hgt.ideogramToo", FALSE);
+ hideControls = TRUE;
+ withNextItemArrows = FALSE;
+ withNextExonArrows = FALSE;
+ hgFindMatches = NULL; // XXXX necessary ???
+ }
+
jsIncludeFile("jquery.js", NULL);
if(dragZooming)
{
jsIncludeFile("jquery.imgareaselect.js", NULL);
@@ -5060,8 +5127,20 @@
#ifdef LOWELAB
jsIncludeFile("lowetooltip.js", NULL);
#endif
+#ifdef CONTEXT_MENU
+jsIncludeFile("jquery-ui.js", NULL);
+jsIncludeFile("jquery.contextmenu.js", NULL);
+jsIncludeFile("ajax.js", NULL);
+
+hPrintf("<div style='height: 400px; width: 400px;' id='hgTrackUiDialog' style='display: none'></div>");
+hPrintf("<link href='../style/jquery.contextmenu.css' rel='stylesheet' type='text/css' />\n");
+hPrintf("<link href='../style/jquery-ui.css' rel='stylesheet' type='text/css' />\n");
+// XXXX stole this and '.hidden' from bioInt.css - needs work
+hPrintf("<div id='warning' class='ui-state-error ui-corner-all hidden' style='font-size: 0.75em;' onclick='$(this).hide();'><p><span class='ui-icon ui-icon-alert' style='float: left; margin-right: 0.3em;'></span><strong>Alert: </strong><span id='warningText'></span> (click to hide)</p></div>\n");
+#endif
+
if (cartVarExists(cart, "chromInfoPage"))
{
cartRemove(cart, "chromInfoPage");
chromInfoPage();
@@ -5153,8 +5232,11 @@
"hgt.chromName", "hgt.winStart", "hgt.winEnd", "hgt.newWinWidth",
"hgt.insideX", "hgt.rulerClickHeight", "hgt.dragSelection", "hgt.revCmplDisp",
"hgt.collapseGroups", "hgt.expandGroups",
"hgt.jump", "hgt.refresh",
+#ifdef CONTEXT_MENU
+ "hgt.trackImgOnly", "hgt.ideogramToo", "hgt.trackNameFilter",
+#endif
NULL };
int main(int argc, char *argv[])
{