0dc3dba8c97201b69523bbcf01b4c19b17fce05a braney Fri Oct 10 13:09:38 2025 -0700 ongoing work on quickLift diff --git src/hg/hgTracks/hgTracks.c src/hg/hgTracks/hgTracks.c index e6ee78769c1..0c0b5730e2d 100644 --- src/hg/hgTracks/hgTracks.c +++ src/hg/hgTracks/hgTracks.c @@ -8692,30 +8692,33 @@ { char *paraLoadTimeoutStr = cartOptionalString(cart, "parallelFetch.timeout"); if (paraLoadTimeoutStr == NULL) paraLoadTimeoutStr = cfgOptionDefault("parallelFetch.timeout", "90"); // wait up to default 90 seconds. unsigned paraLoadTimeout = sqlUnsigned(paraLoadTimeoutStr); return paraLoadTimeout; } void doTrackForm(char *psOutput, struct tempName *ideoTn) /* Make the tracks display form with the zoom/scroll buttons and the active * image. If the ideoTn parameter is not NULL, it is filled in if the * ideogram is created. */ { +#ifdef GRAPH_BUTTON_ON_QUICKLIFT +int graphCount = 0; +#endif int disconCount = 0; struct group *group; struct track *track; char *freezeName = NULL; boolean hideAll = cgiVarExists("hgt.hideAll"); boolean hideTracks = cgiOptionalString( "hideTracks") != NULL; boolean defaultTracks = cgiVarExists("hgt.reset"); boolean showedRuler = FALSE; boolean showTrackControls = cartUsualBoolean(cart, "trackControlsOnMain", TRUE); boolean multiRegionButtonTop = cfgOptionBooleanDefault(MULTI_REGION_CFG_BUTTON_TOP, TRUE); long thisTime = 0, lastTime = 0; basesPerPixel = ((float)virtWinBaseCount) / ((float)fullInsideWidth); zoomedToBaseLevel = (virtWinBaseCount <= fullInsideWidth / tl.mWidth); zoomedToCodonLevel = (ceil(virtWinBaseCount/3) * tl.mWidth) <= fullInsideWidth; @@ -9647,31 +9650,31 @@ struct trackRef *tr; /* check if group section should be displayed */ char *otherState; char *indicator; char *indicatorImg; boolean isOpen = !isCollapsedGroup(group); collapseGroupGoodies(isOpen, TRUE, &indicatorImg, &indicator, &otherState); hPrintf("<TR>"); cg->rowOpen = TRUE; if (group->errMessage) hPrintf("<th align=\"left\" colspan=%d class='errorToggleBar'>",MAX_CONTROL_COLUMNS); else if (startsWith("Hub", group->label)) hPrintf("<th align=\"left\" colspan=%d class='hubToggleBar'>",MAX_CONTROL_COLUMNS); - else if (startsWith("Quicklift", group->label)) + else if (startsWith("QuickLift", group->label)) hPrintf("<th align=\"left\" colspan=%d class='quickToggleBar'>",MAX_CONTROL_COLUMNS); else hPrintf("<th align=\"left\" colspan=%d class='nativeToggleBar'>",MAX_CONTROL_COLUMNS); hPrintf("<table style='width:100%%;'><tr><td style='text-align:left;'>"); hPrintf("\n<A NAME=\"%sGroup\"></A>",group->name); char idText[256]; safef(idText, sizeof idText, "%s_button", group->name); hPrintf("<IMG class='toggleButton'" " id='%s' src=\"%s\" alt=\"%s\" title='%s this group'> ", idText, indicatorImg, indicator,isOpen?"Collapse":"Expand"); jsOnEventByIdF("click", idText, "return vis.toggleForGroup(this, '%s');", group->name); if (isHubTrack(group->name)) { @@ -9717,30 +9720,36 @@ } hPrintf("<button type='button' class=\"hgtButtonHideGroup\" data-group-name=\"%s\" " "title='Hide all tracks in this group'>Hide group</button> ", group->name); safef(idText, sizeof idText, "%s_%d_disconn", hubName, disconCount); disconCount++; hPrintf("<input name=\"hubDisconnectButton\" id='%s'" " type=\"button\" value=\"Disconnect\">\n", idText); jsOnEventByIdF("click", idText, "document.disconnectHubForm.elements['hubId'].value='%s';" "document.disconnectHubForm.submit();return true;", hubName + strlen(hubTrackPrefix)); +#ifdef GRAPH_BUTTON_ON_QUICKLIFT + safef(idText, sizeof idText, "%s_%d_graph", hubName, graphCount); + graphCount++; + hPrintf("<input name=\"graphButton\" id='%s'" + " type=\"button\" value=\"Graph\">\n", idText); +#endif } hPrintf("<input type='submit' name='hgt.refresh' value='Refresh' " "title='Update image with your changes'>\n"); hPrintf("</td></tr></table></th>\n"); controlGridEndRow(cg); /* Base Position track goes into map group, which will always exist. */ if (!showedRuler && sameString(group->name, "map") ) { char *url = trackUrl(RULER_TRACK_NAME, chromName); showedRuler = TRUE; myControlGridStartCell(cg, isOpen, group->name, FALSE);