+ allFeatures.addElement(tmpfeatures[index].getType());\r
+ }\r
+ index++;\r
+ }\r
+ }\r
+\r
+ resetTable(false);\r
+ }\r
+\r
+ //This routine adds and removes checkboxes depending on\r
+ //Group selection states\r
+ void resetTable(boolean groupsChanged)\r
+ {\r
+ SequenceFeature[] tmpfeatures;\r
+ String group = null, type;\r
+ Vector visibleChecks = new Vector();\r
+\r
+ for (int i = 0; i < av.alignment.getHeight(); i++)\r
+ {\r
+ if (av.alignment.getSequenceAt(i).getSequenceFeatures() == null)\r
+ {\r
+ continue;\r
+ }\r
+\r
+ tmpfeatures = av.alignment.getSequenceAt(i).getSequenceFeatures();\r
+ int index = 0;\r
+ while (index < tmpfeatures.length)\r
+ {\r
+ group = tmpfeatures[index].featureGroup;\r
+\r
+ if (group == null || fr.featureGroups.get(group) == null ||\r
+ ( (Boolean) fr.featureGroups.get(group)).booleanValue())\r
+ {\r
+ type = tmpfeatures[index].getType();\r
+ if (!visibleChecks.contains(type))\r
+ {\r
+ visibleChecks.addElement(type);\r
+ }\r
+ }\r
+ index++;\r
+ }\r
+ }\r
+\r
+ Component[] comps;\r
+ int cSize = featurePanel.getComponentCount();\r
+ Checkbox check;\r
+ //This will remove any checkboxes which shouldn't be\r
+ //visible\r
+ for (int i = 0; i < cSize; i++)\r
+ {\r
+ comps = featurePanel.getComponents();\r
+ check = (Checkbox) comps[i];\r
+ if (!visibleChecks.contains(check.getLabel()))\r
+ {\r
+ featurePanel.remove(i);\r
+ cSize--;\r
+ i--;\r
+ }\r
+ }\r
+\r
+ if (fr.renderOrder != null)\r
+ {\r
+ //First add the checks in the previous render order,\r
+ //in case the window has been closed and reopened\r
+ for (int ro = fr.renderOrder.length - 1; ro > -1; ro--)\r
+ {\r
+ String item = fr.renderOrder[ro];\r
+\r
+ if (!visibleChecks.contains(item))\r
+ {\r
+ continue;\r