void doControls(struct sqlConnection *conn) /* Put up controls pane. */ { char *listSpec = cartUsualString(cart, hgpListSpec, ""); htmlSetBgColor(0xD0FFE0); // resource file link wrapped in html char * link = webTimeStampedLinkToResourceOnFirstCall("HGStyle.css",TRUE); if (link) htmlSetStyle(link); htmStart(stdout, "do controls"); printf("<FORM ACTION=\"%s\" NAME=\"mainForm\" target=\"_parent\" METHOD=GET>\n", hgVisiGeneCgiName()); cartSaveSession(cart); printf("<TABLE WIDTH=100%%><TR>"); printf("<TD WIDTH=230 bgcolor=\"#"HG_COL_HOTLINKS"\">"); printf(" <B><A HREF=\"../index.html\" target=\"_parent\" class=\"topbar\">UCSC</A> "); printf(" <A HREF=\"%s?%s=\" target=\"_parent\" class=\"topbar\">VisiGene</A></B> ", hgVisiGeneCgiName(), hgpListSpec); printf("</TD>"); printf("<TD>"); printf(" "); cgiMakeTextVar(hgpListSpec, listSpec, 16); cgiMakeButton(hgpDoSearch, "search"); printf("</TD>"); #ifdef SOON printf("<TD>"); cgiMakeButton(hgpDoConfig, "configure"); printf("</TD>"); #endif /* SOON */ printf("<TD>"); printf("Zoom: "); printf( "<INPUT TYPE=SUBMIT NAME=\"hgp_zmOut\" VALUE=\" out \"" " onclick=\"parent.image.bigImg.zoomer('out');return false;\"> " "<INPUT TYPE=SUBMIT NAME=\"hgp_zmIn\" VALUE=\" in \"" " onclick=\"parent.image.bigImg.zoomer('in');return false;\"> " "<INPUT TYPE=SUBMIT NAME=\"hgp_zmFull\" VALUE=\" full \"" " onclick=\"parent.image.bigImg.zoomer('full');return false;\"> " "<INPUT TYPE=SUBMIT NAME=\"hgp_zmFit\" VALUE=\" fit \"" " onclick=\"parent.image.bigImg.zoomer('fit');return false;\"> " "\n"); printf("</TD>"); printf("<TD ALIGN=Right>"); printf("<A HREF=\"../goldenPath/help/hgTracksHelp.html#VisiGeneHelp\" target=_parent>"); printf("Help"); printf("</A> "); printf("</TD>"); printf("</TR></TABLE>"); printf("</FORM>\n"); htmlEnd(); }
void doInitialPage() /* Put up page with search box that explains program and * some good things to search on. */ { char *listSpec = NULL; webStartWrapperDetailedNoArgs(cart, NULL, "", "VisiGene Image Browser", FALSE, FALSE, FALSE, TRUE); printf("<FORM ACTION=\"%s\" METHOD=GET>\n", hgVisiGeneCgiName()); puts("<P>VisiGene is a virtual microscope for viewing <em>in situ</em> images. \n" "These images show where a gene is used in an organism, sometimes down to \n" "cellular resolution. With VisiGene users can retrieve images that meet specific " "search criteria, then interactively zoom and scroll across the collection.</P>\n"); printf("<CENTER>"); listSpec = cartUsualString(cart, hgpListSpec, ""); cgiMakeTextVar(hgpListSpec, listSpec, 30); cgiMakeButton(hgpDoSearch, "search"); printf("<BR>\n"); printf("</CENTER>"); puts( "<P>Good search terms include gene symbols, authors, years, body parts,\n" "organisms, GenBank and UniProt accessions, Known Gene descriptive terms,\n" "<A HREF=\"http://genex.hgu.mrc.ac.uk/Atlas/intro.html\" \n" "TARGET=_blank>Theiler</A> stages for mice, and \n" "<A HREF=\"http://www.xenbase.org/atlas/NF/NF-all.html\" \n" "TARGET=_blank>Nieuwkoop/Faber</A> stages for frogs. The wildcard characters\n" "* and ? work with gene symbols; otherwise the full word must match.</P>\n" "<P> \n" "<H3>Sample queries</H3> \n" "<TABLE border=0 CELLPADDING=0 CELLSPACING=0> \n" " <TR><TD VALIGN=Top NOWRAP><B>Request:</B><BR></TD> \n" " <TD VALIGN=Top COLSPAN=2><B> VisiGene Response:</B><BR></TD> \n" " </TR> \n" // " <TR><TD VALIGN=Top><BR></TD></TR> \n" " <TR><TD VALIGN=Top NOWRAP>nkx2-2</TD> \n" " <TD WIDTH=14></TD> \n" " <TD VALIGN=Top>Displays images associated with the gene nkx2-2</TD>\n" " </TR> \n" " <TR><TD VALIGN=Top NOWRAP>hoxa*</TD> \n" " <TD WIDTH=14></TD> \n" " <TD VALIGN=Top>Displays images of all genes in the Hox-A cluster (Note: * works only at the end of the word)</TD>\n" " </TR> \n" " <TR><TD VALIGN=Top NOWRAP>NM_007492</TD> \n" " <TD WIDTH=14></TD> \n" " <TD VALIGN=Top>Displays images associated with accession NM_007492</TD> \n" " </TR> \n" " <TR><TD VALIGN=Top NOWRAP>theiler 22</TD> \n" " <TD WIDTH=14></TD> \n" " <TD VALIGN=Top>Displays all images that show Theiler stage 22</TD> \n" " </TR> \n" " <TR><TD VALIGN=Top NOWRAP>vgPrb_16</TD> \n" " <TD WIDTH=14></TD> \n" " <TD VALIGN=Top>Displays images associated with VisiGene probe ID 16</TD> \n" " </TR> \n" " <TR><TD VALIGN=Top NOWRAP>allen institute</TD> \n" " <TD WIDTH=14></TD> \n" " <TD VALIGN=Top>Displays all images from the Allen Brain Atlas</TD> \n" " </TR> \n" " <TR><TD VALIGN=Top NOWRAP>mouse</TD> \n" " <TD WIDTH=14></TD> \n" " <TD VALIGN=Top>Displays all mouse images </TD> \n" " </TR> \n" " <TR><TD VALIGN=Top NOWRAP>xenopus</TD> \n" " <TD WIDTH=14></TD> \n" " <TD VALIGN=Top>Displays all images associated with frogs of genus Xenopus </TD>\n" " </TR> \n" " <TR><TD VALIGN=Top NOWRAP>mouse midbrain</TD> \n" " <TD WIDTH=14></TD> \n" " <TD VALIGN=Top>Displays mouse images that show expression in the " "midbrain</TD> \n" " </TR> \n" " <TR><TD VALIGN=Top NOWRAP>smith jc 1994</TD> \n" " <TD WIDTH=14></TD> \n" " <TD VALIGN=Top>Displays images contributed by scientist J.C. Smith " "in 1994</TD> \n" " </TR> \n" "</TABLE> \n" ); printf("</FORM>\n"); doHelp(); webEnd(); }
void doFrame(struct sqlConnection *conn, boolean forceImageToList) /* Make a html frame page. Fill frame with thumbnail, control bar, * and image panes. */ { int imageId = cartUsualInt(cart, hgpId, 0); char *sidUrl = cartSidUrlString(cart); char *listSpec = cartUsualString(cart, hgpListSpec, ""); struct tempName matchTempName; char *matchFile = NULL; struct visiMatch *matchList = visiSearch(conn, listSpec); #ifdef SOON if (!cartUsualBoolean(cart, hgpIncludeMutants, FALSE)) matchList = removeMutants(conn, matchList); #endif /* SOON */ matchList = onePerImageFile(conn, matchList); weighMatches(conn, matchList); slSort(&matchList, visiMatchCmpWeight); if (forceImageToList) { if (matchList != NULL) imageId = matchList->imageId; else imageId = 0; } trashDirFile(&matchTempName, "vg", "visiMatch", ".tab"); matchFile = matchTempName.forCgi; saveMatchFile(matchFile, matchList); cartSetString(cart, hgpMatchFile, matchFile); cartSetInt(cart, hgpId, imageId); //puts("\n"); puts("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Frameset//EN\" \"http://www.w3.org/TR/html4/frameset.dtd\">"); printf("<HTML>\n"); printf("<HEAD>\n"); printf("<TITLE>\n"); printf("%s ", hgVisiGeneShortName()); printf("%s",titleMessage); printf("</TITLE>\n"); printf("</HEAD>\n"); printf(" <frameset rows=\"27,*\">\n"); printf(" <frame name=\"controls\" src=\"%s?%s=go&%s&%s=%d\" noresize marginwidth=\"0\" marginheight=\"0\" frameborder=\"0\">\n", hgVisiGeneCgiName(), hgpDoControls, sidUrl, hgpId, imageId); printf(" <frameset cols=\"230,*\"> \n"); printf(" <frame src=\"%s?%s=go&%s&%s=%d\" noresize frameborder=\"0\" name=\"list\">\n", hgVisiGeneCgiName(), hgpDoThumbnails, sidUrl, hgpId, imageId); printf(" <frame src=\"%s?%s=go&%s&%s=%d\" name=\"image\" noresize frameborder=\"0\">\n", hgVisiGeneCgiName(), hgpDoImage, sidUrl, hgpId, imageId); printf(" </frameset>\n"); printf(" <noframes>\n"); printf(" <body>\n"); printf(" <p>This web page uses frames, but your browser doesn't support them.</p>\n"); printf(" </body>\n"); printf(" </noframes>\n"); printf("</frameset>\n"); printf("</HTML>\n"); }
void doImage(struct sqlConnection *conn) /* Put up image page. */ { int imageId = cartUsualInt(cart, hgpId, 0); char *sidUrl = cartSidUrlString(cart); char buf[1024]; char url[1024]; char *p = NULL; char dir[256]; char name[128]; char extension[64]; int w = 0, h = 0; htmlSetBgColor(0xE0E0E0); htmStart(stdout, "do image"); puts( "<script type=\"text/JavaScript\">" "document.getElementsByTagName('html')[0].style.height=\"100%\";" "document.getElementsByTagName('body')[0].style.height=\"100%\";" "</script>" ); if (!visiGeneImageSize(conn, imageId, &w, &h)) imageId = 0; if (imageId != 0) { printf("<B>"); smallCaption(conn, imageId); printf(".</B> Click image to zoom in, drag or arrow keys to move. " "Caption is below.<BR>\n"); p=visiGeneFullSizePath(conn, imageId); splitPath(p, dir, name, extension); #ifdef DEBUG safef(buf,sizeof(buf),"../bigImageTest.html?url=%s%s/%s&w=%d&h=%d", dir,name,name,w,h); #else safef(buf,sizeof(buf),"../bigImage.html?url=%s%s/%s&w=%d&h=%d", dir,name,name,w,h); #endif printf("<IFRAME name=\"bigImg\" width=\"100%%\" height=\"90%%\" SRC=\"%s\"></IFRAME><BR>\n", buf); fullCaption(conn, imageId); safef(buf,sizeof(buf),"%s%s%s", dir, name, extension); safef(url,sizeof(url),"%s?%s=go&%s&%s=%d", hgVisiGeneCgiName(), hgpDoDownload, sidUrl, hgpId, imageId); printf("<B>Full-size image:</B> %d x %d <A HREF='%s'> download </A> ", w, h, url); /* Currently this is dangerous for users with less than 1 GB RAM to use on large images, because their machines can thrash themselves into a coma. X-windows (i.e. used by FireFox) will allocate 5 bytes per pixel. If the image size in pixels times 5 exceeds real ram size, then Linux thrashes incessantly. But you can hit ctrl-alt-F1 to get a text only screen, then kill the bad processes (FF) and then you can restore desktop with ctrl-alt-F7. Hiram says that's a feature credited to SCO-Unix. On my 1GB machines at work/home, I never encountered any problem what-so-ever, even with the largest visiGene AllenBrain - about 19000x9000 pix. printf(" <A HREF='%s'> view </A>\n", buf); */ printf("\n"); } htmlEnd(); }
static void doThumbnails(struct sqlConnection *conn) /* Write out list of thumbnail images. */ { char *sidUrl = cartSidUrlString(cart); char *listSpec = cartUsualString(cart, hgpListSpec, ""); char *matchFile = cartString(cart, hgpMatchFile); struct visiMatch *matchList = NULL, *match; int maxCount = 25, count = 0; int startAt = cartUsualInt(cart, hgpStartAt, 0); int imageCount; htmlSetStyle( "<STYLE TYPE=\"text/css\">\n" " BODY {margin: 2px}\n" " </STYLE>\n" ); htmlSetBgColor(0xC0C0D6); htmStart(stdout, "doThumbnails"); matchList = readMatchFile(matchFile); imageCount = slCount(matchList); if (imageCount > 0) { printf( " <DIV" " ID='perspClip'" " STYLE='position:absolute;left:-1000px;top:-1000px;z-index:2;visibility:visible;overflow:hidden!important;'" " onmouseover='this.style.left=\"-1000px\";' " " >" " <DIV" " ID='perspective'" " STYLE='position:absolute;left:0px;top:0px;'" " >" " <IMG ID='perspBox' SRC='../images/dot_clear.gif' STYLE='position:absolute;left:0px;top:0px;width:100px;height:100px;border-style:solid;border-color:#8080FF;border-width:1px' " ">" " </DIV>" " </DIV>" ); printf("<TABLE>\n"); printf("<TR><TD><B>"); printf("%d images match<BR>\n", imageCount); printf("</B></TD></TR>\n"); for (match = slElementFromIx(matchList, startAt); match != NULL; match = match->next) { int id = match->imageId; char *imageFile = visiGeneThumbSizePath(conn, id); printf("<TR>"); printf("<TD>"); printf("<A HREF=\"%s?%s&%s=%d&%s=do\" target=\"image\" >", hgVisiGeneCgiName(), sidUrl, hgpId, id, hgpDoImage); printf("<IMG SRC=\"%s\"></A><BR>\n", imageFile); smallCaption(conn, id); printf("<BR>\n"); printf("</TD>"); printf("</TR>"); if (++count >= maxCount) break; } printf("</TABLE>\n"); printf("<HR>\n"); } if (count != imageCount) { int start; int page = 0; printf("%d-%d of %d for:<BR>", startAt+1, startAt+count, imageCount); printf(" %s<BR>\n", listSpec); printf("Page:\n"); for (start=0; start<imageCount; start += maxCount) { ++page; if (start != startAt) { printf("<A HREF=\"%s?", hgVisiGeneCgiName()); printf("%s&", sidUrl); printf("%s=on&", hgpDoThumbnails); printf("%s=%s&", hgpListSpec, listSpec); if (start != 0) printf("%s=%d", hgpStartAt, start); printf("\">"); } printf("%d", page); if (start != startAt) printf("</A>"); printf(" "); } } else { printf("%d images for:<BR>", imageCount); printf(" %s<BR>\n", listSpec); } cartRemove(cart, hgpStartAt); htmlEnd(); }
static struct slName *getProbeList(struct sqlConnection *conn, int id) /* Get list of probes with hyperlinks to probe info page. */ { struct slName *returnList = NULL; char query[256]; char *sidUrl = cartSidUrlString(cart); struct dyString *dy = dyStringNew(0); struct slInt *probeList = NULL, *probe; int submissionSource = 0; /* Make up a list of all probes in this image. */ safef(query, sizeof(query), "select probe from imageProbe where image=%d", id); probeList = sqlQuickNumList(conn, query); safef(query, sizeof(query), "select submissionSet.submissionSource from image, submissionSet" " where image.submissionSet = submissionSet.id and image.id=%d", id); submissionSource = sqlQuickNum(conn, query); for (probe = probeList; probe != NULL; probe = probe->next) { char *type; /* Create hyperlink to probe page around gene name. */ dyStringClear(dy); dyStringPrintf(dy, "<A HREF=\"%s?%s&%s=%d&%s=%d\" target=_parent>", hgVisiGeneCgiName(), sidUrl, hgpDoProbe, probe->val, hgpSs, submissionSource); safef(query, sizeof(query), "select probeType.name from probeType,probe where probe.id = %d " "and probe.probeType = probeType.id", probe->val); type = sqlQuickString(conn, query); dyStringPrintf(dy, "%s", naForEmpty(type)); if (sameWord(type, "antibody")) { char *abName; safef(query, sizeof(query), "select antibody.name from probe,antibody " "where probe.id = %d and probe.antibody = antibody.id" , probe->val); abName = sqlQuickString(conn, query); if (abName != NULL) { dyStringPrintf(dy, " %s", abName); freeMem(abName); } } else if (sameWord(type, "RNA")) { safef(query, sizeof(query), "select length(seq) from probe where id=%d", probe->val); if (sqlQuickNum(conn, query) > 0) dyStringPrintf(dy, " sequenced"); else { safef(query, sizeof(query), "select length(fPrimer) from probe where id=%d", probe->val); if (sqlQuickNum(conn, query) > 0) dyStringPrintf(dy, " from primers"); } } else if (sameWord(type, "BAC")) { char *name; safef(query, sizeof(query), "select bac.name from probe,bac " "where probe.id = %d and probe.bac = bac.id" , probe->val); name = sqlQuickString(conn, query); if (name != NULL) { dyStringPrintf(dy, " %s", name); freeMem(name); } } dyStringPrintf(dy, "</A>"); freez(&type); /* Add to return list. */ slNameAddTail(&returnList, dy->string); } slFreeList(&probeList); slReverse(&returnList); return returnList; }