JAL-1807 still testing
[jalviewjs.git] / unused / appletgui / PaintRefresher.java
index 7c6fad0..153169a 100644 (file)
-/*
- * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
- * Copyright (C) $$Year-Rel$$ The Jalview Authors
- * 
- * This file is part of Jalview.
- * 
- * Jalview is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License 
- * as published by the Free Software Foundation, either version 3
- * of the License, or (at your option) any later version.
- *  
- * Jalview is distributed in the hope that it will be useful, but 
- * WITHOUT ANY WARRANTY; without even the implied warranty 
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
- * PURPOSE.  See the GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
- * The Jalview Authors are detailed in the 'AUTHORS' file.
- */
-package jalview.appletgui;
-
-import jalview.datamodel.AlignmentI;
-import jalview.datamodel.SequenceI;
-
-import java.awt.Component;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.List;
-import java.util.Vector;
-
-/**
- * DOCUMENT ME!
- * 
- * @author $author$
- * @version $Revision$
- */
-public class PaintRefresher
-{
-  static Hashtable components;
-
-  /**
-   * DOCUMENT ME!
-   * 
-   * @param comp
-   *          DOCUMENT ME!
-   * @param al
-   *          DOCUMENT ME!
-   */
-  public static void Register(Component comp, String seqSetId)
-  {
-    if (components == null)
-    {
-      components = new Hashtable();
-    }
-
-    if (components.containsKey(seqSetId))
-    {
-      Vector comps = (Vector) components.get(seqSetId);
-      if (!comps.contains(comp))
-      {
-        comps.addElement(comp);
-      }
-    }
-    else
-    {
-      Vector vcoms = new Vector();
-      vcoms.addElement(comp);
-      components.put(seqSetId, vcoms);
-    }
-  }
-
-  public static void RemoveComponent(Component comp)
-  {
-    if (components == null)
-    {
-      return;
-    }
-
-    Enumeration en = components.keys();
-    while (en.hasMoreElements())
-    {
-      String id = en.nextElement().toString();
-      Vector comps = (Vector) components.get(id);
-      comps.removeElement(comp);
-      if (comps.size() == 0)
-      {
-        components.remove(id);
-      }
-    }
-  }
-
-  public static void Refresh(Component source, String id)
-  {
-    Refresh(source, id, false, false);
-  }
-
-  public static void Refresh(Component source, String id,
-          boolean alignmentChanged, boolean validateSequences)
-  {
-    if (components == null)
-    {
-      return;
-    }
-
-    Component comp;
-    Vector comps = (Vector) components.get(id);
-
-    if (comps == null)
-    {
-      return;
-    }
-
-    Enumeration e = comps.elements();
-    while (e.hasMoreElements())
-    {
-      comp = (Component) e.nextElement();
-
-      if (comp == source)
-      {
-        continue;
-      }
-
-      if (!comp.isValid())
-      {
-        comps.removeElement(comp);
-      }
-      else if (validateSequences && comp instanceof AlignmentPanel
-              && source instanceof AlignmentPanel)
-      {
-        validateSequences(((AlignmentPanel) source).av.getAlignment(),
-                ((AlignmentPanel) comp).av.getAlignment());
-      }
-
-      if (comp instanceof AlignmentPanel && alignmentChanged)
-      {
-        ((AlignmentPanel) comp).alignmentChanged();
-      }
-
-      comp.repaint();
-    }
-  }
-
-  static void validateSequences(AlignmentI source, AlignmentI comp)
-  {
-    SequenceI[] a1;
-    if (source.getHiddenSequences().getSize() > 0)
-    {
-      a1 = source.getHiddenSequences().getFullAlignment()
-              .getSequencesArray();
-    }
-    else
-    {
-      a1 = source.getSequencesArray();
-    }
-
-    SequenceI[] a2;
-    if (comp.getHiddenSequences().getSize() > 0)
-    {
-      a2 = comp.getHiddenSequences().getFullAlignment().getSequencesArray();
-    }
-    else
-    {
-      a2 = comp.getSequencesArray();
-    }
-
-    int i, iSize = a1.length, j, jSize = a2.length;
-
-    if (iSize == jSize)
-    {
-      return;
-    }
-
-    boolean exists = false;
-    for (i = 0; i < iSize; i++)
-    {
-      exists = false;
-
-      for (j = 0; j < jSize; j++)
-      {
-        if (a2[j] == a1[i])
-        {
-          exists = true;
-          break;
-        }
-      }
-
-      if (!exists)
-      {
-        if (i < comp.getHeight())
-        {
-          // TODO: the following does not trigger any recalculation of
-          // height/etc, or maintain the dataset
-          List<SequenceI> alsq;
-          synchronized (alsq = comp.getSequences())
-          {
-            alsq.add(i, a1[i]);
-          }
-        }
-        else
-        {
-          comp.addSequence(a1[i]);
-        }
-
-        if (comp.getHiddenSequences().getSize() > 0)
-        {
-          a2 = comp.getHiddenSequences().getFullAlignment()
-                  .getSequencesArray();
-        }
-        else
-        {
-          a2 = comp.getSequencesArray();
-        }
-
-        jSize = a2.length;
-      }
-    }
-
-    iSize = a1.length;
-    jSize = a2.length;
-
-    for (j = 0; j < jSize; j++)
-    {
-      exists = false;
-      for (i = 0; i < iSize; i++)
-      {
-        if (a2[j] == a1[i])
-        {
-          exists = true;
-          break;
-        }
-      }
-
-      if (!exists)
-      {
-        comp.deleteSequence(a2[j]);
-      }
-    }
-  }
-
-  public static AlignmentPanel[] getAssociatedPanels(String id)
-  {
-    Vector comps = (Vector) components.get(id);
-    Vector tmp = new Vector();
-    int i, iSize = comps.size();
-    for (i = 0; i < iSize; i++)
-    {
-      if (comps.elementAt(i) instanceof AlignmentPanel)
-      {
-        tmp.addElement(comps.elementAt(i));
-      }
-    }
-    AlignmentPanel[] result = new AlignmentPanel[tmp.size()];
-    for (int ix = 0; ix < result.length; ix++)
-    {
-      result[ix] = (AlignmentPanel) tmp.elementAt(ix);
-    }
-
-    return result;
-  }
-
-}
+/*\r
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)\r
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors\r
+ * \r
+ * This file is part of Jalview.\r
+ * \r
+ * Jalview is free software: you can redistribute it and/or\r
+ * modify it under the terms of the GNU General Public License \r
+ * as published by the Free Software Foundation, either version 3\r
+ * of the License, or (at your option) any later version.\r
+ *  \r
+ * Jalview is distributed in the hope that it will be useful, but \r
+ * WITHOUT ANY WARRANTY; without even the implied warranty \r
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR \r
+ * PURPOSE.  See the GNU General Public License for more details.\r
+ * \r
+ * You should have received a copy of the GNU General Public License\r
+ * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.\r
+ * The Jalview Authors are detailed in the 'AUTHORS' file.\r
+ */\r
+package jalview.appletgui;\r
+\r
+import jalview.datamodel.AlignmentI;\r
+import jalview.datamodel.SequenceI;\r
+\r
+import java.awt.Component;\r
+import java.util.Enumeration;\r
+import java.util.Hashtable;\r
+import java.util.List;\r
+import java.util.Vector;\r
+\r
+/**\r
+ * DOCUMENT ME!\r
+ * \r
+ * @author $author$\r
+ * @version $Revision$\r
+ */\r
+public class PaintRefresher\r
+{\r
+  static Hashtable components;\r
+\r
+  /**\r
+   * DOCUMENT ME!\r
+   * \r
+   * @param comp\r
+   *          DOCUMENT ME!\r
+   * @param al\r
+   *          DOCUMENT ME!\r
+   */\r
+  public static void Register(Component comp, String seqSetId)\r
+  {\r
+    if (components == null)\r
+    {\r
+      components = new Hashtable();\r
+    }\r
+\r
+    if (components.containsKey(seqSetId))\r
+    {\r
+      Vector comps = (Vector) components.get(seqSetId);\r
+      if (!comps.contains(comp))\r
+      {\r
+        comps.addElement(comp);\r
+      }\r
+    }\r
+    else\r
+    {\r
+      Vector vcoms = new Vector();\r
+      vcoms.addElement(comp);\r
+      components.put(seqSetId, vcoms);\r
+    }\r
+  }\r
+\r
+  public static void RemoveComponent(Component comp)\r
+  {\r
+    if (components == null)\r
+    {\r
+      return;\r
+    }\r
+\r
+    Enumeration en = components.keys();\r
+    while (en.hasMoreElements())\r
+    {\r
+      String id = en.nextElement().toString();\r
+      Vector comps = (Vector) components.get(id);\r
+      comps.removeElement(comp);\r
+      if (comps.size() == 0)\r
+      {\r
+        components.remove(id);\r
+      }\r
+    }\r
+  }\r
+\r
+  public static void Refresh(Component source, String id)\r
+  {\r
+    Refresh(source, id, false, false);\r
+  }\r
+\r
+  public static void Refresh(Component source, String id,\r
+          boolean alignmentChanged, boolean validateSequences)\r
+  {\r
+    if (components == null)\r
+    {\r
+      return;\r
+    }\r
+\r
+    Component comp;\r
+    Vector comps = (Vector) components.get(id);\r
+\r
+    if (comps == null)\r
+    {\r
+      return;\r
+    }\r
+\r
+    Enumeration e = comps.elements();\r
+    while (e.hasMoreElements())\r
+    {\r
+      comp = (Component) e.nextElement();\r
+\r
+      if (comp == source)\r
+      {\r
+        continue;\r
+      }\r
+\r
+      if (!comp.isValid())\r
+      {\r
+        comps.removeElement(comp);\r
+      }\r
+      else if (validateSequences && comp instanceof AlignmentPanel\r
+              && source instanceof AlignmentPanel)\r
+      {\r
+        validateSequences(((AlignmentPanel) source).av.getAlignment(),\r
+                ((AlignmentPanel) comp).av.getAlignment());\r
+      }\r
+\r
+      if (comp instanceof AlignmentPanel && alignmentChanged)\r
+      {\r
+        ((AlignmentPanel) comp).alignmentChanged();\r
+      }\r
+\r
+      comp.repaint();\r
+    }\r
+  }\r
+\r
+  static void validateSequences(AlignmentI source, AlignmentI comp)\r
+  {\r
+    SequenceI[] a1;\r
+    if (source.getHiddenSequences().getSize() > 0)\r
+    {\r
+      a1 = source.getHiddenSequences().getFullAlignment()\r
+              .getSequencesArray();\r
+    }\r
+    else\r
+    {\r
+      a1 = source.getSequencesArray();\r
+    }\r
+\r
+    SequenceI[] a2;\r
+    if (comp.getHiddenSequences().getSize() > 0)\r
+    {\r
+      a2 = comp.getHiddenSequences().getFullAlignment().getSequencesArray();\r
+    }\r
+    else\r
+    {\r
+      a2 = comp.getSequencesArray();\r
+    }\r
+\r
+    int i, iSize = a1.length, j, jSize = a2.length;\r
+\r
+    if (iSize == jSize)\r
+    {\r
+      return;\r
+    }\r
+\r
+    boolean exists = false;\r
+    for (i = 0; i < iSize; i++)\r
+    {\r
+      exists = false;\r
+\r
+      for (j = 0; j < jSize; j++)\r
+      {\r
+        if (a2[j] == a1[i])\r
+        {\r
+          exists = true;\r
+          break;\r
+        }\r
+      }\r
+\r
+      if (!exists)\r
+      {\r
+        if (i < comp.getHeight())\r
+        {\r
+          // TODO: the following does not trigger any recalculation of\r
+          // height/etc, or maintain the dataset\r
+          List<SequenceI> alsq;\r
+          synchronized (alsq = comp.getSequences())\r
+          {\r
+            alsq.add(i, a1[i]);\r
+          }\r
+        }\r
+        else\r
+        {\r
+          comp.addSequence(a1[i]);\r
+        }\r
+\r
+        if (comp.getHiddenSequences().getSize() > 0)\r
+        {\r
+          a2 = comp.getHiddenSequences().getFullAlignment()\r
+                  .getSequencesArray();\r
+        }\r
+        else\r
+        {\r
+          a2 = comp.getSequencesArray();\r
+        }\r
+\r
+        jSize = a2.length;\r
+      }\r
+    }\r
+\r
+    iSize = a1.length;\r
+    jSize = a2.length;\r
+\r
+    for (j = 0; j < jSize; j++)\r
+    {\r
+      exists = false;\r
+      for (i = 0; i < iSize; i++)\r
+      {\r
+        if (a2[j] == a1[i])\r
+        {\r
+          exists = true;\r
+          break;\r
+        }\r
+      }\r
+\r
+      if (!exists)\r
+      {\r
+        comp.deleteSequence(a2[j]);\r
+      }\r
+    }\r
+  }\r
+\r
+  public static AlignmentPanel[] getAssociatedPanels(String id)\r
+  {\r
+    Vector comps = (Vector) components.get(id);\r
+    Vector tmp = new Vector();\r
+    int i, iSize = comps.size();\r
+    for (i = 0; i < iSize; i++)\r
+    {\r
+      if (comps.elementAt(i) instanceof AlignmentPanel)\r
+      {\r
+        tmp.addElement(comps.elementAt(i));\r
+      }\r
+    }\r
+    AlignmentPanel[] result = new AlignmentPanel[tmp.size()];\r
+    for (int ix = 0; ix < result.length; ix++)\r
+    {\r
+      result[ix] = (AlignmentPanel) tmp.elementAt(ix);\r
+    }\r
+\r
+    return result;\r
+  }\r
+\r
+}\r