Merge branch 'develop' into features/JAL-1780_export-settings_flatfile
authorJim Procter <jprocter@issues.jalview.org>
Wed, 17 Jun 2015 10:40:07 +0000 (11:40 +0100)
committerJim Procter <jprocter@issues.jalview.org>
Wed, 17 Jun 2015 10:40:07 +0000 (11:40 +0100)
src/jalview/api/AlignExportSettingI.java [new file with mode: 0644]
src/jalview/api/AlignViewportI.java
src/jalview/appletgui/AlignFrame.java
src/jalview/appletgui/AlignViewport.java
src/jalview/gui/AlignExportSettings.java [new file with mode: 0644]
src/jalview/gui/AlignFrame.java
src/jalview/gui/AlignViewport.java
src/jalview/io/JSONFile.java
src/jalview/jbgui/GAlignExportSettings.java [new file with mode: 0644]

diff --git a/src/jalview/api/AlignExportSettingI.java b/src/jalview/api/AlignExportSettingI.java
new file mode 100644 (file)
index 0000000..cf56bf3
--- /dev/null
@@ -0,0 +1,77 @@
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ * 
+ * This file is part of Jalview.
+ * 
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License 
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *  
+ * Jalview is distributed in the hope that it will be useful, but 
+ * WITHOUT ANY WARRANTY; without even the implied warranty 
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
+ * PURPOSE.  See the GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
+
+package jalview.api;
+
+/**
+ * Abstract interface implemented by Alignment Export dialog to retrieve user
+ * configurations
+ * 
+ * @author tcnofoegbu
+ *
+ */
+public interface AlignExportSettingI
+{
+  /**
+   * Checks if hidden sequences should be exported
+   * 
+   * @return
+   */
+  public boolean isExportHiddenSequences();
+
+  /**
+   * Checks if hidden columns shoulb be exported
+   * 
+   * @return
+   */
+  public boolean isExportHiddenColumns();
+
+  /**
+   * Checks if Annotations should be exported, note this is available for
+   * complex flat file exports like JSON, HTML, GFF
+   * 
+   * @return
+   */
+  public boolean isExportAnnotations();
+
+  /**
+   * Checks if SequenceFeatures should be exported, note this is available for
+   * complex flat file exports like JSON, HTML, GFF
+   * 
+   * @return
+   */
+  public boolean isExportFeatures();
+
+  /**
+   * Checks if SequenceGroups should be exported, note this is available for
+   * complex flat file exports like JSON, HTML, GFF
+   * 
+   * @return
+   */
+  public boolean isExportGroups();
+
+  /**
+   * Checks if settings/export process is cancelled
+   * 
+   * @return
+   */
+  public boolean isCancelled();
+}
index 34ee209..fa73194 100644 (file)
@@ -373,10 +373,25 @@ public interface AlignViewportI extends ViewStyleI
    */
   void setFollowHighlight(boolean b);
 
+  /**
+   * Returns a FeatureRenderer instance
+   * 
+   * @return
+   */
   public FeatureRenderer getFeatureRenderer();
 
+  /**
+   * Sets a FeatureRenderer for a viewport
+   * 
+   * @param featureRenderer
+   */
   public void setFeatureRenderer(FeatureRenderer featureRenderer);
 
-  public boolean isIncludeHiddenRegion();
+  /**
+   * Returns Settings for exporting an Alignment
+   * 
+   * @return
+   */
+  public AlignExportSettingI getExportSettings();
 
 }
index 1510a14..4f7e2b9 100644 (file)
@@ -1341,7 +1341,6 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
 
     FeatureRenderer fr = this.alignPanel.cloneFeatureRenderer();
     viewport.setFeatureRenderer(fr);
-    viewport.setIncludeHiddenRegion(false);
     cap.setText(new AppletFormatAdapter(viewport).formatSequences(
             e.getActionCommand(), viewport.getAlignment(),
             viewport.getShowJVSuffix()));
index 607dc05..d7ec681 100644 (file)
@@ -23,6 +23,7 @@ package jalview.appletgui;
 import java.awt.Font;
 
 import jalview.analysis.NJTree;
+import jalview.api.AlignExportSettingI;
 import jalview.api.AlignViewportI;
 import jalview.api.FeatureRenderer;
 import jalview.bin.JalviewLite;
@@ -60,7 +61,7 @@ public class AlignViewport extends AlignmentViewport implements
 
   private FeatureRenderer featureRenderer;
 
-  private boolean includeHiddenRegion = true;
+  private AlignExportSettingI exportSettings;
 
   public void finalize()
   {
@@ -485,14 +486,15 @@ public class AlignViewport extends AlignmentViewport implements
 
   }
 
-  public boolean isIncludeHiddenRegion()
+  public AlignExportSettingI getExportSettings()
   {
-    return includeHiddenRegion;
+    return exportSettings;
   }
 
-  public void setIncludeHiddenRegion(boolean includeHiddenRegion)
+  public void setExportSettings(AlignExportSettingI exportSettings)
   {
-    this.includeHiddenRegion = includeHiddenRegion;
+    this.exportSettings = exportSettings;
   }
 
+
 }
diff --git a/src/jalview/gui/AlignExportSettings.java b/src/jalview/gui/AlignExportSettings.java
new file mode 100644 (file)
index 0000000..fe7c940
--- /dev/null
@@ -0,0 +1,115 @@
+package jalview.gui;
+
+import java.awt.event.ActionEvent;
+
+import javax.swing.JDialog;
+import javax.swing.JInternalFrame;
+import javax.swing.JOptionPane;
+
+import jalview.api.AlignExportSettingI;
+import jalview.jbgui.GAlignExportSettings;
+
+@SuppressWarnings("serial")
+public class AlignExportSettings extends GAlignExportSettings implements
+        AlignExportSettingI
+{
+  protected JInternalFrame frame;
+
+  boolean cancelled = false;
+
+  private int width = 450;
+
+  private int height = 200;
+
+  JDialog dialog;
+
+  public AlignExportSettings(boolean hasHiddenSeq, boolean hasHiddenCols,
+          String alignFileFormat)
+  {
+    super(hasHiddenSeq, hasHiddenCols, alignFileFormat);
+
+    // frame = new JInternalFrame();
+    // frame.setContentPane(this);
+    // frame.setLayer(JLayeredPane.PALETTE_LAYER);
+    // Desktop.addInternalFrame(frame, "Export Settings", width, height);
+
+    JOptionPane pane = new JOptionPane(null, JOptionPane.DEFAULT_OPTION,
+            JOptionPane.DEFAULT_OPTION, null, new Object[]
+            { this });
+    dialog = pane.createDialog(Desktop.desktop, "Export Settings");
+
+    // dialog = new JDialog(Desktop.instance, true);
+    // dialog.setTitle("Export Settings");
+
+    dialog.pack();
+    dialog.setVisible(true);
+
+    dialog.setContentPane(this);
+    dialog.validate();
+
+  }
+
+  // public static void main(String[] args)
+  // {
+  // new AlignExportSettings(false, false, false);
+  // }
+
+  // public void cancel_actionPerformed(ActionEvent e)
+  // {
+    // try
+    // {
+    // frame.setClosed(true);
+    // } catch (Exception ex)
+    // {
+    // }
+  // }
+
+  public void ok_actionPerformed(ActionEvent e)
+  {
+    cancelled = false;
+    dialog.setVisible(false);
+  }
+
+  public void cancel_actionPerformed(ActionEvent e)
+  {
+    cancelled = true;
+    dialog.setVisible(false);
+  }
+
+  @Override
+  public boolean isExportHiddenSequences()
+  {
+    return chkHiddenSeqs.isSelected();
+  }
+
+  @Override
+  public boolean isExportHiddenColumns()
+  {
+    return chkHiddenCols.isSelected();
+  }
+
+  @Override
+  public boolean isExportAnnotations()
+  {
+    return chkExportAnnots.isSelected();
+  }
+
+  @Override
+  public boolean isExportFeatures()
+  {
+    return chkExportFeats.isSelected();
+  }
+
+  @Override
+  public boolean isExportGroups()
+  {
+    return chkExportGrps.isSelected();
+  }
+
+  @Override
+  public boolean isCancelled()
+  {
+    return cancelled;
+  }
+
+}
index db61f77..85b6767 100644 (file)
@@ -74,6 +74,7 @@ import jalview.analysis.CrossRef;
 import jalview.analysis.Dna;
 import jalview.analysis.ParseProperties;
 import jalview.analysis.SequenceIdMatcher;
+import jalview.api.AlignExportSettingI;
 import jalview.api.AlignViewControllerGuiI;
 import jalview.api.AlignViewControllerI;
 import jalview.api.AlignViewportI;
@@ -1140,7 +1141,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
         return false;
       }
 
-      ExportData exportData = getAlignmentForExport();
+      ExportData exportData = getAlignmentForExport(format);
       FormatAdapter f = new FormatAdapter(viewport);
       String output = f.formatSequences(format,
               exportData.getAlignment(), // class cast exceptions will
@@ -1213,10 +1214,13 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
   protected void outputText_actionPerformed(ActionEvent e)
   {
 
-    ExportData exportData = getAlignmentForExport();
+    ExportData exportData = getAlignmentForExport(e.getActionCommand());
+    if (exportData.getSettings().isCancelled())
+    {
+      return;
+    }
     CutAndPasteTransfer cap = new CutAndPasteTransfer();
     cap.setForInput(null);
-
     try
     {
       cap.setText(new FormatAdapter(viewport).formatSequences(
@@ -1235,7 +1239,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
 
   }
 
-  public ExportData getAlignmentForExport()
+  public ExportData getAlignmentForExport(String exportFomat)
   {
     AlignmentI alignmentToExport = null;
     String[] omitHidden = null;
@@ -1250,36 +1254,29 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     alignmentStartEnd = new int[]
     { 0, alignmentToExport.getWidth() - 1 };
 
-    if (viewport.hasHiddenColumns() || hiddenSeqs.getSize() > 0)
-    {
-      int reply = JOptionPane
-              .showInternalConfirmDialog(
-                      Desktop.desktop,
-                      MessageManager
-                              .getString("label.alignment_contains_hidden_columns"),
-                      MessageManager
-                              .getString("action.save_omit_hidden_columns"),
-                      JOptionPane.YES_NO_OPTION,
-                      JOptionPane.QUESTION_MESSAGE);
+    boolean hasHiddenSeqs = hiddenSeqs.getSize() > 0;
+    AlignExportSettingI settings = new AlignExportSettings(hasHiddenSeqs,
+            viewport.hasHiddenColumns(), exportFomat);
+    viewport.setExportSettings(settings);
+    settings.isExportAnnotations();
 
-      if (reply == JOptionPane.YES_OPTION)
-      {
-        // export only visible region
-        omitHidden = viewport.getViewAsString(false);
-        alignmentToExport = viewport.getAlignment();
-        alignmentStartEnd = getStartEnd(alignmentStartEnd, viewport
-                .getColumnSelection().getHiddenColumns());
-        viewport.setIncludeHiddenRegion(false);
-      }
-      else
-      {
-        // export all region including visible
-        alignmentToExport = hiddenSeqs.getFullAlignment();
-        viewport.setIncludeHiddenRegion(true);
-      }
+    if (viewport.hasHiddenColumns() && !settings.isExportHiddenColumns())
+    {
+      omitHidden = viewport.getViewAsString(false);
     }
 
-    return new ExportData(alignmentToExport, omitHidden, alignmentStartEnd);
+    if (hasHiddenSeqs && settings.isExportHiddenSequences())
+    {
+      alignmentToExport = hiddenSeqs.getFullAlignment();
+    }
+    else
+    {
+      alignmentToExport = viewport.getAlignment();
+      alignmentStartEnd = getStartEnd(alignmentStartEnd, viewport
+              .getColumnSelection().getHiddenColumns());
+    }
+    return new ExportData(alignmentToExport, omitHidden, alignmentStartEnd,
+            settings);
   }
 
   private static int[] getStartEnd(int[] aligmentStartEnd,
@@ -1352,9 +1349,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
   @Override
   protected void htmlMenuItem_actionPerformed(ActionEvent e)
   {
-    // new HTMLOutput(alignPanel,
-    // alignPanel.getSeqPanel().seqCanvas.getSequenceRenderer(),
-    // alignPanel.getSeqPanel().seqCanvas.getFeatureRenderer());
     new HtmlSvgOutput(null, alignPanel);
   }
 
@@ -6094,11 +6088,15 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
 
     private int[] startEnd;
 
-    public ExportData(AlignmentI align, String[] ommit, int[] startEnd)
+    private AlignExportSettingI settings;
+
+    public ExportData(AlignmentI align, String[] ommit, int[] startEnd,
+            AlignExportSettingI settings)
     {
       this.alignment = align;
       this.omitHidden = ommit;
       this.startEnd = startEnd;
+      this.settings = settings;
     }
 
     public AlignmentI getAlignment()
@@ -6130,6 +6128,16 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     {
       this.startEnd = startEnd;
     }
+
+    public AlignExportSettingI getSettings()
+    {
+      return settings;
+    }
+
+    public void setSettings(AlignExportSettingI settings)
+    {
+      this.settings = settings;
+    }
   }
 
 }
index 2224021..a6f7d41 100644 (file)
@@ -54,6 +54,7 @@ import javax.swing.JOptionPane;
 import jalview.analysis.AlignmentUtils;
 import jalview.analysis.AnnotationSorter.SequenceAnnotationOrder;
 import jalview.analysis.NJTree;
+import jalview.api.AlignExportSettingI;
 import jalview.api.AlignViewportI;
 import jalview.api.FeatureRenderer;
 import jalview.api.ViewStyleI;
@@ -100,6 +101,9 @@ public class AlignViewport extends AlignmentViewport implements
   private FeatureRenderer featureRenderer;
 
   private boolean includeHiddenRegion = true;
+
+  private AlignExportSettingI exportSettings;
+
   String viewName;
 
   /*
@@ -1053,13 +1057,13 @@ public class AlignViewport extends AlignmentViewport implements
     this.featureRenderer = featureRenderer;
   }
 
-  public boolean isIncludeHiddenRegion()
+  public AlignExportSettingI getExportSettings()
   {
-    return includeHiddenRegion;
+    return exportSettings;
   }
 
-  public void setIncludeHiddenRegion(boolean includeHiddenRegion)
+  public void setExportSettings(AlignExportSettingI exportSettings)
   {
-    this.includeHiddenRegion = includeHiddenRegion;
+    this.exportSettings = exportSettings;
   }
 }
index d2b8412..f977b04 100644 (file)
@@ -79,8 +79,6 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
 
   private FeatureRenderer fr;
 
-  private JSONExportSettings jsonExportSettings;
-
   private List<int[]> hiddenColumns;
 
   private ColumnSelection columnSelection;
@@ -123,15 +121,6 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
     String jsonOutput = null;
     try
     {
-      if (getJsonExportSettings() == null)
-      {
-        jsonExportSettings = new JSONExportSettings();
-        jsonExportSettings.setExportAnnotations(true);
-        jsonExportSettings.setExportGroups(true);
-        jsonExportSettings.setExportJalviewSettings(true);
-        jsonExportSettings.setExportSequenceFeatures(true);
-      }
-
       AlignmentPojo jsonAlignmentPojo = new AlignmentPojo();
       if (getViewport() != null)
       {
@@ -159,44 +148,46 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
         jsonAlignmentPojo.getSeqs().add(jsonSeqPojo);
       }
 
-      if (jsonExportSettings.isExportJalviewSettings())
+      jsonAlignmentPojo.setGlobalColorScheme(globalColorScheme);
+      jsonAlignmentPojo.getAppSettings().put("application", application);
+      jsonAlignmentPojo.getAppSettings().put("version", version);
+      jsonAlignmentPojo.getAppSettings().put("webStartUrl", webstartUrl);
+      jsonAlignmentPojo.getAppSettings().put("showSeqFeatures",
+              String.valueOf(showSeqFeatures));
+
+      String[] hiddenSections = getHiddenSections();
+      if (hiddenSections != null)
       {
-        jsonAlignmentPojo.setGlobalColorScheme(globalColorScheme);
-        jsonAlignmentPojo.getAppSettings().put("application", application);
-        jsonAlignmentPojo.getAppSettings().put("version", version);
-        jsonAlignmentPojo.getAppSettings().put("webStartUrl", webstartUrl);
-        jsonAlignmentPojo.getAppSettings().put("showSeqFeatures",
-                String.valueOf(showSeqFeatures));
-
-        String[] hiddenSections = exportHiddenSections();
-        if (hiddenSections != null && getViewport().isIncludeHiddenRegion())
+        if (hiddenSections[0] != null
+                && getViewport().getExportSettings()
+                        .isExportHiddenColumns())
         {
-          if (hiddenSections[0] != null)
-          {
-            jsonAlignmentPojo.getAppSettings().put("hiddenCols",
-                    String.valueOf(hiddenSections[0]));
-          }
-          if (hiddenSections[1] != null)
-          {
-            jsonAlignmentPojo.getAppSettings().put("hiddenSeqs",
-                    String.valueOf(hiddenSections[1]));
-          }
+          jsonAlignmentPojo.getAppSettings().put("hiddenCols",
+                  String.valueOf(hiddenSections[0]));
+        }
+        if (hiddenSections[1] != null
+                && getViewport().getExportSettings()
+                        .isExportHiddenSequences())
+        {
+          jsonAlignmentPojo.getAppSettings().put("hiddenSeqs",
+                  String.valueOf(hiddenSections[1]));
         }
       }
 
-      if (jsonExportSettings.isExportAnnotations())
+      if (getViewport().getExportSettings().isExportAnnotations())
       {
         jsonAlignmentPojo
                 .setAlignAnnotation(annotationToJsonPojo(annotations));
       }
 
-      if (jsonExportSettings.isExportSequenceFeatures())
+      if (getViewport().getExportSettings().isExportFeatures())
       {
         jsonAlignmentPojo
                 .setSeqFeatures(sequenceFeatureToJsonPojo(seqs, fr));
       }
 
-      if (jsonExportSettings.isExportGroups() && seqGroups != null
+      if (getViewport().getExportSettings().isExportGroups()
+              && seqGroups != null
               && seqGroups.size() > 0)
       {
         for (SequenceGroup seqGrp : seqGroups)
@@ -231,7 +222,7 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
     return jsonOutput;
   }
 
-  public String[] exportHiddenSections()
+  public String[] getHiddenSections()
   {
     String[] hiddenSections = new String[2];
     if (getViewport() == null)
@@ -614,16 +605,6 @@ public class JSONFile extends AlignFile implements ComplexAlignFile
     this.displayedFeatures = displayedFeatures;
   }
 
-  public JSONExportSettings getJsonExportSettings()
-  {
-    return jsonExportSettings;
-  }
-
-  public void setJsonExportSettings(JSONExportSettings jsonExportSettings)
-  {
-    this.jsonExportSettings = jsonExportSettings;
-  }
-
 
   public static String getJSONData(AlignViewportI av)
   {
diff --git a/src/jalview/jbgui/GAlignExportSettings.java b/src/jalview/jbgui/GAlignExportSettings.java
new file mode 100644 (file)
index 0000000..2583b6b
--- /dev/null
@@ -0,0 +1,146 @@
+package jalview.jbgui;
+
+import java.awt.BorderLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+
+import javax.swing.JButton;
+import javax.swing.JCheckBox;
+import javax.swing.JPanel;
+
+@SuppressWarnings("serial")
+public abstract class GAlignExportSettings extends JPanel
+{
+  protected JPanel hiddenRegionConfPanel = new JPanel();
+
+  protected JPanel complexExportPanel = new JPanel();
+
+  protected JPanel optionsPanel = new JPanel();
+
+  protected JPanel actionPanel = new JPanel();
+
+  protected BorderLayout hiddenRegionLayout = new BorderLayout();
+
+  protected BorderLayout complexExportLayout = new BorderLayout();
+
+  protected BorderLayout mainLayout = new BorderLayout();
+
+  protected JCheckBox chkAll = new JCheckBox("Check All");
+
+  protected JCheckBox chkHiddenSeqs = new JCheckBox(
+          "Export Hidden Sequences");
+
+  protected JCheckBox chkHiddenCols = new JCheckBox("Export Hidden Columns");
+
+  protected JCheckBox chkExportAnnots = new JCheckBox("Export Annotations");
+
+  protected JCheckBox chkExportFeats = new JCheckBox("Export Features");
+
+  protected JCheckBox chkExportGrps = new JCheckBox("Export Groups");
+
+  JButton btnOk = new JButton("Ok");
+
+  JButton btnCancel = new JButton("Cancel");
+
+  private boolean hasHiddenSeq, hasHiddenCols, isComplexAlignFile;
+
+  boolean isComplexFormat = false;
+
+  public GAlignExportSettings(boolean hasHiddenSeq, boolean hasHiddenCols,
+          String alignFileFormat)
+  {
+    this.hasHiddenSeq = hasHiddenSeq;
+    this.hasHiddenCols = hasHiddenCols;
+    String[] complexFormats =
+    { "JSON", "HTML" };
+
+    for (String format : complexFormats)
+    {
+      if (format.equalsIgnoreCase(alignFileFormat))
+      {
+        this.isComplexAlignFile = true;
+        break;
+      }
+    }
+
+    init();
+  }
+
+  public void init()
+  {
+    hiddenRegionConfPanel.setLayout(hiddenRegionLayout);
+    complexExportPanel.setLayout(complexExportLayout);
+    setLayout(mainLayout);
+
+    chkAll.addItemListener(new ItemListener()
+    {
+      public void itemStateChanged(ItemEvent e)
+      {
+        checkAllAction();
+      }
+    });
+
+    btnOk.addActionListener(new ActionListener()
+    {
+      public void actionPerformed(ActionEvent e)
+      {
+        ok_actionPerformed(e);
+      }
+    });
+
+    btnCancel.addActionListener(new ActionListener()
+    {
+      public void actionPerformed(ActionEvent e)
+      {
+        cancel_actionPerformed(e);
+      }
+    });
+
+    hiddenRegionConfPanel.add(chkAll, BorderLayout.NORTH);
+    hiddenRegionConfPanel.add(chkHiddenSeqs, BorderLayout.CENTER);
+    hiddenRegionConfPanel.add(chkHiddenCols, BorderLayout.SOUTH);
+    chkHiddenSeqs.setEnabled(hasHiddenSeq);
+    chkHiddenCols.setEnabled(hasHiddenCols);
+
+    complexExportPanel.add(chkExportAnnots, BorderLayout.NORTH);
+    complexExportPanel.add(chkExportFeats, BorderLayout.CENTER);
+    complexExportPanel.add(chkExportGrps, BorderLayout.SOUTH);
+
+    if (hasHiddenSeq || hasHiddenCols)
+    {
+      optionsPanel.add(hiddenRegionConfPanel);
+    }
+
+    if (isComplexAlignFile)
+    {
+      optionsPanel.add(complexExportPanel);
+    }
+    actionPanel.add(btnCancel);
+    actionPanel.add(btnOk);
+
+    add(optionsPanel, BorderLayout.NORTH);
+    add(actionPanel, BorderLayout.SOUTH);
+
+  }
+
+
+  
+  private void checkAllAction()
+  {
+    boolean isSelected = chkAll.isSelected();
+    chkHiddenSeqs.setSelected(chkHiddenSeqs.isEnabled() && isSelected);
+    chkHiddenCols.setSelected(chkHiddenCols.isEnabled() && isSelected);
+    chkExportAnnots.setSelected(isComplexAlignFile
+            && chkExportAnnots.isEnabled() && isSelected);
+    chkExportFeats.setSelected(isComplexAlignFile
+            && chkExportFeats.isEnabled() && isSelected);
+    chkExportGrps.setSelected(isComplexAlignFile
+            && chkExportGrps.isEnabled() && isSelected);
+  }
+
+  public abstract void ok_actionPerformed(ActionEvent e);
+
+  public abstract void cancel_actionPerformed(ActionEvent e);
+}