JAL-1780 Export settings for flatfile output
[jalview.git] / src / jalview / jbgui / GAlignExportSettings.java
1 package jalview.jbgui;
2
3 import java.awt.BorderLayout;
4 import java.awt.event.ActionEvent;
5 import java.awt.event.ActionListener;
6 import java.awt.event.ItemEvent;
7 import java.awt.event.ItemListener;
8
9 import javax.swing.JButton;
10 import javax.swing.JCheckBox;
11 import javax.swing.JPanel;
12
13 @SuppressWarnings("serial")
14 public abstract class GAlignExportSettings extends JPanel
15 {
16   protected JPanel hiddenRegionConfPanel = new JPanel();
17
18   protected JPanel complexExportPanel = new JPanel();
19
20   protected JPanel optionsPanel = new JPanel();
21
22   protected JPanel actionPanel = new JPanel();
23
24   protected BorderLayout hiddenRegionLayout = new BorderLayout();
25
26   protected BorderLayout complexExportLayout = new BorderLayout();
27
28   protected BorderLayout mainLayout = new BorderLayout();
29
30   protected JCheckBox chkAll = new JCheckBox("Check All");
31
32   protected JCheckBox chkHiddenSeqs = new JCheckBox(
33           "Export Hidden Sequences");
34
35   protected JCheckBox chkHiddenCols = new JCheckBox("Export Hidden Columns");
36
37   protected JCheckBox chkExportAnnots = new JCheckBox("Export Annotations");
38
39   protected JCheckBox chkExportFeats = new JCheckBox("Export Features");
40
41   protected JCheckBox chkExportGrps = new JCheckBox("Export Groups");
42
43   JButton btnOk = new JButton("Ok");
44
45   JButton btnCancel = new JButton("Cancel");
46
47   private boolean hasHiddenSeq, hasHiddenCols, isComplexAlignFile;
48
49   boolean isComplexFormat = false;
50
51   public GAlignExportSettings(boolean hasHiddenSeq, boolean hasHiddenCols,
52           String alignFileFormat)
53   {
54     this.hasHiddenSeq = hasHiddenSeq;
55     this.hasHiddenCols = hasHiddenCols;
56     String[] complexFormats =
57     { "JSON", "HTML" };
58
59     for (String format : complexFormats)
60     {
61       if (format.equalsIgnoreCase(alignFileFormat))
62       {
63         this.isComplexAlignFile = true;
64         break;
65       }
66     }
67
68     init();
69   }
70
71   public void init()
72   {
73     hiddenRegionConfPanel.setLayout(hiddenRegionLayout);
74     complexExportPanel.setLayout(complexExportLayout);
75     setLayout(mainLayout);
76
77     chkAll.addItemListener(new ItemListener()
78     {
79       public void itemStateChanged(ItemEvent e)
80       {
81         checkAllAction();
82       }
83     });
84
85     btnOk.addActionListener(new ActionListener()
86     {
87       public void actionPerformed(ActionEvent e)
88       {
89         ok_actionPerformed(e);
90       }
91     });
92
93     btnCancel.addActionListener(new ActionListener()
94     {
95       public void actionPerformed(ActionEvent e)
96       {
97         cancel_actionPerformed(e);
98       }
99     });
100
101     hiddenRegionConfPanel.add(chkAll, BorderLayout.NORTH);
102     hiddenRegionConfPanel.add(chkHiddenSeqs, BorderLayout.CENTER);
103     hiddenRegionConfPanel.add(chkHiddenCols, BorderLayout.SOUTH);
104     chkHiddenSeqs.setEnabled(hasHiddenSeq);
105     chkHiddenCols.setEnabled(hasHiddenCols);
106
107     complexExportPanel.add(chkExportAnnots, BorderLayout.NORTH);
108     complexExportPanel.add(chkExportFeats, BorderLayout.CENTER);
109     complexExportPanel.add(chkExportGrps, BorderLayout.SOUTH);
110
111     if (hasHiddenSeq || hasHiddenCols)
112     {
113       optionsPanel.add(hiddenRegionConfPanel);
114     }
115
116     if (isComplexAlignFile)
117     {
118       optionsPanel.add(complexExportPanel);
119     }
120     actionPanel.add(btnCancel);
121     actionPanel.add(btnOk);
122
123     add(optionsPanel, BorderLayout.NORTH);
124     add(actionPanel, BorderLayout.SOUTH);
125
126   }
127
128
129   
130   private void checkAllAction()
131   {
132     boolean isSelected = chkAll.isSelected();
133     chkHiddenSeqs.setSelected(chkHiddenSeqs.isEnabled() && isSelected);
134     chkHiddenCols.setSelected(chkHiddenCols.isEnabled() && isSelected);
135     chkExportAnnots.setSelected(isComplexAlignFile
136             && chkExportAnnots.isEnabled() && isSelected);
137     chkExportFeats.setSelected(isComplexAlignFile
138             && chkExportFeats.isEnabled() && isSelected);
139     chkExportGrps.setSelected(isComplexAlignFile
140             && chkExportGrps.isEnabled() && isSelected);
141   }
142
143   public abstract void ok_actionPerformed(ActionEvent e);
144
145   public abstract void cancel_actionPerformed(ActionEvent e);
146 }