JAL-3010 apply Visibility to sub-types if set in Summary View
authorgmungoc <g.m.carstairs@dundee.ac.uk>
Sun, 3 Jun 2018 07:33:29 +0000 (08:33 +0100)
committergmungoc <g.m.carstairs@dundee.ac.uk>
Sun, 3 Jun 2018 07:33:29 +0000 (08:33 +0100)
resources/lang/Messages.properties
src/jalview/gui/FeatureSettings.java
src/jalview/gui/FeatureTypeSettings.java

index f6c3f8f..6d38b37 100644 (file)
@@ -1364,3 +1364,5 @@ label.most_bound_molecules = Most Bound Molecules
 label.most_polymer_residues = Most Polymer Residues
 label.cached_structures = Cached Structures
 label.free_text_search = Free Text Search
+label.summary_view = Summary View
+label.summary_view_tip = Show only top level ontology terms
\ No newline at end of file
index cb571d8..f645d83 100644 (file)
@@ -27,6 +27,7 @@ import jalview.datamodel.SequenceI;
 import jalview.datamodel.features.FeatureMatcherI;
 import jalview.datamodel.features.FeatureMatcherSet;
 import jalview.datamodel.features.FeatureMatcherSetI;
+import jalview.datamodel.ontology.OntologyI;
 import jalview.gui.Help.HelpId;
 import jalview.io.JalviewFileChooser;
 import jalview.io.JalviewFileView;
@@ -302,6 +303,9 @@ public class FeatureSettings extends JPanel
         switch (column)
         {
         case TYPE_COLUMN:
+          /*
+           * drag to reorder not enabled in Summary View
+           */
           tip = summaryView.isSelected()
                   ? MessageManager.getString(
                           "label.feature_settings_select_columns")
@@ -1357,8 +1361,9 @@ public class FeatureSettings extends JPanel
       }
     });
 
-    summaryView = new JCheckBox("Summary view");
-    summaryView.setToolTipText("Show only top level ontology terms");
+    summaryView = new JCheckBox(MessageManager.getString("summary_view"));
+    summaryView
+            .setToolTipText(MessageManager.getString("summary_view_tip"));
     summaryView.addActionListener(new ActionListener()
     {
       @Override
@@ -1712,17 +1717,43 @@ public class FeatureSettings extends JPanel
       return v == null ? null : v.getClass();
     }
 
+    /**
+     * Answers true for all columns except Feature Type
+     */
     @Override
     public boolean isCellEditable(int row, int col)
     {
-      return col == 0 ? false : true;
+      return col != TYPE_COLUMN;
     }
 
+    /**
+     * Sets the value in the model for a given row and column. If Visibility
+     * (Show/Hide) is being set, and the table is in Summary View, then it is
+     * set also on any sub-types of the row's feature type.
+     */
     @Override
     public void setValueAt(Object value, int row, int col)
     {
       data[row][col] = value;
       fireTableCellUpdated(row, col);
+      if (summaryView.isSelected() && col == SHOW_COLUMN)
+      {
+        String type = (String) data[row][TYPE_COLUMN];
+        OntologyI so = SequenceOntologyFactory.getInstance();
+        for (int r = 0; r < data.length; r++)
+        {
+          if (r != row)
+          {
+            String type2 = (String) data[r][TYPE_COLUMN];
+            if (so.isA(type2, type))
+            {
+              data[r][col] = value;
+              fireTableCellUpdated(r, col);
+            }
+          }
+        }
+      }
+
       updateFeatureRenderer(data);
     }
 
index 6bea16a..201ec44 100644 (file)
@@ -262,6 +262,7 @@ public class FeatureTypeSettings extends JalviewDialog
     List<String> types = fr.getRenderOrder();
     subTypes = SequenceOntologyFactory.getInstance()
             .getChildTerms(this.featureType, types);
+    Collections.sort(subTypes); // sort for ease of reading in tooltip
 
     /*
      * save original colours and filters for this feature type
@@ -1282,7 +1283,6 @@ public class FeatureTypeSettings extends JalviewDialog
       andOrPanel.add(panel2, BorderLayout.EAST);
       StringBuilder sb = new StringBuilder(20 * subTypes.size());
       sb.append("Apply filters also to child terms" + ":"); // todo i18n
-      Collections.sort(subTypes);
       for (String child : subTypes)
       {
         sb.append("<br>").append(child);