3253-omnibus save
[jalview.git] / src / jalview / gui / AlignFrame.java
index e44ccdc..b5c257b 100644 (file)
@@ -33,8 +33,8 @@ import jalview.api.AlignViewControllerGuiI;
 import jalview.api.AlignViewControllerI;
 import jalview.api.AlignViewportI;
 import jalview.api.AlignmentViewPanel;
-//from JalviewLite imports import jalview.api.FeatureRenderer;
 import jalview.api.FeatureSettingsControllerI;
+import jalview.api.FeatureSettingsModelI;
 import jalview.api.SplitContainerI;
 import jalview.api.ViewStyleI;
 import jalview.api.analysis.SimilarityParamsI;
@@ -300,6 +300,9 @@ public class AlignFrame extends GAlignFrame
     }
 
     viewport = new AlignViewport(al, hiddenColumns, sequenceSetId, viewId);
+    // BH! new alignPanel must come later
+    // alignPanel = new AlignmentPanel(this, viewport);
+    // addAlignmentPanel(alignPanel, true);
 
     init();
   }
@@ -320,7 +323,10 @@ public class AlignFrame extends GAlignFrame
     {
       viewport.hideSequence(hiddenSeqs);
     }
-    init();
+ // BH! new alignPanel must come later
+    //alignPanel = new AlignmentPanel(this, viewport);
+    //addAlignmentPanel(alignPanel, true);
+init();
   }
 
   /**
@@ -335,6 +341,8 @@ public class AlignFrame extends GAlignFrame
   {
     viewport = ap.av;
     alignPanel = ap;
+    // BH! adding must come later
+    // addAlignmentPanel(ap, false);
     init();
   }
 
@@ -344,6 +352,7 @@ public class AlignFrame extends GAlignFrame
    */
   void init()
   {
+          // BH! Here is where we create the panel; note the sequence
     boolean newPanel = (alignPanel == null);
     viewport.setShowAutocalculatedAbove(isShowAutoCalculatedAbove());
     if (newPanel)
@@ -366,7 +375,8 @@ public class AlignFrame extends GAlignFrame
     addAlignmentPanel(alignPanel, newPanel);
 
     // setBackground(Color.white); // BH 2019
-                 
+         
+    // BH meaning "without display, one way or another"
     if (!Jalview.isHeadlessMode())
     {
       progressBar = new ProgressBar(this.statusPanel, this.statusBar);
@@ -386,7 +396,7 @@ public class AlignFrame extends GAlignFrame
       // modifyPID.setEnabled(false);
     }
 
-    String sortby = jalview.bin.Cache.getDefault(Preferences.SORT_ALIGNMENT,
+    String sortby = Cache.getDefault(Preferences.SORT_ALIGNMENT,
             "No sort");
 
     if (sortby.equals("Id"))
@@ -398,6 +408,9 @@ public class AlignFrame extends GAlignFrame
       sortPairwiseMenuItem_actionPerformed(null);
     }
 
+    alignPanel.av
+            .setShowAutocalculatedAbove(isShowAutoCalculatedAbove());
+
     setMenusFromViewport(viewport);
     buildSortByAnnotationScoresMenu();
     calculateTree.addActionListener(new ActionListener()
@@ -414,24 +427,10 @@ public class AlignFrame extends GAlignFrame
     if (Desktop.getDesktopPane() != null)
     {
       this.setDropTarget(new java.awt.dnd.DropTarget(this, this));
-      PropertyChangeListener serviceListener = (Platform.isJS() ? null
-              : addServiceListeners());
-      addInternalFrameListener(new javax.swing.event.InternalFrameAdapter()
+      if (!Platform.isJS())
       {
-        @Override
-        public void internalFrameClosed(
-                javax.swing.event.InternalFrameEvent evt)
-        {
-          // System.out.println("deregistering discoverer listener");
-          if (serviceListener != null)
-          {
-            Desktop.getInstance().removeJalviewPropertyChangeListener(
-                    "services", serviceListener);
-          }
-          closeMenuItem_actionPerformed(true);
-        }
-      });
-
+        addServiceListeners();
+      }
       setGUINucleotide();
     }
 
@@ -823,6 +822,7 @@ public class AlignFrame extends GAlignFrame
       {
         ap.av.getAlignment().padGaps();
       }
+      // BH! important option for JalviewJS
       if (Jalview.getInstance().getStartCalculations())
       {
         ap.av.updateConservation(ap);
@@ -848,9 +848,11 @@ public class AlignFrame extends GAlignFrame
   }
 
   /* Set up intrinsic listeners for dynamically generated GUI bits. */
-  private PropertyChangeListener addServiceListeners()
+  private void addServiceListeners()
   {
-    PropertyChangeListener serviceListener = new PropertyChangeListener()
+    PropertyChangeListener thisListener;
+    Desktop.getInstance().addJalviewPropertyChangeListener("services",
+            thisListener = new PropertyChangeListener()
     {
       @Override
       public void propertyChange(PropertyChangeEvent evt)
@@ -862,16 +864,26 @@ public class AlignFrame extends GAlignFrame
             @Override
             public void run()
             {
-              System.err.println("Rebuild WS Menu for service change");
+                      System.err.println(
+                              "Rebuild WS Menu for service change");
               BuildWebServiceMenu();
             }
           });
         }
       }
-    };
-
-    Desktop.getInstance().addJalviewPropertyChangeListener("services",
-            serviceListener);
+    });
+    addInternalFrameListener(new javax.swing.event.InternalFrameAdapter()
+    {
+      @Override
+      public void internalFrameClosed(
+              javax.swing.event.InternalFrameEvent evt)
+      {
+        // System.out.println("deregistering discoverer listener");
+        Desktop.getInstance().removeJalviewPropertyChangeListener("services",
+                thisListener);
+        closeMenuItem_actionPerformed(true);
+      }
+    });
     // Finally, build the menu once to get current service state
     new Thread(new Runnable()
     {
@@ -881,7 +893,6 @@ public class AlignFrame extends GAlignFrame
         BuildWebServiceMenu();
       }
     }).start();
-    return serviceListener;
   }
 
   /**
@@ -942,9 +953,8 @@ public class AlignFrame extends GAlignFrame
     scaleLeft.setVisible(av.getWrapAlignment());
     scaleRight.setVisible(av.getWrapAlignment());
     annotationPanelMenuItem.setState(av.isShowAnnotation());
-    /*
-     * Show/hide annotations only enabled if annotation panel is shown
-     */
+    //   Show/hide annotations only enabled if annotation panel is shown
+     
     syncAnnotationMenuItems();
 
     viewBoxesMenuItem.setSelected(av.getShowBoxes());
@@ -1086,9 +1096,14 @@ public class AlignFrame extends GAlignFrame
       DataSourceType protocol = fileName.startsWith("http:")
               ? DataSourceType.URL
               : DataSourceType.FILE;
-      loader.loadFile(viewport,
-              (fileObject == null ? fileName : fileObject), protocol,
-              currentFileFormat);
+      if (fileObject == null)
+      {
+        loader.LoadFile(fileName, protocol, currentFileFormat);
+      }
+      else
+      {
+        loader.loadFile(null, fileObject, protocol, currentFileFormat);
+      }
     }
     else
     {
@@ -1100,11 +1115,11 @@ public class AlignFrame extends GAlignFrame
 
       if (fileObject == null)
       {
-
+// BH! Q: What about https?
         DataSourceType protocol = (fileName.startsWith("http:")
                 ? DataSourceType.URL
                 : DataSourceType.FILE);
-        newframe = loader.loadFileWaitTillLoaded(fileName, protocol,
+        newframe = loader.LoadFileWaitTillLoaded(fileName, protocol,
                 currentFileFormat);
       }
       else
@@ -1310,7 +1325,7 @@ public class AlignFrame extends GAlignFrame
           try
           {
             String tempFilePath = doBackup ? backupfiles.getTempFilePath() : file;
-                       PrintWriter out = new PrintWriter(
+                        PrintWriter out = new PrintWriter(
                     new FileWriter(tempFilePath));
 
             out.print(output);
@@ -1569,6 +1584,11 @@ public class AlignFrame extends GAlignFrame
 
       if (closeAllTabs)
       {
+        if (featureSettings != null && featureSettings.isOpen())
+        {
+          featureSettings.close();
+          featureSettings = null;
+        }
         /*
          * this will raise an INTERNAL_FRAME_CLOSED event and this method will
          * be called recursively, with the frame now in 'closed' state
@@ -2184,7 +2204,7 @@ public class AlignFrame extends GAlignFrame
                     newGraphGroups.add(q, null);
                   }
                   newGraphGroups.set(newann.graphGroup,
-                          new Integer(++fgroup));
+                          Integer.valueOf(++fgroup));
                 }
                 newann.graphGroup = newGraphGroups.get(newann.graphGroup)
                         .intValue();
@@ -2231,7 +2251,7 @@ public class AlignFrame extends GAlignFrame
                     newGraphGroups.add(q, null);
                   }
                   newGraphGroups.set(newann.graphGroup,
-                          new Integer(++fgroup));
+                          Integer.valueOf(++fgroup));
                 }
                 newann.graphGroup = newGraphGroups.get(newann.graphGroup)
                         .intValue();
@@ -2429,33 +2449,33 @@ public class AlignFrame extends GAlignFrame
 
     Runnable okAction = new Runnable() 
     {
-               @Override
-               public void run() 
-               {
-                   SequenceI[] cut = sg.getSequences()
-                           .toArray(new SequenceI[sg.getSize()]);
-
-                   addHistoryItem(new EditCommand(
-                           MessageManager.getString("label.cut_sequences"), Action.CUT,
-                           cut, sg.getStartRes(), sg.getEndRes() - sg.getStartRes() + 1,
-                           viewport.getAlignment()));
-
-                   viewport.setSelectionGroup(null);
-                   viewport.sendSelection();
-                   viewport.getAlignment().deleteGroup(sg);
-
-                   viewport.firePropertyChange("alignment", null,
-                           viewport.getAlignment().getSequences());
-                   if (viewport.getAlignment().getHeight() < 1)
-                   {
-                     try
-                     {
-                       AlignFrame.this.setClosed(true);
-                     } catch (Exception ex)
-                     {
-                     }
-                   }
-               }};
+                @Override
+                public void run() 
+                {
+                    SequenceI[] cut = sg.getSequences()
+                            .toArray(new SequenceI[sg.getSize()]);
+
+                    addHistoryItem(new EditCommand(
+                            MessageManager.getString("label.cut_sequences"), Action.CUT,
+                            cut, sg.getStartRes(), sg.getEndRes() - sg.getStartRes() + 1,
+                            viewport.getAlignment()));
+
+                    viewport.setSelectionGroup(null);
+                    viewport.sendSelection();
+                    viewport.getAlignment().deleteGroup(sg);
+
+                    viewport.firePropertyChange("alignment", null,
+                            viewport.getAlignment().getSequences());
+                    if (viewport.getAlignment().getHeight() < 1)
+                    {
+                      try
+                      {
+                        AlignFrame.this.setClosed(true);
+                      } catch (Exception ex)
+                      {
+                      }
+                    }
+                }};
 
     /*
      * If the cut affects all sequences, prompt for confirmation
@@ -2463,20 +2483,20 @@ public class AlignFrame extends GAlignFrame
     boolean wholeHeight = sg.getSize() == viewport.getAlignment().getHeight();
     boolean wholeWidth = (((sg.getEndRes() - sg.getStartRes())
             + 1) == viewport.getAlignment().getWidth()) ? true : false;
-       if (wholeHeight && wholeWidth)
-       {
-           JvOptionPane dialog = JvOptionPane.newOptionDialog(Desktop.getDesktopPane());
-               dialog.setResponseHandler(0, okAction); // 0 = OK_OPTION
-           Object[] options = new Object[] { MessageManager.getString("action.ok"),
-                   MessageManager.getString("action.cancel") };
-               dialog.showDialog(MessageManager.getString("warn.delete_all"),
-                   MessageManager.getString("label.delete_all"),
-                   JvOptionPane.DEFAULT_OPTION, JvOptionPane.PLAIN_MESSAGE, null,
-                   options, options[0]);
-       } else 
-       {
-               okAction.run();
-       }
+        if (wholeHeight && wholeWidth)
+        {
+            JvOptionPane dialog = JvOptionPane.newOptionDialog(Desktop.getDesktopPane());
+                dialog.setResponseHandler(0, okAction); // 0 = OK_OPTION
+            Object[] options = new Object[] { MessageManager.getString("action.ok"),
+                    MessageManager.getString("action.cancel") };
+                dialog.showDialog(MessageManager.getString("warn.delete_all"),
+                    MessageManager.getString("label.delete_all"),
+                    JvOptionPane.DEFAULT_OPTION, JvOptionPane.PLAIN_MESSAGE, null,
+                    options, options[0]);
+        } else 
+        {
+                okAction.run();
+        }
   }
 
   /**
@@ -3276,9 +3296,15 @@ public class AlignFrame extends GAlignFrame
   @Override
   public void featureSettings_actionPerformed(ActionEvent e)
   {
+    showFeatureSettingsUI();
+  }
+
+  @Override
+  public FeatureSettingsControllerI showFeatureSettingsUI()
+  {
     if (featureSettings != null)
     {
-      featureSettings.close();
+      featureSettings.closeOldSettings();
       featureSettings = null;
     }
     if (!showSeqFeatures.isSelected())
@@ -3288,6 +3314,7 @@ public class AlignFrame extends GAlignFrame
       showSeqFeatures_actionPerformed(null);
     }
     featureSettings = new FeatureSettings(this);
+    return featureSettings;
   }
 
   /**
@@ -4695,6 +4722,7 @@ public class AlignFrame extends GAlignFrame
                   // associating PDB files which have no IDs.
                   for (SequenceI toassoc : (SequenceI[]) fm[2])
                   {
+                         // BH! check
                     PDBEntry pe = AssociatePdbFileWithSeq
                             .associatePdbWithSeq(fm[0].toString(),
                                     (DataSourceType) fm[1], toassoc, false);
@@ -4862,12 +4890,24 @@ public class AlignFrame extends GAlignFrame
           {
             if (parseFeaturesFile(file, sourceType))
             {
+              SplitFrame splitFrame = (SplitFrame) getSplitViewContainer();
+              if (splitFrame != null)
+              {
+                splitFrame.repaint();
+              }
+              else
+              {
               alignPanel.paintAlignment(true, true);
             }
           }
+          }
           else
           {
-            new FileLoader().loadFile(viewport, file, sourceType, format);
+                 if (file instanceof File) {
+                  new FileLoader().loadFile(viewport, (File) file, sourceType, format);
+                 } else {
+                  new FileLoader().LoadFile(viewport, (String) file, sourceType, format);
+                 }
           }
         }
       }
@@ -4926,6 +4966,21 @@ public class AlignFrame extends GAlignFrame
       viewport = alignPanel.av;
       avc.setViewportAndAlignmentPanel(viewport, alignPanel);
       setMenusFromViewport(viewport);
+      if (featureSettings != null && featureSettings.isOpen()
+              && featureSettings.fr.getViewport() != viewport)
+      {
+        if (viewport.isShowSequenceFeatures())
+        {
+          // refresh the featureSettings to reflect UI change
+          showFeatureSettingsUI();
+    }
+        else
+        {
+          // close feature settings for this view.
+          featureSettings.close();
+        }
+      }
+
     }
 
     /*
@@ -5149,6 +5204,13 @@ public class AlignFrame extends GAlignFrame
               @Override
               public void finished()
               {
+
+                for (FeatureSettingsModelI srcSettings : dbRefFetcher
+                        .getFeatureSettingsModels())
+                {
+
+                  alignPanel.av.mergeFeaturesStyle(srcSettings);
+                }
                 AlignFrame.this.setMenusForViewport();
               }
             });
@@ -5195,6 +5257,7 @@ public class AlignFrame extends GAlignFrame
               }
               if (otherdb.size() == 1)
               {
+                 // BH cleaner code
                 DbSourceProxy src = otherdb.get(0);
                 DbSourceProxy[] dassource = new DbSourceProxy[] {
                     src };
@@ -5225,6 +5288,10 @@ public class AlignFrame extends GAlignFrame
                                   @Override
                                   public void finished()
                                   {
+                                    FeatureSettingsModelI srcSettings = dassource[0]
+                                            .getFeatureColourScheme();
+                                    alignPanel.av.mergeFeaturesStyle(
+                                            srcSettings);
                                     AlignFrame.this.setMenusForViewport();
                                   }
                                 });
@@ -5855,6 +5922,20 @@ public class AlignFrame extends GAlignFrame
 
   }
 
+
+  private Rectangle lastFeatureSettingsBounds = null;
+  @Override
+  public void setFeatureSettingsGeometry(Rectangle bounds)
+  {
+    lastFeatureSettingsBounds = bounds;
+  }
+
+  @Override
+  public Rectangle getFeatureSettingsGeometry()
+  {
+    return lastFeatureSettingsBounds;
+  }
+  
   /**
    * BH 2019 from JalviewLite
    *