1ee35161c11e26203026dbb8ab352f306b8603ed max Fri Apr 22 10:42:36 2016 -0700 adding file forgotten in previous commit diff --git src/hg/hgTracks/menu.c src/hg/hgTracks/menu.c index a39e0a9..164edd7 100644 --- src/hg/hgTracks/menu.c +++ src/hg/hgTracks/menu.c @@ -18,62 +18,72 @@ #include "hgTracks.h" #include "trackHub.h" #include "extTools.h" #include "trackVersion.h" /* list of links to display in a menu */ /* a link with an empty name is displayed as a horizontal separator line */ struct hotLink { struct hotLink *next; char *name; char *url; char *id; char *mouseOver; char *onClick; + char *shortcut; boolean inactive; /* greyed out */ boolean external; }; static void appendLink(struct hotLink **links, char *url, char *name, char *id, boolean external) { // append to list of links for later printing and/or communication with javascript client struct hotLink *link; AllocVar(link); link->name = cloneString(name); link->url = cloneString(url); link->id = cloneString(id); link->external = external; link->inactive = FALSE; slAddTail(links, link); } static void appendLinkMaybeInactive(struct hotLink **links, char *url, char *name, char *id, char *mouseOver, boolean external, boolean inactive) { appendLink(links, url, name, id, external); struct hotLink *le = slLastEl(links); le->inactive=inactive; le->mouseOver=mouseOver; } static void appendLinkWithOnclick(struct hotLink **links, char *url, char *name, char *id, - char *mouseOver, char *onClick, boolean external, boolean inactive) + char *mouseOver, char *onClick, char *shortcut, boolean external, boolean inactive) { appendLinkMaybeInactive(links, url, name, id, mouseOver, external, inactive); struct hotLink *le = slLastEl(links); le->onClick=onClick; +le->shortcut=shortcut; +} + +static void appendLinkWithShortcut(struct hotLink **links, char *url, char *name, char *id, + char *mouseOver, char *shortcut, boolean external, boolean inactive) +{ +appendLinkMaybeInactive(links, url, name, id, mouseOver, external, inactive); +struct hotLink *le = slLastEl(links); +le->shortcut=shortcut; } static void printEnsemblAnchor(char *database, char* archive, char *chrName, int start, int end, struct hotLink **links) /* Print anchor to Ensembl display on same window. */ { char *scientificName = hScientificName(database); char *dir = ensOrgNameFromScientificName(scientificName); struct dyString *ensUrl; char *name; int localStart, localEnd; name = chrName; if (sameWord(scientificName, "Takifugu rubripes")) @@ -181,65 +191,69 @@ char *encodedName = htmlEncode(link->name); if(*class) dyStringPrintf(menuHtml, " class='%s'", class); dyStringPrintf(menuHtml, ">\n"); if (!isEmpty(link->name)) { dyStringPrintf(menuHtml, "<a href='%s' ", link->url); if (link->mouseOver) dyStringPrintf(menuHtml, "title='%s' ", link->mouseOver); if (link->onClick) dyStringPrintf(menuHtml, "onclick=\"%s\" ", link->onClick); dyStringPrintf(menuHtml, "id='%s'%s>%s</a>\n", link->id, link->external ? " TARGET='_blank'" : "", encodedName); } + if (!isEmpty(link->shortcut)) + dyStringPrintf(menuHtml, "<span class='shortcut'>%s</span>", link->shortcut); + dyStringPrintf(menuHtml, "</li>\n"); freez(&encodedName); freez(&link->name); freez(&link->url); freez(&link->id); } slFreeList(links); } void printMenuBar() /* Put up the special menu bar for hgTracks. */ { struct hotLink *links = NULL; struct sqlConnection *conn = NULL; if (!trackHubDatabase(database)) conn = hAllocConn(database); char *menuStr, buf[4096], uiVars[1024]; safef(uiVars, sizeof(uiVars), "%s=%s", cartSessionVarName(), cartSessionId(cart)); menuStr = menuBar(cart, database); // Create top items in view menu safef(buf, sizeof(buf), "../cgi-bin/hgTracks?%s&hgt.psOutput=on", uiVars); appendLink(&links, buf, "PDF/PS", "pdfLink", FALSE); safef(buf, sizeof(buf), "%s&o=%d&g=getDna&i=mixed&c=%s&l=%d&r=%d&db=%s&%s", hgcNameAndSettings(), winStart, chromName, winStart, winEnd, database, uiVars); -appendLink(&links, buf, "DNA", "dnaLink", FALSE); +//appendLink(&links, buf, "DNA", "dnaLink", FALSE); +appendLinkWithShortcut(&links, buf, "DNA", "dnaLink", "Show DNA sequence in view", "v d", FALSE, FALSE); safef(buf, sizeof(buf), "../cgi-bin/hgConvert?hgsid=%s&db=%s", cartSessionId(cart), database); appendLink(&links, buf, "In Other Genomes (Convert)", "convertMenuLink", FALSE); // add the sendTo menu if (fileExists("extTools.ra")) { - appendLinkWithOnclick(&links, "#", "In External Tools", "extToolLink", "Show current sequence on a third-party website", "showExtToolDialog(); return false;", FALSE, FALSE); + appendLinkWithOnclick(&links, "#", "In External Tools", "extToolLink", "Show current sequence on a third-party website", "showExtToolDialog(); return false;", "s t", FALSE, FALSE); } // Add link-outs to other dbs as appropriate for this assembly if (differentWord(database,"susScr2")) { /* Print Ensembl anchor for latest assembly of organisms we have * supported by Ensembl == if versionString from trackVersion exists */ struct trackVersion *trackVersion = getTrackVersion(database, "ensGene"); if ((conn != NULL) && sqlTableExists(conn, UCSC_TO_ENSEMBL)) printEnsemblAnchor(database, NULL, chromName, winStart, winEnd, &links); else if (sameWord(database,"hg19")) { printEnsemblAnchor(database, NULL, chromName, winStart, winEnd, &links); @@ -399,36 +413,36 @@ { safef(buf, sizeof(buf), "http://ws170.wormbase.org/db/seq/gbrowse/wormbase?name=%s:%d-%d", skipChr(chromName), winStart+1, winEnd); appendLink(&links, buf, "WormBase", "wormbaseLink", TRUE); } else if (sameString(database, "ce2")) { safef(buf, sizeof(buf), "http://ws120.wormbase.org/db/seq/gbrowse/wormbase?name=%s:%d-%d", skipChr(chromName), winStart+1, winEnd); appendLink(&links, buf, "WormBase", "wormbaseLink", TRUE); } // finish View menu appendLink(&links, "", "", "", FALSE); // separator line safef(buf, sizeof(buf), "../cgi-bin/hgTracks?%s&hgTracksConfigPage=configure", uiVars); -appendLink(&links, buf, "Configure Browser", "configureMenuLink", FALSE); +appendLinkWithShortcut(&links, buf, "Configure Browser", "configureMenuLink", "Open configuration menu", "c f", FALSE, FALSE); // multi-region -appendLinkWithOnclick(&links, "#", "Multi-Region", "multiRegionLink", "Show multi-region options", "popUpHgt.hgTracks('multi-region config'); return false;", FALSE, FALSE); +appendLinkWithOnclick(&links, "#", "Multi-Region", "multiRegionLink", "Show multi-region options", "popUpHgt.hgTracks('multi-region config'); return false;", "", FALSE, FALSE); safef(buf, sizeof(buf), "../cgi-bin/hgTracks?%s&hgt.reset=on", uiVars); -appendLink(&links, buf, "Default Tracks", "defaultTracksMenuLink", FALSE); +appendLinkWithShortcut(&links, buf, "Default Tracks", "defaultTracksMenuLink", "Show only default tracks", "d t", FALSE, FALSE); safef(buf, sizeof(buf), "../cgi-bin/hgTracks?%s&hgt.defaultImgOrder=on", uiVars); -appendLink(&links, buf, "Default Track Order", "defaultTrackOrderMenuLink", FALSE); +appendLinkWithShortcut(&links, buf, "Default Track Order", "defaultTrackOrderMenuLink", "Re-order tracks to be in default order", "d o", FALSE, FALSE); appendLink(&links, "../cgi-bin/cartReset", "Reset All User Settings", "cartResetMenuLink", FALSE); struct dyString *viewMenu = dyStringCreate("<li class='menuparent' id='view'><span>View</span>\n<ul>\n"); freeLinksAndConvert(links, viewMenu); dyStringAppend(viewMenu, "</ul>\n</li>\n"); menuStr = replaceChars(menuStr, "<!-- OPTIONAL_VIEW_MENU -->", dyStringCannibalize(&viewMenu)); menuStr = replaceChars(menuStr, "id=\"main-menu-whole\"", "id=\"hgTracks-main-menu-whole\""); menuStr = replaceChars(menuStr, "id=\"home-link\"", "id=\"hgTracks-home-link\""); hPuts(menuStr); freez(&menuStr); }