@Override
  public void sort(int column, Boolean descending) {
    super.sort(column, descending);

    for (NetworkGroupDetailPanel<NETWORK, NODE, EDGE> panel : dataModel) {
      panel.getNetworkInfoPanel().sort(column, descending);
    }
  }
  @Override
  protected void setAllEnabled(boolean enabled) {
    for (NetworkGroupDetailPanel<NETWORK, NODE, EDGE> panel : dataModel) {
      panel.setItemEnabled(enabled);
    }

    NETWORK cyNetwork = cytoscapeUtils.getCurrentNetwork();
    NetworkSelectionManager<NETWORK, NODE, EDGE> selectionManager =
        plugin.getNetworkSelectionManager();
    ViewState options = selectionManager.getNetworkConfiguration(cyNetwork);
    cytoscapeUtils.setHighlight(options, null, cyNetwork, enabled);
  }
  @Override
  public void updateSelection(ViewState options) {
    NETWORK cyNetwork = cytoscapeUtils.getCurrentNetwork();
    if (cyNetwork == null) {
      return;
    }
    int totalEnabled = 0;
    NetworkGroupDetailPanel<NETWORK, NODE, EDGE> mostRecent = null;
    Group<?, ?> mostRecentGroup = options.getMostRecentGroup();
    for (NetworkGroupDetailPanel<NETWORK, NODE, EDGE> panel : dataModel) {
      Group<?, ?> group = panel.getSubject();
      boolean enabled = options.getGroupHighlighted(group);
      if (enabled) {
        totalEnabled++;
        panel.showDetails(true, 1);
      }

      panel.setItemEnabled(options.getEnabled(group));

      panel.setSelected(enabled);
      if (group.equals(mostRecentGroup)) {
        mostRecent = panel;
      }
      panel.getNetworkInfoPanel().updateSelection(options);
    }
    if (totalEnabled == 0) {
      cytoscapeUtils.setHighlighted(options, cyNetwork, false);
      options.clearHighlightedNetworks();
      mostRecent = null;
    }
    if (mostRecent != null) {
      ensureVisible(mostRecent);
      mostRecent.showDetails(true, 1);
    }
  }