JAL-3560 avoiding Graphics.setClip
[jalview.git] / src / jalview / gui / TreeCanvas.java
index f353d28..0c09b71 100755 (executable)
@@ -27,6 +27,7 @@ import jalview.datamodel.Sequence;
 import jalview.datamodel.SequenceGroup;
 import jalview.datamodel.SequenceI;
 import jalview.datamodel.SequenceNode;
+import jalview.gui.JalviewColourChooser.ColourChooserListener;
 import jalview.schemes.ColourSchemeI;
 import jalview.structure.SelectionSource;
 import jalview.util.Format;
@@ -53,7 +54,6 @@ import java.util.Hashtable;
 import java.util.List;
 import java.util.Vector;
 
-import javax.swing.JColorChooser;
 import javax.swing.JPanel;
 import javax.swing.JScrollPane;
 import javax.swing.SwingUtilities;
@@ -77,9 +77,9 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable,
 
   TreePanel tp;
 
-  AlignViewport av;
+  private AlignViewport av;
 
-  AlignmentPanel ap;
+  private AlignmentPanel ap;
 
   Font font;
 
@@ -97,7 +97,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable,
 
   int offy;
 
-  float threshold;
+  private float threshold;
 
   String longestName;
 
@@ -127,7 +127,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable,
   {
     this.tp = tp;
     this.av = ap.av;
-    this.ap = ap;
+    this.setAssociatedPanel(ap);
     font = av.getFont();
     scrollPane = scroller;
     addMouseListener(this);
@@ -584,8 +584,6 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable,
   public int print(Graphics pg, PageFormat pf, int pi)
           throws PrinterException
   {
-    pg.setFont(font);
-    pg.translate((int) pf.getImageableX(), (int) pf.getImageableY());
 
     int pwidth = (int) pf.getImageableWidth();
     int pheight = (int) pf.getImageableHeight();
@@ -602,6 +600,10 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable,
       pwidth = getWidth();
     }
 
+    pg = pg.create();
+    pg.setFont(font);
+    pg.translate((int) pf.getImageableX(), (int) pf.getImageableY());
+
     if (fitToWindow)
     {
       if (pheight > getHeight())
@@ -616,7 +618,8 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable,
       FontMetrics fm = pg.getFontMetrics(font);
       int height = fm.getHeight() * nameHash.size();
       pg.translate(0, -pi * pheight);
-      pg.setClip(0, pi * pheight, pwidth, (pi * pheight) + pheight);
+      // BH 2020.03.19 avoiding setClip here
+      pg.clipRect(0, pi * pheight, pwidth, (pi * pheight) + pheight);
 
       // translate number of pages,
       // height is screen size as this is the
@@ -626,6 +629,8 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable,
 
     draw(pg, pwidth, pheight);
 
+    pg.dispose();
+
     return Printable.PAGE_EXISTS;
   }
 
@@ -830,15 +835,17 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable,
    */
   void chooseSubtreeColour()
   {
-    Color col = JColorChooser.showDialog(this,
-            MessageManager.getString("label.select_subtree_colour"),
-            highlightNode.color);
-    if (col != null)
-    {
-      setColor(highlightNode, col);
-      PaintRefresher.Refresh(tp, ap.av.getSequenceSetId());
-      repaint();
-    }
+    String ttl = MessageManager.getString("label.select_subtree_colour");
+    ColourChooserListener listener = new ColourChooserListener() {
+      @Override
+      public void colourSelected(Color c)
+      {
+        setColor(highlightNode, c);
+        PaintRefresher.Refresh(tp, ap.av.getSequenceSetId());
+        repaint();
+      }
+    };
+    JalviewColourChooser.showColourChooser(this, ttl,  highlightNode.color, listener);
   }
 
   @Override
@@ -917,7 +924,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable,
     if (ob instanceof SequenceI)
     {
       treeSelectionChanged((Sequence) ob);
-      PaintRefresher.Refresh(tp, ap.av.getSequenceSetId());
+      PaintRefresher.Refresh(tp, getAssociatedPanel().av.getSequenceSetId());
       repaint();
       av.sendSelection();
       return;
@@ -949,6 +956,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable,
                     .deleteAllGroups();
             aps[a].av.getCodingComplement().clearSequenceColours();
           }
+          aps[a].av.setUpdateStructures(true);
         }
         colourGroups(groups);
 
@@ -962,7 +970,7 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable,
         }
       }
 
-      PaintRefresher.Refresh(tp, ap.av.getSequenceSetId());
+      PaintRefresher.Refresh(tp, getAssociatedPanel().av.getSequenceSetId());
       repaint();
     }
 
@@ -1088,7 +1096,47 @@ public class TreeCanvas extends JPanel implements MouseListener, Runnable,
     }
     else
     {
-      return new AlignmentPanel[] { ap };
+      return new AlignmentPanel[] { getAssociatedPanel() };
     }
   }
+
+  public AlignmentPanel getAssociatedPanel()
+  {
+    return ap;
+  }
+
+  public void setAssociatedPanel(AlignmentPanel ap)
+  {
+    this.ap = ap;
+  }
+
+  public AlignViewport getViewport()
+  {
+    return av;
+  }
+
+  public void setViewport(AlignViewport av)
+  {
+    this.av = av;
+  }
+
+  public float getThreshold()
+  {
+    return threshold;
+  }
+
+  public void setThreshold(float threshold)
+  {
+    this.threshold = threshold;
+  }
+
+  public boolean isApplyToAllViews()
+  {
+    return this.applyToAllViews;
+  }
+
+  public void setApplyToAllViews(boolean applyToAllViews)
+  {
+    this.applyToAllViews = applyToAllViews;
+  }
 }