c76af8b5689d4ea3b2c50448d607cc3aa84cbf9a
chmalee
Fri Jun 7 14:13:52 2019 -0700
Fixing a few spots where I forgot to check for null subgroups earlier, refs #23556
diff --git src/hg/lib/hui.c src/hg/lib/hui.c
index c0eb9f1..2060a93 100644
--- src/hg/lib/hui.c
+++ src/hg/lib/hui.c
@@ -4661,31 +4661,31 @@
// Determine whether subtrack is checked, visible, configurable, has group membership, etc.
int fourState = subtrackFourStateChecked(subtrack,cart);
boolean checkedCB = fourStateChecked(fourState);
boolean enabledCB = fourStateEnabled(fourState);
boolean visibleCB = fourStateVisible(fourState);
membership_t *membership = subgroupMembershipGet(subtrack);
eCfgType cType = cfgNone;
if (!tdbIsMultiTrack(parentTdb)) // MultiTracks never have configurable subtracks!
cType = cfgTypeFromTdb(subtrack,FALSE);
if (cType != cfgNone)
{
// Turn off configuring for certain track type or if explicitly turned off
int cfgSubtrack = configurableByAjax(subtrack,cType);
if (cfgSubtrack <= cfgNone)
cType = cfgNone;
- else if (membersForAll->members[dimV])
+ else if (membersForAll->members[dimV] && membership != NULL)
{ // subtrack only configurable if more than one subtrack in view
// find "view" in subgroup membership: e.g. "signal"
if (-1 != (ix = stringArrayIx(membersForAll->members[dimV]->groupTag,
membership->subgroups, membership->count)))
{
int ix2; // find "signal" in set of all views
if (-1 != (ix2 = stringArrayIx(membership->membership[ix],
membersForAll->members[dimV]->tags,
membersForAll->members[dimV]->count)))
{
if (membersForAll->members[dimV]->subtrackCount[ix2] < 2)
cType = cfgNone;
}
}
}
@@ -4769,31 +4769,31 @@
else
{
cgiMakeCheckBoxFourWay(buffer,checkedCB,enabledCB,id,dyStringContents(dyHtml),
"style='cursor:pointer'");
jsOnEventById("click", id, "matSubCbClick(this);");
}
if (useDragAndDrop)
printf(" ");
if (!tdbIsMultiTrack(parentTdb)) // MultiTracks never have independent vis
{
printf("
"); // An extra column for subVis/wrench so dragAndDrop works
enum trackVisibility vis = tdbVisLimitedByAncestors(cart,subtrack,FALSE,FALSE);
char *view = NULL;
- if (membersForAll->members[dimV]
+ if (membersForAll->members[dimV] && membership !=NULL
&& -1 != (ix = stringArrayIx(membersForAll->members[dimV]->groupTag, membership->subgroups,
membership->count)))
view = membership->membership[ix];
char classList[256];
if (view != NULL)
safef(classList,sizeof(classList),"clickable fauxInput%s subVisDD %s",
(visibleCB ? "":" disabled"),view); // view should be last!
else
safef(classList,sizeof(classList),"clickable fauxInput%s subVisDD",
(visibleCB ? "":" disabled"));
#define SUBTRACK_CFG_VIS " %s \n"
printf(SUBTRACK_CFG_VIS,subtrack->track,classList,hStringFromTv(vis));
char id[256];
safef(id, sizeof id, "%s_faux", subtrack->track);
jsOnEventByIdF("click", id, "return subCfg.replaceWithVis(this,\"%s\",true);", subtrack->track);
@@ -4887,31 +4887,31 @@
printf(" [GEO:%s]", trackDbSetting(subtrack, "accession"));
compositeMetadataToggle(db,subtrack,NULL,TRUE,FALSE);
printf(" ");
// Embedded cfg dialogs are within the TD that contains the longLabel.
// This allows a wide item to be embedded in the table
if (cType != cfgNone)
{
// How to make this thing float to the left? Container is overflow:visible
// and contained (made in js) is position:relative; left: -{some pixels}
#define CFG_SUBTRACK_DIV ""
#define MAKE_CFG_SUBTRACK_DIV(table,view) \
printf(CFG_SUBTRACK_DIV,(table),(view)?(view):"noView")
char * view = NULL;
- if (membersForAll->members[dimV] && -1 !=
+ if (membersForAll->members[dimV] && membership != NULL && -1 !=
(ix = stringArrayIx(membersForAll->members[dimV]->groupTag,
membership->subgroups, membership->count)))
view = membership->membership[ix];
MAKE_CFG_SUBTRACK_DIV(subtrack->track,view);
}
// A schema link for each track
printf(" | \n ");
makeSchemaLink(db,subtrack,"schema");
printf(" ");
// Do we have a restricted until date?
if (restrictions)
{
char *dateDisplay = encodeRestrictionDate(db,subtrack,FALSE); // includes dates in the past
|