JAL-3048 openLinkedAlignment refactor to use dialogRunner plus a conditional callback...
authorJim Procter <jprocter@issues.jalview.org>
Tue, 3 Jul 2018 16:30:43 +0000 (17:30 +0100)
committerJim Procter <jprocter@issues.jalview.org>
Tue, 3 Jul 2018 16:30:43 +0000 (17:30 +0100)
src/jalview/gui/AlignViewport.java

index 7e77bec..35a0cd3 100644 (file)
@@ -48,6 +48,7 @@ import jalview.structure.SelectionSource;
 import jalview.structure.StructureSelectionManager;
 import jalview.structure.VamsasSource;
 import jalview.util.MessageManager;
+import jalview.util.dialogrunner.RunResponse;
 import jalview.viewmodel.AlignmentViewport;
 import jalview.ws.params.AutoCalcSetting;
 
@@ -707,13 +708,15 @@ public class AlignViewport extends AlignmentViewport
     {
       if (AlignmentUtils.isMappable(toAdd, getAlignment()))
       {
-        if (openLinkedAlignment(toAdd, title))
-        {
-          return;
-        }
+        openLinkedAlignment(toAdd, title);
+        return;
       }
     }
+    alignmentDataAdded(toAdd);
+  }
 
+  private void alignmentDataAdded(AlignmentI toAdd)
+  {
     /*
      * No mappings, or offer declined - add sequences to this alignment
      */
@@ -751,30 +754,51 @@ public class AlignViewport extends AlignmentViewport
    * @param al
    * @param title
    */
-  protected boolean openLinkedAlignment(AlignmentI al, String title)
+  protected void openLinkedAlignment(AlignmentI al, String title)
   {
     String[] options = new String[] { MessageManager.getString("action.no"),
         MessageManager.getString("label.split_window"),
         MessageManager.getString("label.new_window"), };
     final String question = JvSwingUtils.wrapTooltip(true,
             MessageManager.getString("label.open_split_window?"));
-    int response = JvOptionPane.showOptionDialog(Desktop.desktop, question,
+    final AlignViewport us = this;
+    JvOptionPane.newOptionDialog(Desktop.desktop)
+            .response(new RunResponse(1)
+            {
+              @Override
+              public void run()
+              {
+                us.openLinkedAlignmentAs(al, title, true);
+              }
+            }).response(new RunResponse(2)
+            {
+              @Override
+              public void run()
+              {
+                us.openLinkedAlignmentAs(al, title, false);
+              }
+            }).defaultResponse(new Runnable()
+            {
+              @Override
+              public void run()
+              {
+                alignmentDataAdded(al);
+              }
+            }).showDialog(question,
             MessageManager.getString("label.open_split_window"),
             JvOptionPane.DEFAULT_OPTION, JvOptionPane.PLAIN_MESSAGE, null,
             options, options[0]);
+  }
 
-    if (response != 1 && response != 2)
+  protected void openLinkedAlignmentAs(AlignmentI al, String title,
+          boolean newWindowOrSplitPane)
     {
-      return false;
-    }
-    final boolean openSplitPane = (response == 1);
-    final boolean openInNewWindow = (response == 2);
-
     /*
      * Identify protein and dna alignments. Make a copy of this one if opening
      * in a new split pane.
      */
-    AlignmentI thisAlignment = openSplitPane ? new Alignment(getAlignment())
+    AlignmentI thisAlignment = newWindowOrSplitPane
+            ? new Alignment(getAlignment())
             : getAlignment();
     AlignmentI protein = al.isNucleotide() ? thisAlignment : al;
     final AlignmentI cdna = al.isNucleotide() ? al : thisAlignment;
@@ -806,7 +830,7 @@ public class AlignViewport extends AlignmentViewport
     // alignFrame.setFileName(file, format);
     // }
 
-    if (openInNewWindow)
+    if (!newWindowOrSplitPane)
     {
       Desktop.addInternalFrame(newAlignFrame, title,
               AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT);
@@ -820,13 +844,11 @@ public class AlignViewport extends AlignmentViewport
     {
     }
 
-    if (openSplitPane)
+    if (newWindowOrSplitPane)
     {
       al.alignAs(thisAlignment);
       protein = openSplitFrame(newAlignFrame, thisAlignment);
     }
-
-    return true;
   }
 
   /**