d4ba8b64b84e444f39d9cc84f1858540561b5c01 max Fri Dec 12 12:29:10 2014 -0800 adding a linkIdInName tdb statement, refs #14534 diff --git src/hg/hgTracks/simpleTracks.c src/hg/hgTracks/simpleTracks.c index ec793d7..a84b765 100644 --- src/hg/hgTracks/simpleTracks.c +++ src/hg/hgTracks/simpleTracks.c @@ -1331,30 +1331,58 @@ int linkedFeaturesCmp(const void *va, const void *vb) /* Compare to sort based on start. */ { const struct linkedFeatures *a = *((struct linkedFeatures **)va); const struct linkedFeatures *b = *((struct linkedFeatures **)vb); return a->start - b->start; } char *linkedFeaturesName(struct track *tg, void *item) /* Return name of item. */ { struct linkedFeatures *lf = item; return lf->name; } +char *linkedFeaturesNameField1(struct track *tg, void *item) +/* return part before first space in item name */ +{ +struct linkedFeatures *lf = item; +if (lf->name==NULL) + return ""; +char* nonSpc = stringIn(" ", lf->name); +if (nonSpc==NULL) + return lf->name; +int part1Len = nonSpc - lf->name; +char *newName = cloneStringZ(lf->name, part1Len); +return newName; +} + +char *linkedFeaturesNameField2(struct track *tg, void *item) +/* return part after first space in item name */ +{ +struct linkedFeatures *lf = item; +if (lf->name==NULL) + return ""; + +char* spcPos = stringIn(" ", lf->name); +if (spcPos==NULL) + return lf->name; +return cloneString(spcPos+1); +} + + void linkedFeaturesFreeList(struct linkedFeatures **pList) /* Free up a linked features list. */ { struct linkedFeatures *lf; for (lf = *pList; lf != NULL; lf = lf->next) { slFreeList(&lf->components); slFreeList(&lf->codons); } slFreeList(pList); } void linkedFeaturesFreeItems(struct track *tg) /* Free up linkedFeaturesTrack items. */ { @@ -3753,30 +3781,36 @@ /* Fill in track methods for linked features. */ { tg->freeItems = linkedFeaturesFreeItems; tg->drawItems = linkedFeaturesDraw; tg->drawItemAt = linkedFeaturesDrawAt; tg->itemName = linkedFeaturesName; tg->mapItemName = linkedFeaturesName; tg->mapItem = linkedFeaturesMapItem; tg->totalHeight = tgFixedTotalHeightNoOverflow; tg->itemHeight = tgFixedItemHeight; tg->itemStart = linkedFeaturesItemStart; tg->itemEnd = linkedFeaturesItemEnd; tg->itemNameColor = linkedFeaturesNameColor; tg->nextPrevExon = linkedFeaturesNextPrevItem; tg->nextPrevItem = linkedFeaturesLabelNextPrevItem; + +if (trackDbSettingClosestToHomeOn(tg->tdb, "linkIdInName")) + { + tg->mapItemName = linkedFeaturesNameField1; + tg->itemName = linkedFeaturesNameField2; + } } int linkedFeaturesSeriesItemStart(struct track *tg, void *item) /* Return start chromosome coordinate of item. */ { struct linkedFeaturesSeries *lfs = item; return lfs->start; } int linkedFeaturesSeriesItemEnd(struct track *tg, void *item) /* Return end chromosome coordinate of item. */ { struct linkedFeaturesSeries *lfs = item; return lfs->end; }