src/hg/hgTracks/hgTracks.c 1.1607
1.1607 2009/11/13 00:17:58 tdreszer
Changes to fix no leftLabel bug and changes to support separate button slice (needed for subtracks with separate imgTracks)
Index: src/hg/hgTracks/hgTracks.c
===================================================================
RCS file: /projects/compbio/cvsroot/kent/src/hg/hgTracks/hgTracks.c,v
retrieving revision 1.1606
retrieving revision 1.1607
diff -b -B -U 4 -r1.1606 -r1.1607
--- src/hg/hgTracks/hgTracks.c 11 Nov 2009 21:13:13 -0000 1.1606
+++ src/hg/hgTracks/hgTracks.c 13 Nov 2009 00:17:58 -0000 1.1607
@@ -1581,26 +1581,15 @@
//struct imgTrack *curImgTrack = NULL; // Make this global for now to avoid huge rewrite
struct imgSlice *curSlice = NULL; // No need to be global, only the map needs to be global
struct mapSet *curMap = NULL; // Make this global for now to avoid huge rewrite
// Set up imgBox dimensions
-int sideSliceWidth = 0; // Just being explicit
-int dataSliceWidth = 0;
-int sideSliceOffsetX = 0;
-int dataSliceOffsetX = 0;
+int sliceWidth[isMaxSliceTypes]; // Just being explicit
+int sliceOffsetX[isMaxSliceTypes];
int sliceHeight = 0;
int sliceOffsetY = 0;
char *rulerTtl = NULL;
-// theImgBox is a global for now to avoid huge rewrite of hgTracks. It is started prior to this in doTrackForm()
-//theImgBox = imgBoxStart(database,chromName,winStart,winEnd,(!revCmplDisp),sideSliceWidth,pixWidth);
-if(theImgBox)
- {
- if (withLeftLabels)
+if(theImgBox) // theImgBox is a global for now to avoid huge rewrite of hgTracks. It is started prior to this in doTrackForm()
{
- sideSliceWidth = leftLabelWidth + 2;
- sideSliceOffsetX = (revCmplDisp?(tl.picWidth - sideSliceWidth): 0);
- }
- dataSliceOffsetX = (revCmplDisp?0:sideSliceWidth);
-
rulerTtl = (dragZooming?"drag select or click to zoom":"click to zoom 3x");//"click or drag mouse in base position track to zoom in" : NULL);
hPrintf("<input type='hidden' name='db' value='%s'>\n", database);
hPrintf("<input type='hidden' name='c' value='%s'>\n", chromName);
hPrintf("<input type='hidden' name='l' value='%d'>\n", winStart);
@@ -1612,13 +1601,21 @@
{
pixWidth = tl.picWidth;
winBaseCount = winEnd - winStart;
insideWidth = tl.picWidth-gfxBorder-insideX;
- if (withLeftLabels)
- sideSliceOffsetX = (revCmplDisp?(tl.picWidth - sideSliceWidth): 0);
}
#endif//def IMAGEv2_DRAG_SCROLL
- dataSliceWidth = tl.picWidth - sideSliceWidth;
+ memset((char *)sliceWidth, 0,sizeof(sliceWidth));
+ memset((char *)sliceOffsetX,0,sizeof(sliceOffsetX));
+ if (withLeftLabels)
+ {
+ sliceWidth[isButton] = trackTabWidth + 1;
+ sliceWidth[isSide] = leftLabelWidth - sliceWidth[isButton] + 2;
+ sliceOffsetX[isSide] = (revCmplDisp? (tl.picWidth - sliceWidth[isSide] - sliceWidth[isButton]) : sliceWidth[isButton]);
+ sliceOffsetX[isButton] = (revCmplDisp? (tl.picWidth - sliceWidth[isButton]) : 0);
+ }
+ sliceOffsetX[isData] = (revCmplDisp?0:sliceWidth[isSide] + sliceWidth[isButton]);
+ sliceWidth[isData] = tl.picWidth - (sliceWidth[isSide] + sliceWidth[isButton]);
}
if (rulerMode != tvFull)
{
@@ -1747,8 +1744,11 @@
/* Find colors to draw in. */
findTrackColors(hvg, trackList);
+// TODO: Prior to image, make all imgTracks, including one for each visible subtrack
+// Then dragReorder can work per subtrack!!!
+
/* Draw mini-buttons. */
if (withLeftLabels && psOutput == NULL)
{
int butOff;
@@ -1766,9 +1766,9 @@
// Mini-buttons (side label slice) for ruler
sliceHeight = height + 1;
sliceOffsetY = 0;
curImgTrack = imgBoxTrackFindOrAdd(theImgBox,NULL,RULER_TRACK_NAME,rulerMode,FALSE,IMG_FIXEDPOS); // No tdb, no centerlabel, not reorderable
- curSlice = imgTrackSliceUpdateOrAdd(curImgTrack,isSide,theOneImg,NULL,sideSliceWidth,sliceHeight,sideSliceOffsetX,sliceOffsetY);
+ curSlice = imgTrackSliceUpdateOrAdd(curImgTrack,isButton,theOneImg,NULL,sliceWidth[isButton],sliceHeight,sliceOffsetX[isButton],sliceOffsetY);
curMap = sliceMapFindOrStart(curSlice,RULER_TRACK_NAME,NULL); // No common linkRoot
}
drawGrayButtonBox(hvg, trackTabX, y, trackTabWidth, height, TRUE);
mapBoxTrackUi(hvg, trackTabX, y, trackTabWidth, height,
@@ -1801,9 +1801,9 @@
// Mini-buttons (side label slice) for tracks
sliceHeight = h;
sliceOffsetY = yStart;
curImgTrack = imgBoxTrackFindOrAdd(theImgBox,track->tdb,NULL,track->limitedVis,isWithCenterLabels(track),IMG_ANYORDER);
- curSlice = imgTrackSliceUpdateOrAdd(curImgTrack,isSide,theOneImg,NULL,sideSliceWidth,sliceHeight,sideSliceOffsetX,sliceOffsetY);
+ curSlice = imgTrackSliceUpdateOrAdd(curImgTrack,isButton,theOneImg,NULL,sliceWidth[isButton],sliceHeight,sliceOffsetX[isButton],sliceOffsetY);
curMap = sliceMapFindOrStart(curSlice,track->tdb->tableName,NULL); // No common linkRoot
}
mapBoxTrackUi(hvg, trackTabX, yStart, trackTabWidth, h,
track->mapName, track->shortLabel);
@@ -1829,9 +1829,9 @@
// side label slice for ruler
sliceHeight = basePositionHeight + (rulerCds ? rulerTranslationHeight : 0) + 1;
sliceOffsetY = 0;
curImgTrack = imgBoxTrackFindOrAdd(theImgBox,NULL,RULER_TRACK_NAME,rulerMode,FALSE,IMG_FIXEDPOS); // No tdb, no centerlabel,not reorderable
- curSlice = imgTrackSliceUpdateOrAdd(curImgTrack,isSide,theOneImg,NULL,sideSliceWidth,sliceHeight,sideSliceOffsetX,sliceOffsetY);
+ curSlice = imgTrackSliceUpdateOrAdd(curImgTrack,isSide,theOneImg,NULL,sliceWidth[isSide],sliceHeight,sliceOffsetX[isSide],sliceOffsetY);
curMap = sliceMapFindOrStart(curSlice,RULER_TRACK_NAME,NULL); // No common linkRoot
}
if (baseTitle)
{
@@ -1898,9 +1898,9 @@
// But as soon as subtracks are individual image tracks: problems with buttons, left labels, center labels, drag and drop, etc.
sliceHeight = trackPlusLabelHeight(track, fontHeight);
sliceOffsetY = y;
curImgTrack = imgBoxTrackFindOrAdd(theImgBox,track->tdb,NULL,track->limitedVis,isWithCenterLabels(track),IMG_ANYORDER);
- curSlice = imgTrackSliceUpdateOrAdd(curImgTrack,isSide,theOneImg,NULL,sideSliceWidth,sliceHeight,sideSliceOffsetX,sliceOffsetY);
+ curSlice = imgTrackSliceUpdateOrAdd(curImgTrack,isSide,theOneImg,NULL,sliceWidth[isSide],sliceHeight,sliceOffsetX[isSide],sliceOffsetY);
curMap = sliceMapFindOrStart(curSlice,track->tdb->tableName,NULL); // No common linkRoot
}
if (trackIsCompositeWithSubtracks(track)) //TODO: Change when tracks->subtracks are always set for composite
{
@@ -1955,9 +1955,9 @@
// data slice for ruler
sliceHeight = basePositionHeight + (rulerCds ? rulerTranslationHeight : 0) + 1;
sliceOffsetY = 0;
curImgTrack = imgBoxTrackFindOrAdd(theImgBox,NULL,RULER_TRACK_NAME,rulerMode,FALSE,IMG_FIXEDPOS); // No tdb, no centerlabel,not reorderable
- curSlice = imgTrackSliceUpdateOrAdd(curImgTrack,isData,theOneImg,rulerTtl,dataSliceWidth,sliceHeight,dataSliceOffsetX,sliceOffsetY);
+ curSlice = imgTrackSliceUpdateOrAdd(curImgTrack,isData,theOneImg,rulerTtl,sliceWidth[isData],sliceHeight,sliceOffsetX[isData],sliceOffsetY);
curMap = sliceMapFindOrStart(curSlice,RULER_TRACK_NAME,NULL); // No common linkRoot
}
struct dnaSeq *seq = NULL;
int rulerClickY = 0;
@@ -2185,9 +2185,9 @@
// But as soon as subtracks are individual image tracks: problems with buttons, left labels, center labels, drag and drop, etc.
sliceHeight = fontHeight;
sliceOffsetY = y;
curImgTrack = imgBoxTrackFindOrAdd(theImgBox,track->tdb,NULL,track->limitedVis,isWithCenterLabels(track),IMG_ANYORDER);
- curSlice = imgTrackSliceUpdateOrAdd(curImgTrack,isCenter,theOneImg,NULL,dataSliceWidth,sliceHeight,dataSliceOffsetX,sliceOffsetY);
+ curSlice = imgTrackSliceUpdateOrAdd(curImgTrack,isCenter,theOneImg,NULL,sliceWidth[isData],sliceHeight,sliceOffsetX[isData],sliceOffsetY);
curMap = sliceMapFindOrStart(curSlice,track->tdb->tableName,NULL); // No common linkRoot
}
if (trackIsCompositeWithSubtracks(track)) //TODO: Change when tracks->subtracks are always set for composite
{
@@ -2199,9 +2199,9 @@
// FIXME: This special case allows the subtrack center label map items to be put into the data slice
// When subtracks are carved up into individual imgTracks, then this will not be necessary
sliceHeight = trackPlusLabelHeight(track, fontHeight) - fontHeight;
sliceOffsetY = y;
- curSlice = imgTrackSliceUpdateOrAdd(curImgTrack,isData,theOneImg,NULL,dataSliceWidth,sliceHeight,dataSliceOffsetX,sliceOffsetY);
+ curSlice = imgTrackSliceUpdateOrAdd(curImgTrack,isData,theOneImg,NULL,sliceWidth[isData],sliceHeight,sliceOffsetX[isData],sliceOffsetY);
curMap = sliceMapFindOrStart(curSlice,track->tdb->tableName,NULL); // No common linkRoot
}
for (subtrack = track->subtracks; subtrack != NULL; subtrack = subtrack->next)
{
@@ -2243,9 +2243,9 @@
int order = cartUsualInt(cart, var,IMG_ANYORDER);
curImgTrack = imgBoxTrackUpdateOrAdd(theImgBox,track->tdb,NULL,track->limitedVis,isWithCenterLabels(track),order);
if(sliceHeight > 0)
{
- curSlice = imgTrackSliceUpdateOrAdd(curImgTrack,isData,theOneImg,NULL,dataSliceWidth,sliceHeight,dataSliceOffsetX,sliceOffsetY);
+ curSlice = imgTrackSliceUpdateOrAdd(curImgTrack,isData,theOneImg,NULL,sliceWidth[isData],sliceHeight,sliceOffsetX[isData],sliceOffsetY);
curMap = sliceMapFindOrStart(curSlice,track->tdb->tableName,NULL); // No common linkRoot
}
}
if (trackIsCompositeWithSubtracks(track)) //TODO: Change when tracks->subtracks are always set for composite
@@ -2281,36 +2281,33 @@
// But as soon as subtracks are individual image tracks: problems with buttons, left labels, center labels, drag and drop, etc.
sliceHeight = trackPlusLabelHeight(track, fontHeight);
sliceOffsetY = y;
curImgTrack = imgBoxTrackFindOrAdd(theImgBox,track->tdb,NULL,track->limitedVis,isWithCenterLabels(track),IMG_ANYORDER);
- curSlice = imgTrackSliceUpdateOrAdd(curImgTrack,isSide,theOneImg,NULL,sideSliceWidth,sliceHeight,sideSliceOffsetX,sliceOffsetY);
+ curSlice = imgTrackSliceUpdateOrAdd(curImgTrack,isSide,theOneImg,NULL,sliceWidth[isSide],sliceHeight,sliceOffsetX[isSide],sliceOffsetY);
curMap = sliceMapFindOrStart(curSlice,track->tdb->tableName,NULL); // No common linkRoot
}
if (trackIsCompositeWithSubtracks(track)) //TODO: Change when tracks->subtracks are always set for composite
{
struct track *subtrack;
if (isWithCenterLabels(track))
y += fontHeight;
- for (subtrack = track->subtracks; subtrack != NULL;
- subtrack = subtrack->next)
+ for (subtrack = track->subtracks; subtrack != NULL;subtrack = subtrack->next)
+ {
if (isSubtrackVisible(subtrack))
{
if (subtrack->drawLeftLabels != NULL)
y = doOwnLeftLabels(subtrack, hvg, font, y);
else
y += trackPlusLabelHeight(subtrack, fontHeight);
}
}
+ }
else if (track->drawLeftLabels != NULL)
- {
y = doOwnLeftLabels(track, hvg, font, y);
- }
else
- {
y += trackPlusLabelHeight(track, fontHeight);
}
}
- }
/* Make map background. */
y = yAfterRuler;
@@ -2319,14 +2316,15 @@
if (track->limitedVis != tvHide)
{
if(theImgBox)
{
- // Seems there are some left over side labels which need to be added here!
+ // Set imgTrack in case any map items will be set
sliceHeight = trackPlusLabelHeight(track, fontHeight);
sliceOffsetY = y;
curImgTrack = imgBoxTrackFindOrAdd(theImgBox,track->tdb,NULL,track->limitedVis,isWithCenterLabels(track),IMG_ANYORDER);
- curSlice = imgTrackSliceUpdateOrAdd(curImgTrack,isSide,theOneImg,NULL,sideSliceWidth,sliceHeight,sideSliceOffsetX,sliceOffsetY);
- curMap = sliceMapFindOrStart(curSlice,track->tdb->tableName,NULL); // No common linkRoot
+ // It is possible that some side label heights need adjusting (but I doubt it)...
+ //if (withLeftLabels)
+ // curSlice = imgTrackSliceUpdateOrAdd(curImgTrack,isSide,theOneImg,NULL,sliceWidth[isSide],sliceHeight,sliceOffsetX[isSide],sliceOffsetY);
}
y = doTrackMap(track, hvg, y, fontHeight, trackPastTabX, trackPastTabWidth);
}
}