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;
 }