82b708668f8be81961f2eda11562f3318f4359fc tdreszer Mon Aug 9 10:33:02 2010 -0700 Added checkboxes to searchTracks diff --git src/hg/hgTracks/searchTracks.c src/hg/hgTracks/searchTracks.c index f63b995..5cbd719 100644 --- src/hg/hgTracks/searchTracks.c +++ src/hg/hgTracks/searchTracks.c @@ -252,19 +252,24 @@ hPrintf("<input type='text' name='hgt.simpleSearch' id='simpleSearch' value='%s' size='80'>\n", descSearch == NULL ? "" : descSearch); +#define CB_SELECTION +#ifdef CB_SELECTION +hPrintf("<br><input type='submit' name='%s' id='searchSubmit' value='Search' style='font-size:12px;'>\n", searchTracks); +hPrintf("<input type='submit' name='submit' value='Cancel' style='font-size:12px;'>\n"); +#endif///def CB_SELECTION hPrintf("</div>\n" "<div id='advancedTab'>\n" "<table>\n"); -hPrintf("<tr><td></td><td></td><td><b>Description:</b></td><td>contains</td>\n"); +hPrintf("<tr><td></td><td></td><td><b>Description:</b></td><td align='right'>contains</td>\n"); hPrintf("<td><input type='text' name='hgt.descSearch' id='descSearch' value='%s' size='80'></td></tr>\n", descSearch == NULL ? "" : descSearch); -hPrintf("<tr><td></td><td>and</td><td><b>Track Name:</b></td><td>\n"); +hPrintf("<tr><td></td><td>and</td><td><b>Track Name:</b></td><td align='right'>\n"); cgiMakeDropListFull("hgt.nameOp", op_labels, ops, ArraySize(ops), nameOp == NULL ? "contains" : nameOp, NULL); hPrintf("</td>\n<td><input type='text' name='hgt.nameSearch' id='nameSearch' value='%s'></td></tr>\n", nameSearch == NULL ? "" : nameSearch); hPrintf("<tr><td></td><td>and</td>\n"); -hPrintf("<td><b>Group</b></td><td>is</td>\n<td>\n"); +hPrintf("<td><b>Group</b></td><td align='right'>is</td>\n<td>\n"); cgiMakeDropListFull("hgt.groupSearch", labels, groups, numGroups, groupSearch, NULL); hPrintf("</td></tr>\n"); @@ -331,14 +336,14 @@ if(i == 0) hPrintf(" \n"); else - hButtonWithOnClick("hgt.ignoreme", "+", "add a select", "alert('add a select is not yet implemented'); return false;"); + hButtonWithOnClick("hgt.ignoreme", "+", "add a select", "warn('add a select is not yet implemented'); return false;"); hPrintf("</td><td>and</td>\n"); - hPrintf("</td><td>\n"); + hPrintf("</td><td colspan=2 nowrap>\n"); safef(buf, sizeof(buf), "%s%i", METADATA_NAME_PREFIX, i + 1); cgiMakeDropListClassWithStyleAndJavascript(buf, metaValues, count, metadataName[i], NULL, NULL, "onchange=metadataSelectChanged(this)"); - hPrintf("</td><td>is</td>\n<td>\n"); + hPrintf("is</td>\n<td>\n"); len = getTermArray(conn, &terms, metadataName[i]); safef(buf, sizeof(buf), "%s%i", METADATA_VALUE_PREFIX, i + 1); cgiMakeDropListFull(buf, terms, terms, len, metadataValue[i], NULL); @@ -348,10 +353,16 @@ hPrintf("</table>\n"); +#ifdef CB_SELECTION +hPrintf("<input type='submit' name='%s' id='searchSubmit' value='Search' style='font-size:12px;'>\n", searchTracks); +hPrintf("<input type='submit' name='submit' value='Cancel' style='font-size:12px;'>\n"); +#endif///def CB_SELECTION hPrintf("</div>\n</div>\n"); +#ifndef CB_SELECTION hPrintf("<input type='submit' name='%s' id='searchSubmit' value='Search'>\n", searchTracks); hPrintf("<input type='submit' name='submit' value='Cancel'>\n"); +#endif///ndef CB_SELECTION hPrintf("</form>\n"); if(descSearch != NULL && !strlen(descSearch)) @@ -487,20 +498,68 @@ if(tracksFound) { - hPrintf("<h3><b>%d tracks found:</b></h3>\n", tracksFound); +#ifndef CB_SELECTION + hPrintf(" <i>%d tracks found</i>\n", tracksFound); +#endif///ndef CB_SELECTION hPrintf("<form action='%s' name='SearchTracks' id='searchResultsForm' method='post'>\n\n", hgTracksName()); +#ifdef CB_SELECTION + hPrintf("<BR>"); + if(tracksFound > 9) + { + hPrintf("<INPUT TYPE=SUBMIT NAME='submit' VALUE='View in Browser' class='viewBtn'>"); + hPrintf(" <FONT class='selCbCount'></font>"); + //hPrintf(" <i>%d tracks found</i>\n", tracksFound); + } +#endif///def CB_SELECTION hPrintf("<table><tr><td colspan='2'>\n"); +#ifdef CB_SELECTION + hPrintf("</td><td align='right'>\n"); + #define PM_BUTTON "<IMG height=18 width=18 onclick=\"return findTracksCheckAllWithWait(%s);\" id='btn_%s' src='../images/%s' title='%s all found tracks'>" + hPrintf("</td></tr><tr bgcolor='%s'><td>",HG_COL_HEADER); + printf(PM_BUTTON,"true", "plus_all", "add_sm.gif", "Select"); + printf(PM_BUTTON,"false","minus_all","remove_sm.gif","Unselect"); + hPrintf("</td><td><b>Visibility</b></td><td><b>Name</b></td><td><b>Description</b></td></tr>\n"); +#else///ifndef CB_SELECTION hButton("submit", "View in Browser"); hPrintf("</td><td align='right'>\n"); hButtonWithOnClick("hgt.ignoreme", "Select All", "show all found tracks", "changeSearchVisibilityPopups('full'); return false;"); hButtonWithOnClick("hgt.ignoreme", "Unselect All", "show all found tracks", "changeSearchVisibilityPopups('hide'); return false;"); - hPrintf("</td></tr><tr bgcolor='#666666'><td><br /></td><td><b>Name</b></td><td><b>Description</b></td></tr>\n"); + hPrintf("</td></tr><tr bgcolor='#666666'>"); + hPrintf("<td><br /></td><td><b>Name</b></td><td><b>Description</b></td></tr>\n"); +#endif///ndef CB_SELECTION + // FIXME: I believe that only data tracks should appear in found tracks. If composite is found, show its children instead + // FIXME: I believe if the fount track list is too large, a warning should be shown instead: "Found 237 tracks... Please narrow search criteria to find fewer tracks." struct slRef *ptr; while((ptr = slPopHead(&tracks))) { struct track *track = (struct track *) ptr->val; // trackDbOutput(track->tdb, stderr, ',', '\n'); - hPrintf("<tr bgcolor='#EEEEEE'>\n"); + hPrintf("<tr bgcolor='%s' valign='top'>\n",COLOR_BG_ALTDEFAULT); +#ifdef CB_SELECTION + // FIXME: I think we have now changed the paradigm for subtrack vis: + // There must be a {trackName}_sel to have subtrack level vis override. + // This means rightClick must make a {trackName}_sel, which is needed for hgTrackUi conformity anyway + // AND hgTracks.c should now be keyed off the "_sel" for subtrack without composite. + // THIS would make ajax calls to clean up vis (currently in hgTracks.js) uneeded. + // ONE MORE COMPLICATION: non-subtracks do not currently have a "_sel" setting! + // Distinguish here? Only subtracks get "_sel" CB set here? Control by "name" of CB? + hPrintf("<td align='center' valign='center'>\n"); + char name[256]; + safef(name,sizeof(name),"%s_sel",track->track); + boolean checked = FALSE; + if(tdbIsCompositeChild(track->tdb)) + { + // FIXME: four state logic is for subtracks only and exists as static in hui.c. When time is right, make this logic non-static + #define FOURSTATE_CHECKED 1 + checked = (FOURSTATE_CHECKED == cartUsualInt(cart, name, 0)); // Don't need all 4 states here. Just checked/not + // FIXME: four state logic is for subtracks only and exists as static in hui.c. When time is right, make this logic non-static + } + else + checked = track->visibility != tvHide; + + cgiMakeCheckBoxIdAndJS(name,checked,name,"class='selCb' onchange=\"findTracksClickedOne(this,true);\""); + hPrintf("</td>\n"); +#endif///def CB_SELECTION hPrintf("<td>\n"); if (tdbIsSuper(track->tdb)) { @@ -510,19 +569,36 @@ else { hTvDropDownClassVisOnly(track->track, track->visibility, - track->canPack, (track->visibility == tvHide) ? - "hiddenText" : "normalText", + track->canPack, +#ifdef CB_SELECTION + "normalText", +#else///ifndef CB_SELECTION + (track->visibility == tvHide) ? "hiddenText" : "normalText", +#endif///ndef CB_SELECTION trackDbSetting(track->tdb, "onlyVisibility")); } hPrintf("</td>\n"); +#ifdef CB_SELECTION + hPrintf("<td><a target='_top' href='%s' title='Configure track...'>%s</a></td>\n", trackUrl(track->track, NULL), track->shortLabel); + hPrintf("<td>%s", track->longLabel); + compositeMetadataToggle(database, track->tdb, "...", TRUE, FALSE); +#else///ifndef CB_SELECTION hPrintf("<td>%s", track->shortLabel); compositeMetadataToggle(database, track->tdb, "...", TRUE, FALSE); hPrintf("</td>\n"); - hPrintf("<td><a target='_top' href='%s'>%s</a></td>\n", trackUrl(track->track, NULL), track->longLabel); - hPrintf("</tr>\n"); + hPrintf("<td><a target='_top' href='%s'>%s</a>", trackUrl(track->track, NULL), track->longLabel); +#endif///ndef CB_SELECTION + hPrintf("</td></tr>\n"); } hPrintf("</table>\n"); +#ifdef CB_SELECTION + hPrintf("<INPUT TYPE=SUBMIT NAME='submit' VALUE='View in Browser' class='viewBtn'>"); + hPrintf(" <FONT class='selCbCount'></font>"); + //hPrintf(" <i>%d tracks found</i>\n", tracksFound); + hPrintf("<script type='text/javascript'>findTracksNormalizeFound();</script>\n"); +#else///ifndef CB_SELECTION hButton("submit", "View in Browser"); +#endif///ndef CB_SELECTION hPrintf("\n</form>\n"); } else @@ -532,10 +608,23 @@ } hPrintf("<p><b>Recently Done</b></p><ul>\n" - "<li>Full descriptions of metadata items are indexed in simple search index (e.g. cell descriptions)</li>" +#ifdef CB_SELECTION + "<li>Found tracks are selected by checkboxes.</li>" + "<li>Checkbox state should be persistent. Subtracks selected will be checked in their composite.</li>" +#endif///def CB_SELECTION + "<li>Full descriptions of metadata items are indexed in simple search index (e.g. cell descriptions).</li>" + "</ul>" + "<p><b>Known Problems</b></p><ul><li>Menu bar up top doesn't work (clicks are ignored).</li>\n" + "<li>subtracks often come up with the wrong visibility (but saving visibility for subtracks does work).</li>" + "<li>Adding selection criteria with [+] button in 'Advanced Search' is not yet implemented.</li>" + "<li>Too large of found track list results in slow scripts.</li>" + "<li>Strangeness seen in finding tracks: 'ENCODE' in description combined with antibody selection results in no tracks found.</li>" "</ul>" - "<p><b>Known Problems</b></p><ul><li>Menu bar up top doesn't work (clicks are ignored)</li>\n" - "<li>subtracks often come up with the wrong visibility (but saving visibility for subtracks does work)</li>" + "<p><b>Suggested improvments:</b></p><ul><li>Found track list should be limited to 100 tracks with warning: \"Found 237 tracks... Please narrow search criteria to find fewer tracks.\"</li>\n" + "<li>Only data tracks should be seen in found track list. Found superTracks/composites should be converted into their children.</li>" + "<li>Configuring found tracks should be by pop-up dialog box.</li>" + "<li>Look and feel of found track list (here) and composite subtrack list (hgTrackUi) should converge.</li>" + "<li>Drop-down list of terms (cells, antibodies, etc.) should be multi-select with checkBoxes as seen in filterComposites.</li>" "</ul>\n"); webEndSectionTables();