d4ba8b64b84e444f39d9cc84f1858540561b5c01 max Fri Dec 12 12:29:10 2014 -0800 adding a linkIdInName tdb statement, refs #14534 diff --git src/hg/hgTracks/bedTrack.c src/hg/hgTracks/bedTrack.c index c092189..33b2c11 100644 --- src/hg/hgTracks/bedTrack.c +++ src/hg/hgTracks/bedTrack.c @@ -579,30 +579,57 @@ } else genericDrawItems(tg, seqStart, seqEnd, hvg, xOff, yOff, width, font, color, vis); } char *bedName(struct track *tg, void *item) /* Return name of bed track item. */ { struct bed *bed = item; if (bed->name == NULL) return ""; return bed->name; } +char *bedNameField1(struct track *tg, void *item) +/* return part before first space in item name */ +{ +struct bed *bed = item; +if (bed->name==NULL) + return ""; +char *nonSpc = stringIn(" ", bed->name); +if (nonSpc==NULL) + return bed->name; +int part1Len = nonSpc - bed->name; +char *newName = cloneStringZ(bed->name, part1Len); +return newName; +} + +char *bedNameField2(struct track *tg, void *item) +/* return part after first space in item name */ +{ +struct bed *bed = item; +if (bed->name==NULL) + return ""; + +char* spcPos = stringIn(" ", bed->name); +if (spcPos==NULL) + return bed->name; +return cloneString(spcPos+1); +} + int bedItemStart(struct track *tg, void *item) /* Return start position of item. */ { struct bed *bed = item; return bed->chromStart; } int bedItemEnd(struct track *tg, void *item) /* Return end position of item. */ { struct bed *bed = item; return bed->chromEnd; } void freeSimpleBed(struct track *tg) @@ -647,30 +674,37 @@ { tg->drawItems = bedDrawSimple; tg->drawItemAt = bedDrawSimpleAt; tg->itemName = bedName; tg->mapItemName = bedName; tg->totalHeight = tgFixedTotalHeightNoOverflow; tg->itemHeight = tgFixedItemHeight; tg->itemStart = bedItemStart; tg->itemEnd = bedItemEnd; // Adding "tg->nextPrevExon = simpleBedNextPrevEdge;" opened a can of worms: too many // bed-based tracks have their own drawItems methods that don't hook into nextItem stuff, // or drawItemAt methods that draw mapboxes but tg->mapsSelf is not set... // So, set tg->nextPrevExon = simpleBedNextPrevEdge case-by-case. tg->nextPrevItem = linkedFeaturesLabelNextPrevItem; tg->freeItems = freeSimpleBed; + +if (trackDbSettingClosestToHomeOn(tg->tdb, "linkIdInName")) + { + tg->mapItemName = bedNameField1; + tg->itemName = bedNameField2; + } + } void bed9Methods(struct track *tg) /* Fill in methods for bed9 tracks. */ { linkedFeaturesMethods(tg); tg->loadItems = loadBed9; } void addSimpleFeatures(struct simpleFeature **pSfList, int start, int end, int qStart, boolean everyBase) /* Add simple features from start to end to the list. * qStart is the offset in the query. * If everyBase is TRUE then add a simpleFeature for every base in the start,end region */ { int s;