5df8951a48bef7dbac187b267f0c6f1289019a71 larrym Mon Dec 6 12:57:44 2010 -0800 Deal with the fact that the ruler isn't in the trackHash (fixes problem where trackDbJson was empty when requesting just the ruler) diff --git src/hg/hgTracks/imageV2.c src/hg/hgTracks/imageV2.c index cd77c7b..5d79422 100644 --- src/hg/hgTracks/imageV2.c +++ src/hg/hgTracks/imageV2.c @@ -232,40 +232,45 @@ enum kindOfChild tdbKindOfChild(struct trackDb *tdb) { enum kindOfChild kindOfChild = kocOrphan; if (tdbIsFolderContent(tdb)) kindOfChild = kocFolderContent; else if (tdbIsCompositeChild(tdb)) kindOfChild = kocCompositeChild; else if (tdbIsMultiTrackChild(tdb)) kindOfChild = kocMultiTrackChild; return kindOfChild; } ///////////////////////// // JSON support. Eventually the whole imgTbl could be written out as JSON + + +static void jsonTdbSettingsInit(struct dyString **jsonTdbSettingsString) +// Inititializes trackDbJson +{ +*jsonTdbSettingsString = newDyString(1024); +dyStringPrintf(*jsonTdbSettingsString, "<!-- trackDbJson -->\n<script>var trackDbJson = {\n\"ruler\": {\"shortLabel\": \"ruler\", \"longLabel\": \"Base Position Controls\", \"canPack\": 0, \"visibility\": %d, \"configureBy\": \"popup\", \"kindOfParent\": 0}", rulerMode); +} + void jsonTdbSettingsBuild(struct dyString **jsonTdbSettingsString, struct track *track, boolean configurable) // Creates then successively adds trackDb settings to the jsonTdbSettingsString // Initially pass in NULL pointer to a dyString to properly begin building { if (*jsonTdbSettingsString==NULL) - { - *jsonTdbSettingsString = newDyString(1024); - dyStringPrintf(*jsonTdbSettingsString, "<!-- trackDbJson -->\n<script>var trackDbJson = {\n\"ruler\": {\"shortLabel\": \"ruler\", \"longLabel\": \"Base Position Controls\", \"canPack\": 0, \"visibility\": %d, \"configureBy\": \"popup\", \"kindOfParent\": 0},\n", rulerMode); - } -else + jsonTdbSettingsInit(jsonTdbSettingsString); dyStringAppend(*jsonTdbSettingsString, ",\n"); // track name and type dyStringPrintf(*jsonTdbSettingsString, "\t\"%s\": {", track->track); dyStringPrintf(*jsonTdbSettingsString, "\n\t\t\"type\": \"%s\",", track->tdb->type); // Tell which kind of parent and which kind of child enum kindOfParent kindOfParent = tdbKindOfParent(track->tdb); enum kindOfChild kindOfChild = tdbKindOfChild(track->tdb); dyStringPrintf(*jsonTdbSettingsString, "\n\t\t\"kindOfParent\": %d,\n\t\t\"kindOfChild\": %d,",kindOfParent,kindOfChild); // Tell something about the parent and/or children if (kindOfChild != kocOrphan) { struct trackDb *parentTdb = (kindOfChild == kocFolderContent ? track->tdb->parent :tdbGetContainer(track->tdb)); @@ -1864,30 +1869,31 @@ imgBox->chromStart, imgBox->chromEnd,(imgBox->width - imgBox->sideLabelWidth)); hPrintf("var imgBoxPortalStart=%d;var imgBoxPortalEnd=%d;var imgBoxPortalWidth=%d;", imgBox->portalStart, imgBox->portalEnd, imgBox->portalWidth); hPrintf("var imgBoxLeftLabel=%d;var imgBoxPortalOffsetX=%d;var imgBoxBasesPerPixel=%lf;</script>\n", (imgBox->plusStrand?imgBox->sideLabelWidth:0), (int)((imgBox->portalStart - imgBox->chromStart) / imgBox->basesPerPixel),imgBox->basesPerPixel); } #endif//def IMAGEv2_DRAG_SCROLL hPrintf("<TABLE id='imgTbl' border=0 cellspacing=0 cellpadding=0 BGCOLOR='%s'",COLOR_WHITE);//COLOR_RED); // RED to help find bugs hPrintf(" width=%d",imgBox->showPortal?(imgBox->portalWidth+imgBox->sideLabelWidth):imgBox->width); hPrintf(" class='tableWithDragAndDrop'"); hPrintf(" style='border:1px solid blue;border-collapse:separate;'>\n"); struct dyString *jsonTdbVars = NULL; +jsonTdbSettingsInit(&jsonTdbVars); char *newLine = NEWLINE_TO_USE(cgiClientBrowser(NULL,NULL,NULL)); struct imgTrack *imgTrack = imgBox->imgTracks; for(;imgTrack!=NULL;imgTrack=imgTrack->next) { char *trackName = (imgTrack->name != NULL ? imgTrack->name : imgTrack->tdb->track ); struct track *track = hashFindVal(trackHash, trackName); if(track) jsonTdbSettingsBuild(&jsonTdbVars, track, TRUE); hPrintf("<TR id='tr_%s' abbr='%d' class='imgOrd%s%s%s'>\n",trackName,imgTrack->order, (imgTrack->reorderable?" trDraggable":" nodrop nodrag"), (imgTrack->centerLabelSeen != clAlways?" clOpt":""), (imgTrack->ajaxRetrieval ?" mustRetrieve":"")); if(imgBox->showSideLabel && imgBox->plusStrand)