15498c6a6be490df050068883ed712d2f36a8b18
[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           showDialog;
49
50   public GAlignExportSettings(boolean hasHiddenSeq, boolean hasHiddenCols,
51           String alignFileFormat)
52   {
53     this.hasHiddenSeq = hasHiddenSeq;
54     this.hasHiddenCols = hasHiddenCols;
55     String[] complexFormats =
56     { "JSON", "HTML" };
57
58     for (String format : complexFormats)
59     {
60       if (format.equalsIgnoreCase(alignFileFormat))
61       {
62         this.isComplexAlignFile = true;
63         break;
64       }
65     }
66     if (this.hasHiddenCols || this.hasHiddenSeq || this.isComplexAlignFile)
67     {
68       this.showDialog = true;
69     }
70     init();
71   }
72
73   public void init()
74   {
75     hiddenRegionConfPanel.setLayout(hiddenRegionLayout);
76     complexExportPanel.setLayout(complexExportLayout);
77     setLayout(mainLayout);
78
79     chkAll.addItemListener(new ItemListener()
80     {
81       public void itemStateChanged(ItemEvent e)
82       {
83         checkAllAction();
84       }
85     });
86
87     btnOk.addActionListener(new ActionListener()
88     {
89       public void actionPerformed(ActionEvent e)
90       {
91         ok_actionPerformed(e);
92       }
93     });
94
95     btnCancel.addActionListener(new ActionListener()
96     {
97       public void actionPerformed(ActionEvent e)
98       {
99         cancel_actionPerformed(e);
100       }
101     });
102
103     hiddenRegionConfPanel.add(chkAll, BorderLayout.NORTH);
104     hiddenRegionConfPanel.add(chkHiddenSeqs, BorderLayout.CENTER);
105     hiddenRegionConfPanel.add(chkHiddenCols, BorderLayout.SOUTH);
106     chkHiddenSeqs.setEnabled(hasHiddenSeq);
107     chkHiddenCols.setEnabled(hasHiddenCols);
108
109     complexExportPanel.add(chkExportAnnots, BorderLayout.NORTH);
110     complexExportPanel.add(chkExportFeats, BorderLayout.CENTER);
111     complexExportPanel.add(chkExportGrps, BorderLayout.SOUTH);
112
113     if (hasHiddenSeq || hasHiddenCols)
114     {
115       optionsPanel.add(hiddenRegionConfPanel);
116     }
117
118     if (this.isComplexAlignFile)
119     {
120       optionsPanel.add(complexExportPanel);
121     }
122     actionPanel.add(btnCancel);
123     actionPanel.add(btnOk);
124
125     add(optionsPanel, BorderLayout.NORTH);
126     add(actionPanel, BorderLayout.SOUTH);
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 boolean isShowDialog()
144   {
145     return showDialog;
146   }
147
148   public void setShowDialog(boolean showDialog)
149   {
150     this.showDialog = showDialog;
151   }
152
153   public abstract void ok_actionPerformed(ActionEvent e);
154
155   public abstract void cancel_actionPerformed(ActionEvent e);
156 }