JAL-3048 refactored export settings to bean+dialog with callbacks - basically works...
[jalview.git] / src / jalview / gui / AlignExportSettings.java
index 201570e..fbe12d8 100644 (file)
 package jalview.gui;
 
 import jalview.api.AlignExportSettingI;
+import jalview.api.AlignViewportI;
 import jalview.bin.Jalview;
+import jalview.datamodel.AlignExportSettingBeanI;
+import jalview.datamodel.AlignmentExportData;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.HiddenSequences;
 import jalview.io.FileFormatI;
 import jalview.jbgui.GAlignExportSettings;
 import jalview.util.MessageManager;
+import jalview.util.dialogrunner.RunResponse;
 
 import java.awt.event.ActionEvent;
-import java.awt.event.WindowAdapter;
-import java.awt.event.WindowEvent;
+import java.awt.event.ActionListener;
 
-import javax.swing.JDialog;
 import javax.swing.JOptionPane;
 
 @SuppressWarnings("serial")
@@ -39,86 +43,154 @@ public class AlignExportSettings extends GAlignExportSettings
 {
   boolean cancelled = false;
 
-  JDialog dialog;
+  JvOptionPane dialog;
 
-  public AlignExportSettings(boolean hasHiddenSeq, boolean hasHiddenCols,
-          FileFormatI format)
+  AlignmentPanel alignPanel;
+  
+  /**
+   * settings provided at construction override the GUI 
+   */
+  AlignExportSettingBeanI override=null;
+
+  public AlignExportSettings(AlignmentPanel alignmentPanel,
+          FileFormatI format, AlignExportSettingBeanI exportSettings)
   {
-    super(hasHiddenSeq, hasHiddenCols, format);
-    if (!Jalview.isHeadlessMode() && isShowDialog())
-    {
+    super(alignmentPanel.getAlignViewport().hasHiddenRows(),
+            alignmentPanel.getAlignViewport().hasHiddenColumns(), format);
+    this.alignPanel = alignmentPanel;
+    override = exportSettings;
+  }     
+
+  /**
+   * @param viewport
+   * @return a bean with data for export
+   */
+  @Override
+  public AlignmentExportData getAlignExportData()
+  {
+    // settings.isExportAnnotations();
 
-      JOptionPane pane = new JOptionPane(null, JOptionPane.DEFAULT_OPTION,
-              JvOptionPane.DEFAULT_OPTION, null, new Object[]
-              { this });
-      dialog = pane.createDialog(Desktop.desktop,
-              MessageManager.getString("label.export_settings"));
-      dialog.addWindowListener(new WindowAdapter()
-      {
-        @Override
-        public void windowClosing(WindowEvent e)
-        {
-          cancelled = true;
-        }
-      });
-      dialog.pack();
-      dialog.setVisible(true);
-      dialog.setContentPane(this);
-      dialog.validate();
+    AlignmentI alignmentToExport = null;
+    String[] omitHidden = null;
+    AlignViewportI viewport = alignPanel.getAlignViewport();
+
+    alignmentToExport = viewport.getAlignment();
 
+    if (viewport.hasHiddenColumns() && !isExportHiddenColumns())
+    {
+      omitHidden = viewport.getViewAsString(false,
+              isExportHiddenSequences());
+    }
+
+    int[] alignmentStartEnd = new int[2];
+    if (viewport.hasHiddenRows() && isExportHiddenSequences())
+    {
+      alignmentToExport = viewport.getAlignment().getHiddenSequences()
+              .getFullAlignment();
+    }
+    else
+    {
+      alignmentToExport = viewport.getAlignment();
     }
+    alignmentStartEnd = viewport.getAlignment().getHiddenColumns()
+            .getVisibleStartAndEndIndex(alignmentToExport.getWidth());
+    AlignmentExportData ed = new AlignmentExportData(alignmentToExport,
+            omitHidden, alignmentStartEnd, this);
+    return ed;
   }
 
   @Override
   public void ok_actionPerformed(ActionEvent e)
   {
     cancelled = false;
-    dialog.setVisible(false);
-    dialog.dispose();
   }
 
   @Override
   public void cancel_actionPerformed(ActionEvent e)
   {
     cancelled = true;
-    dialog.setVisible(false);
-    dialog.dispose();
   }
 
   @Override
   public boolean isExportHiddenSequences()
   {
-    return chkHiddenSeqs.isSelected();
+    return override!=null ? override.isExportHiddenSequences() : chkHiddenSeqs.isSelected();
   }
 
   @Override
   public boolean isExportHiddenColumns()
   {
-    return chkHiddenCols.isSelected();
+    return override!=null ? override.isExportHiddenColumns() : chkHiddenCols.isSelected();
   }
 
   @Override
   public boolean isExportAnnotations()
   {
-    return chkExportAnnots.isSelected();
+    return override!=null ? override.isExportAnnotations() : chkExportAnnots.isSelected();
   }
 
   @Override
   public boolean isExportFeatures()
   {
-    return chkExportFeats.isSelected();
+    return override!=null ? override.isExportFeatures() : chkExportFeats.isSelected();
   }
 
   @Override
   public boolean isExportGroups()
   {
-    return chkExportGrps.isSelected();
+    return override!=null ? override.isExportGroups() : chkExportGrps.isSelected();
   }
 
   @Override
   public boolean isCancelled()
   {
-    return cancelled;
+    return override!=null ? override.isCancelled() : cancelled;
+  }
+
+  ActionListener afterShownAction = null;
+
+  @Override
+  public void addActionListener(ActionListener actionListener)
+  {
+    afterShownAction = actionListener;
+  }
+
+  @Override
+  public void doShowSettings()
+  {
+    if (!Jalview.isHeadlessMode() && override==null && isShowDialog())
+    {
+
+      dialog = JvOptionPane.newOptionDialog(alignPanel);
+
+      dialog.response(new RunResponse(JvOptionPane.OK_OPTION)
+      {
+        public void run()
+        {
+          ok_actionPerformed(null);
+          afterShownAction.actionPerformed(null);
+        }
+      }).defaultResponse(new Runnable()
+      {
+        @Override
+        public void run()
+        {
+          cancelled=true;
+          afterShownAction.actionPerformed(null);
+        }
+      });
+      String ok = MessageManager.getString("action.ok"),
+              cancel = MessageManager.getString("action.cancel");
+      dialog.showInternalDialog(this,
+              MessageManager.getString("label.export_settings"),
+              JOptionPane.DEFAULT_OPTION, JvOptionPane.DEFAULT_OPTION, null,
+              new Object[]
+              { ok, cancel }, ok);
+    }
+    else
+    {
+      afterShownAction.actionPerformed(null);
+    }
   }
 
 }