Jalview-JS/JAL-3253-applet JAL-3266 Varna fix.
authorhansonr <hansonr@STO24954W.ad.stolaf.edu>
Thu, 16 May 2019 18:32:18 +0000 (13:32 -0500)
committerhansonr <hansonr@STO24954W.ad.stolaf.edu>
Thu, 16 May 2019 19:53:53 +0000 (14:53 -0500)
For some reason, the JPopupMenu was being added to the JPanel with
Component.add(), and then removed with Component.removeAll()
-- during the painting process. This caused it to appear on the
window as its unstyled <ul><li>... list.

Also, during painting, Component.setBackground() was being set.
This is very nonstandard and cannot be recommended.
I am surprised it works in Java.

Working now in JavaScript. Export to SVG and PNG are very nice!

src/jalview/gui/AppVarna.java
srcjar/fr/orsay/lri/varna/VARNAPanel.java
swingjs/SwingJS-site.zip
swingjs/timestamp
swingjs/ver/3.2.4/SwingJS-site.zip
swingjs/ver/3.2.4/timestamp

index 3a64716..bb4528f 100644 (file)
@@ -80,11 +80,11 @@ public class AppVarna extends JInternalFrame
    * Lookup for sequence and annotation mapped to each RNA in the viewer. Using
    * a linked hashmap means that order is preserved when saved to the project.
    */
-  private Map<RNA, RnaModel> models = new LinkedHashMap<RNA, RnaModel>();
+  private Map<RNA, RnaModel> models = new LinkedHashMap<>();
 
-  private Map<RNA, ShiftList> offsets = new Hashtable<RNA, ShiftList>();
+  private Map<RNA, ShiftList> offsets = new Hashtable<>();
 
-  private Map<RNA, ShiftList> offsetsInv = new Hashtable<RNA, ShiftList>();
+  private Map<RNA, ShiftList> offsetsInv = new Hashtable<>();
 
   private JSplitPane split;
 
index 2a88044..5be74db 100644 (file)
@@ -794,13 +794,13 @@ public class VARNAPanel extends JPanel implements PropertyChangeListener
 
   private VARNAConfig _conf = new VARNAConfig();
 
-  private ArrayList<InterfaceVARNAListener> _VARNAListeners = new ArrayList<InterfaceVARNAListener>();
+  private ArrayList<InterfaceVARNAListener> _VARNAListeners = new ArrayList<>();
 
-  private ArrayList<InterfaceVARNASelectionListener> _selectionListeners = new ArrayList<InterfaceVARNASelectionListener>();
+  private ArrayList<InterfaceVARNASelectionListener> _selectionListeners = new ArrayList<>();
 
-  private ArrayList<InterfaceVARNARNAListener> _RNAListeners = new ArrayList<InterfaceVARNARNAListener>();
+  private ArrayList<InterfaceVARNARNAListener> _RNAListeners = new ArrayList<>();
 
-  private ArrayList<InterfaceVARNABasesListener> _basesListeners = new ArrayList<InterfaceVARNABasesListener>();
+  private ArrayList<InterfaceVARNABasesListener> _basesListeners = new ArrayList<>();
 
   UndoManager _manager;
 
@@ -824,7 +824,7 @@ public class VARNAPanel extends JPanel implements PropertyChangeListener
 
   private BaseList _selectedBases = new BaseList("selection");
 
-  private ArrayList<ModeleBase> _backupSelection = new ArrayList<ModeleBase>();
+  private ArrayList<ModeleBase> _backupSelection = new ArrayList<>();
 
   private Integer _nearestBase = null;
 
@@ -1010,7 +1010,9 @@ public class VARNAPanel extends JPanel implements PropertyChangeListener
   private void init()
   {
     _popup.buildPopupMenu();
-    this.add(_popup);
+    // BH 2019.05.16 *add* a popup menu? SwingJS issue here -- actually does ADD
+    // the menu
+    // this.add(_popup);
     setBackground(VARNAConfig.DEFAULT_BACKGROUND_COLOR);
     _manager = new UndoManager();
     _manager.setLimit(10000);
@@ -1058,13 +1060,17 @@ public class VARNAPanel extends JPanel implements PropertyChangeListener
   public void undo()
   {
     if (_manager.canUndo())
+    {
       _manager.undo();
+    }
   }
 
   public void redo()
   {
     if (_manager.canRedo())
+    {
       _manager.redo();
+    }
   }
 
   /**
@@ -1255,8 +1261,8 @@ public class VARNAPanel extends JPanel implements PropertyChangeListener
           double y, double margin)
   {
     Dimension d = g2D.getStringDimension(res);
-    x -= (double) d.width / 2.0;
-    y += (double) d.height / 2.0;
+    x -= d.width / 2.0;
+    y += d.height / 2.0;
     g2D.setColor(Color.GRAY);
     g2D.setSelectionStroke();
     g2D.drawRect((x - margin), (y - d.height - margin),
@@ -1360,9 +1366,13 @@ public class VARNAPanel extends JPanel implements PropertyChangeListener
   {
     double distance, coef;
     if (j - i == 1)
+    {
       coef = getBPHeightIncrement() * 1.75;
+    }
     else
+    {
       coef = getBPHeightIncrement();
+    }
     distance = dest.x - orig.x;
     switch (_conf._mainBPStyle)
     {
@@ -1702,7 +1712,9 @@ public class VARNAPanel extends JPanel implements PropertyChangeListener
       return getHighlightedVersion(c1, c2);
     }
     else
+    {
       return initialColor;
+    }
   }
 
   public static Point2D.Double computeExcentricUnitVector(int i,
@@ -2155,8 +2167,8 @@ public class VARNAPanel extends JPanel implements PropertyChangeListener
   {
     Rectangle2D.Double rnabbox = getExtendedRNABBox();
     double scaleFactor = Math.min(
-            (double) bbox.width / (double) rnabbox.width,
-            (double) bbox.height / (double) rnabbox.height);
+            bbox.width / rnabbox.width,
+            bbox.height / rnabbox.height);
 
     // Use it to get an estimate of the font size for numbers ...
     float newFontSize = Math.max(1,
@@ -2172,12 +2184,14 @@ public class VARNAPanel extends JPanel implements PropertyChangeListener
     rnabbox.width += newFontSize;
 
     // Now, compute the final scaling factor and corresponding font size
-    scaleFactor = Math.min((double) bbox.width / (double) rnabbox.width,
-            (double) bbox.height / (double) rnabbox.height);
+    scaleFactor = Math.min(bbox.width / rnabbox.width,
+            bbox.height / rnabbox.height);
     if (localView)
     {
       if (_conf._autoFit)
+      {
         setScaleFactor(scaleFactor);
+      }
       scaleFactor = getScaleFactor();
     }
     return scaleFactor;
@@ -2517,7 +2531,9 @@ public class VARNAPanel extends JPanel implements PropertyChangeListener
     double result = VARNAConfig.DEFAULT_COLOR_MAP_FONT_SIZE
             + _conf._colorMapHeight;
     if (!_conf._colorMapCaption.equals(""))
+    {
       result += VARNAConfig.DEFAULT_COLOR_MAP_FONT_SIZE;
+    }
     return result;
   }
 
@@ -2549,7 +2565,7 @@ public class VARNAPanel extends JPanel implements PropertyChangeListener
 
     for (int i = 0; i < _conf._colorMapWidth; i++)
     {
-      double ratio = (((double) i) / ((double) _conf._colorMapWidth));
+      double ratio = ((i) / (_conf._colorMapWidth));
       double val = v1 + (v2 - v1) * ratio;
       g2D.setColor(_conf._cm.getColorForValue(val));
       x = (xBase + scaleFactor * i);
@@ -2578,11 +2594,13 @@ public class VARNAPanel extends JPanel implements PropertyChangeListener
             yBase + scaleFactor * (_conf._colorMapHeight
                     + (VARNAConfig.DEFAULT_COLOR_MAP_FONT_SIZE / 1.7)));
     if (!_conf._colorMapCaption.equals(""))
+    {
       g2D.drawStringCentered("" + _conf._colorMapCaption,
               xBase + scaleFactor * _conf._colorMapWidth / 2.0,
               yBase + scaleFactor
                       * (VARNAConfig.DEFAULT_COLOR_MAP_FONT_SIZE / 1.7
                               + _conf._colorMapHeight));
+    }
 
   }
 
@@ -2617,6 +2635,7 @@ public class VARNAPanel extends JPanel implements PropertyChangeListener
             _offY + (getScaleFactor() * (coordDebut.y - rnabbox.y)));
   }
 
+  @Override
   public void paintComponent(Graphics g)
   {
     paintComponent(g, false);
@@ -2637,7 +2656,8 @@ public class VARNAPanel extends JPanel implements PropertyChangeListener
     VueVARNAGraphics g2D = new SwingGraphics(g2);
     g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
             RenderingHints.VALUE_ANTIALIAS_ON);
-    this.removeAll();
+    // BH 2019.05.16 *remove* the popup menu?
+    // this.removeAll();
     super.paintComponent(g2);
     renderComponent(g2D, transparentBackground, getScaleFactor());
     if (isFocusOwner())
@@ -2670,14 +2690,16 @@ public class VARNAPanel extends JPanel implements PropertyChangeListener
 
     updateTitleHeight();
 
-    if (!transparentBackground)
+    if (true || !transparentBackground)
     {
       g2D.setColor(_conf._backgroundColor);
       g2D.fillRect(0, 0, getWidth(), getHeight());
     }
     else
     {
-      super.setBackground(new Color(0, 0, 0, 120));
+      g2D.setColor(new Color(0, 0, 0, 120));
+      // BH SwingJS not allowing this TODO -- fix alpha for background color
+      // super.setBackground(new Color(0, 0, 0, 120));
     }
 
     if (_debug || _drawBorder)
@@ -2726,8 +2748,10 @@ public class VARNAPanel extends JPanel implements PropertyChangeListener
       g2D.drawLine(linkOrigin.x, linkOrigin.y, linkDestination.x,
               linkDestination.y);
       for (int i : getSelection().getIndices())
+      {
         drawBase(g2D, i, _realCoords, _realCenters,
                 scaleFactor * _RNA.BASE_RADIUS, scaleFactor, true);
+      }
     }
 
     if (_debug)
@@ -3172,7 +3196,9 @@ public class VARNAPanel extends JPanel implements PropertyChangeListener
       return false;
     }
     else
+    {
       return _interpolator.isInterpolationInProgress();
+    }
   }
 
   /**
@@ -3299,7 +3325,7 @@ public class VARNAPanel extends JPanel implements PropertyChangeListener
        * In this array, we'll have for each indexes of each characters of the
        * final super-structure, the RNA number which is own it.
        */
-      ArrayList<Integer> array_rnaOwn = new ArrayList<Integer>();
+      ArrayList<Integer> array_rnaOwn = new ArrayList<>();
 
       /**
        * Generating super-structure sequences and structures...
@@ -3767,8 +3793,10 @@ public class VARNAPanel extends JPanel implements PropertyChangeListener
   public void emitWarning(String warning)
   {
     if (_conf._showWarnings)
+    {
       JOptionPane.showMessageDialog(this, warning, "VARNA Warning",
               JOptionPane.WARNING_MESSAGE);
+    }
   }
 
   public static void emitWarningStatic(Exception e, Component c)
@@ -4260,6 +4288,7 @@ public class VARNAPanel extends JPanel implements PropertyChangeListener
    * @param c
    *          New background color
    */
+  @Override
   public void setBackground(Color c)
   {
     if (_conf != null)
@@ -4284,7 +4313,7 @@ public class VARNAPanel extends JPanel implements PropertyChangeListener
    */
   public void highlightSelectedBase(ModeleBase m)
   {
-    ArrayList<Integer> v = new ArrayList<Integer>();
+    ArrayList<Integer> v = new ArrayList<>();
     int sel = m.getIndex();
     if (sel != -1)
     {
@@ -4298,7 +4327,7 @@ public class VARNAPanel extends JPanel implements PropertyChangeListener
    */
   public void highlightSelectedStem(ModeleBase m)
   {
-    ArrayList<Integer> v = new ArrayList<Integer>();
+    ArrayList<Integer> v = new ArrayList<>();
     int sel = m.getIndex();
     if (sel != -1)
     {
@@ -4335,29 +4364,33 @@ public class VARNAPanel extends JPanel implements PropertyChangeListener
   public ArrayList<Integer> getBasesInRectangleDiff(Rectangle recIn,
           Rectangle recOut)
   {
-    ArrayList<Integer> result = new ArrayList<Integer>();
+    ArrayList<Integer> result = new ArrayList<>();
     for (int i = 0; i < _realCoords.length; i++)
     {
       if (recIn.contains(_realCoords[i]) ^ recOut.contains(_realCoords[i]))
+      {
         result.add(i);
+      }
     }
     return result;
   }
 
   public ArrayList<Integer> getBasesInRectangle(Rectangle rec)
   {
-    ArrayList<Integer> result = new ArrayList<Integer>();
+    ArrayList<Integer> result = new ArrayList<>();
     for (int i = 0; i < _realCoords.length; i++)
     {
       if (rec.contains(_realCoords[i]))
+      {
         result.add(i);
+      }
     }
     return result;
   }
 
   public void setSelectionRectangle(Rectangle rec)
   {
-    ArrayList<Integer> result = new ArrayList<Integer>();
+    ArrayList<Integer> result = new ArrayList<>();
     if (_selectionRectangle != null)
     {
       result = getBasesInRectangleDiff(_selectionRectangle, rec);
@@ -4417,9 +4450,13 @@ public class VARNAPanel extends JPanel implements PropertyChangeListener
   public void toggleSelection(int i)
   {
     if (isInSelection(i))
+    {
       removeFromSelection(i);
+    }
     else
+    {
       addToSelection(i);
+    }
   }
 
   public void toggleSelection(Collection<? extends Integer> indices)
@@ -5031,7 +5068,9 @@ public class VARNAPanel extends JPanel implements PropertyChangeListener
   {
     int i = getNearestBaseIndex(x, y, always, onlyPaired);
     if (i == -1)
+    {
       return null;
+    }
     return getRNA().get_listeBases().get(i);
   }
 
index beed196..51276f9 100644 (file)
Binary files a/swingjs/SwingJS-site.zip and b/swingjs/SwingJS-site.zip differ
index 7134b98..324f5c1 100644 (file)
@@ -1 +1 @@
-20190516082613 
+20190516132838 
index beed196..51276f9 100644 (file)
Binary files a/swingjs/ver/3.2.4/SwingJS-site.zip and b/swingjs/ver/3.2.4/SwingJS-site.zip differ
index 7134b98..324f5c1 100644 (file)
@@ -1 +1 @@
-20190516082613 
+20190516132838