6e57bd7dddafb83f609a22cba99c47c97fb506d9 tdreszer Thu Sep 9 09:09:18 2010 -0700 hgTrackUi can now use ajax to update composite/view settings, which enables keeping subtrack level v. composite/view level settings properly influencing each other. That is, timing is important in ensuring that composite/view level changes overrides subtrack level settings. The triggers for this code in hui.c are all ifdef'd on SUBTRACK_CFG_POPUP. diff --git src/hg/lib/hui.c src/hg/lib/hui.c index 1c860f4..09a8a85 100644 --- src/hg/lib/hui.c +++ src/hg/lib/hui.c @@ -47,6 +47,7 @@ #define ENCODE_DCC_DOWNLOADS "encodeDCC" //#define SUBTRACK_CFG_POPUP +//#define BAM_CFG_UI_CHANGES // TODO: For subtrack cfg and integration with right-click and subtrack level vis: /* 1) Composite/view level settings should be ajaxed over upon change @@ -972,7 +973,10 @@ baseColorDrawAllOptionValues, ArraySize(baseColorDrawAllOptionLabels), curValue, NULL); - printf("
Help on mRNA coloring
", +#ifndef BAM_CFG_UI_CHANGES + printf("
"); +#endif///ndef BAM_CFG_UI_CHANGES + printf("Help on mRNA coloring
", CDS_MRNA_HELP_PAGE); } else if (gotCds) @@ -982,7 +986,10 @@ baseColorDrawGenomicOptionValues, ArraySize(baseColorDrawGenomicOptionLabels), curValue, NULL); - printf("
Help on codon coloring
", +#ifndef BAM_CFG_UI_CHANGES + printf("
"); +#endif///ndef BAM_CFG_UI_CHANGES + printf("Help on codon coloring
", CDS_HELP_PAGE); } else if (gotSeq) @@ -992,7 +999,10 @@ baseColorDrawItemOptionValues, ArraySize(baseColorDrawItemOptionLabels), curValue, NULL); - printf("
Help on base coloring
", +#ifndef BAM_CFG_UI_CHANGES + printf("
"); +#endif///ndef BAM_CFG_UI_CHANGES + printf("Help on base coloring
", CDS_BASE_HELP_PAGE); } } @@ -1037,6 +1047,30 @@ boolean showDoubleInsert, showQueryInsert, showPolyA; char var[512]; indelEnabled(cart, tdb, 0.0, &showDoubleInsert, &showQueryInsert, &showPolyA); +#ifdef BAM_CFG_UI_CHANGES + printf("\n\n\n"); + } + + printf("
Alignment Gap/Insertion Display Options"); + printf(" Help on display options\n
", + INDEL_HELP_PAGE); + safef(var, sizeof(var), "%s_%s", INDEL_DOUBLE_INSERT, tdb->track); + cgiMakeCheckBox(var, showDoubleInsert); + printf("Draw double horizontal lines when both genome and query have " + "an insertion
"); + safef(var, sizeof(var), "%s_%s", INDEL_QUERY_INSERT, tdb->track); + cgiMakeCheckBox(var, showQueryInsert); + printf("Draw a vertical purple line for an insertion at the beginning or " + "end of the
query, orange for insertion in the middle of the query
"); + safef(var, sizeof(var), "%s_%s", INDEL_POLY_A, tdb->track); + /* We can highlight valid polyA's only if we have query sequence -- + * so indelPolyA code piggiebacks on baseColor code: */ + if (baseColorGotSequence(tdb)) + { + cgiMakeCheckBox(var, showPolyA); + printf("Draw a vertical green line where query has a polyA tail " + "insertion
\n"); +#else///ifndef BAM_CFG_UI_CHANGES printf("

Alignment Gap/Insertion Display Options
\n"); safef(var, sizeof(var), "%s_%s", INDEL_DOUBLE_INSERT, tdb->track); cgiMakeCheckBox(var, showDoubleInsert); @@ -1062,6 +1096,7 @@ printf("Help on alignment gap/insertion display options" "
\n", INDEL_HELP_PAGE); +#endif///ndef BAM_CFG_UI_CHANGES } } @@ -3683,11 +3718,15 @@ return date; } -static void cfgLinkToDependentCfgs(struct trackDb *tdb,char *prefix) +static void cfgLinkToDependentCfgs(struct cart *cart, struct trackDb *tdb,char *prefix) /* Link composite or view level controls to all associateled lower level controls */ { -if(tdbIsComposite(tdb)) // FIXME: Only when some subtracks are configurable +if (!cartVarExists(cart, "ajax") && tdbIsComposite(tdb)) +#ifdef SUBTRACK_CFG_POPUP + printf("\n",prefix); +#else///ifndef SUBTRACK_CFG_POPUP printf("\n",prefix); +#endif///ndef SUBTRACK_CFG_POPUP } static void compositeUiSubtracks(char *db, struct cart *cart, struct trackDb *parentTdb, @@ -3703,7 +3742,9 @@ char *colors[2] = { COLOR_BG_DEFAULT, COLOR_BG_ALTDEFAULT }; int colorIx = COLOR_BG_DEFAULT_IX; // Start with non-default allows alternation +#ifndef SUBTRACK_CFG_POPUP boolean dependentCfgsNeedBinding = FALSE; +#endif///ndef SUBTRACK_CFG_POPUP // Get list of leaf subtracks to work with struct slRef *subtrackRef, *subtrackRefList = trackDbListGetRefsToDescendantLeaves(parentTdb->subtracks); @@ -4009,8 +4050,10 @@ puts("

"); if (!primarySubtrack) puts(""); +#ifndef SUBTRACK_CFG_POPUP if(dependentCfgsNeedBinding) - cfgLinkToDependentCfgs(parentTdb,parentTdb->track); + cfgLinkToDependentCfgs(cart,parentTdb,parentTdb->track); +#endif//ndef SUBTRACK_CFG_POPUP membersForAllSubGroupsFree(parentTdb,&membersForAll); dyStringFree(&dyHtml) sortOrderFree(&sortOrder); @@ -4064,7 +4107,7 @@ char *view = tdbGetViewName(tdb); if(view != NULL) printf(" %s",view); - printf("' bgcolor=\"%s\" borderColor=\"%s\">", COLOR_BG_ALTDEFAULT, COLOR_BG_ALTDEFAULT); + printf("' bgcolor=\"%s\" borderColor=\"%s\">", COLOR_BG_ALTDEFAULT, COLOR_BG_ALTDEFAULT); if (title) printf("

%s Configuration
\n", title); } @@ -5462,6 +5505,33 @@ { boxed = cfgBeginBoxAndTitle(tdb, boxed, title); char cartVarName[1024]; + +#ifdef BAM_CFG_UI_CHANGES +printf("",boxed?" width='100%'":""); +char *tdbShowNames = trackDbSetting(tdb, BAM_SHOW_NAMES); +safef(cartVarName, sizeof(cartVarName), "%s.%s", name, BAM_SHOW_NAMES); +cartMakeCheckBox(cart, cartVarName, !sameOk(tdbShowNames, "off")); +printf("Display read names"); +if (boxed && fileExists(hHelpFile("hgBamTrackHelp"))) + printf("BAM " + "configuration help"); +printf("\n"); +boolean canPair = (trackDbSetting(tdb, BAM_PAIR_ENDS_BY_NAME) != NULL); +if (canPair) + { + printf(""); + safef(cartVarName, sizeof(cartVarName), "%s." BAM_PAIR_ENDS_BY_NAME, name); + cartMakeCheckBox(cart, cartVarName, TRUE); + printf("Attempt to join paired end reads by name\n"); + //puts("
"); + } +printf("Minimum alignment quality:\n"); +safef(cartVarName, sizeof(cartVarName), "%s." BAM_MIN_ALI_QUAL, name); +cartMakeIntVar(cart, cartVarName, + atoi(trackDbSettingOrDefault(tdb, BAM_MIN_ALI_QUAL, BAM_MIN_ALI_QUAL_DEFAULT)), 4); +printf(""); + +#else///nef BAM_CFG_UI_CHANGES puts("
"); printf("Display read names:\n"); char *tdbShowNames = trackDbSetting(tdb, BAM_SHOW_NAMES); @@ -5481,6 +5551,8 @@ cartMakeIntVar(cart, cartVarName, atoi(trackDbSettingOrDefault(tdb, BAM_MIN_ALI_QUAL, BAM_MIN_ALI_QUAL_DEFAULT)), 4); puts("
"); +#endif///ndef BAM_CFG_UI_CHANGES + if (isCustomTrack(name)) { // Auto-magic baseColor defaults for BAM, same as in hgTracks.c newCustomTrack @@ -5490,6 +5562,9 @@ hashAdd(tdb->settingsHash, "showDiffBasesMaxZoom", cloneString("100")); } baseColorDrawOptDropDown(cart, tdb); +#ifdef BAM_CFG_UI_CHANGES +puts("
"); +#endif///def BAM_CFG_UI_CHANGES indelShowOptions(cart, tdb); printf("
\n"); printf("Additional coloring modes:
\n"); @@ -5523,11 +5598,18 @@ printf("
\n"); } cgiMakeRadioButton(cartVarName, BAM_COLOR_MODE_OFF, sameString(selected, BAM_COLOR_MODE_OFF)); -printf("No additional coloring
\n"); +printf("No additional coloring"); +#ifndef BAM_CFG_UI_CHANGES +printf("
\n"); +#endif///ndef BAM_CFG_UI_CHANGES //TODO: include / exclude flags +#ifdef BAM_CFG_UI_CHANGES +if (!boxed && fileExists(hHelpFile("hgBamTrackHelp"))) +#else///ifndef BAM_CFG_UI_CHANGES if (fileExists(hHelpFile("hgBamTrackHelp"))) +#endif///ndef BAM_CFG_UI_CHANGES printf("

BAM " "configuration help

"); @@ -5696,7 +5778,7 @@ { cfgByCfgType(configurable[ix],db,cart,view->subtracks,varName, membersOfView->titles[ix],TRUE); - cfgLinkToDependentCfgs(parentTdb,varName); + cfgLinkToDependentCfgs(cart,parentTdb,varName); } } } @@ -6493,7 +6575,7 @@ boolean isMatrix = dimensionsExist(tdb); boolean viewsOnly = FALSE; -if(cartOptionalString(cart, "ajax") == NULL) +if (!cartVarExists(cart, "ajax")) { if(trackDbSetting(tdb, "dragAndDrop") != NULL) jsIncludeFile("jquery.tablednd.js", NULL); @@ -6507,6 +6589,7 @@ #ifdef SUBTRACK_CFG_POPUP printf(""); cgiMakeHiddenVar("db", db); +printf("\n",tdb->track); #endif puts("

"); if (trackDbCountDescendantLeaves(tdb) < MANY_SUBTRACKS && !hasSubgroups) @@ -6540,6 +6623,11 @@ hCompositeUiByMatrix(db, cart, tdb, formName); } } +#ifdef SUBTRACK_CFG_POPUP + if(primarySubtrack == NULL) + cfgLinkToDependentCfgs(cart,tdb,tdb->track); // Must be after views are set up to get view vis + printf("\n"); +#endif } cartSaveSession(cart);