X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAnnotationExporter.java;h=d84287f43b0e0cd6c4810732cc004f2bd6ce6872;hb=6200addf078b7f7ace90597dc056dafc7fc602c1;hp=81960e08a22ba15256ba12bf4750b8ce73576842;hpb=4b1c969e87feaefd4fb9c49ba3d6b828b3ce1a9c;p=jalview.git diff --git a/src/jalview/gui/AnnotationExporter.java b/src/jalview/gui/AnnotationExporter.java index 81960e0..d84287f 100644 --- a/src/jalview/gui/AnnotationExporter.java +++ b/src/jalview/gui/AnnotationExporter.java @@ -30,17 +30,17 @@ import jalview.io.JalviewFileChooser; import jalview.io.JalviewFileView; import jalview.util.MessageManager; -import java.awt.BorderLayout; import java.awt.Color; -import java.awt.FlowLayout; +import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.FileWriter; import java.io.PrintWriter; -import javax.swing.BorderFactory; +import javax.swing.BoxLayout; import javax.swing.ButtonGroup; import javax.swing.JButton; +import javax.swing.JCheckBox; import javax.swing.JInternalFrame; import javax.swing.JLabel; import javax.swing.JLayeredPane; @@ -71,6 +71,29 @@ public class AnnotationExporter extends JPanel private boolean wholeView; + /* + * option to export linked (CDS/peptide) features when shown + * on the alignment, converted to this alignment's coordinates + */ + private JCheckBox includeLinkedFeatures; + + /* + * output format option shown for feature export + */ + JRadioButton GFFFormat = new JRadioButton(); + + /* + * output format option shown for annotation export + */ + JRadioButton CSVFormat = new JRadioButton(); + + private JPanel linkedFeaturesPanel; + + /** + * Constructor + * + * @param panel + */ public AnnotationExporter(AlignmentPanel panel) { this.ap = panel; @@ -85,17 +108,25 @@ public class AnnotationExporter extends JPanel frame = new JInternalFrame(); frame.setContentPane(this); frame.setLayer(JLayeredPane.PALETTE_LAYER); - Desktop.addInternalFrame(frame, "", frame.getPreferredSize().width, - frame.getPreferredSize().height); + Dimension preferredSize = frame.getPreferredSize(); + Desktop.addInternalFrame(frame, "", true, preferredSize.width, + preferredSize.height, true, true); } /** - * Configures the diglog for options to export visible features + * Configures the dialog for options to export visible features. If from a split + * frame panel showing linked features, make the option to include these in the + * export visible. */ public void exportFeatures() { exportFeatures = true; CSVFormat.setVisible(false); + if (ap.av.isShowComplementFeatures()) + { + linkedFeaturesPanel.setVisible(true); + frame.pack(); + } frame.setTitle(MessageManager.getString("label.export_features")); } @@ -216,14 +247,17 @@ public class AnnotationExporter extends JPanel FeaturesFile formatter = new FeaturesFile(); final FeatureRenderer fr = ap.getFeatureRenderer(); + boolean includeComplement = includeLinkedFeatures.isSelected(); + if (GFFFormat.isSelected()) { - text = formatter.printGffFormat(sequences, fr, includeNonPositional); + text = formatter.printGffFormat(sequences, fr, includeNonPositional, + includeComplement); } else { text = formatter.printJalviewFormat(sequences, fr, - includeNonPositional); + includeNonPositional, includeComplement); } return text; } @@ -269,11 +303,70 @@ public class AnnotationExporter extends JPanel } } + /** + * Adds widgets to the panel + * + * @throws Exception + */ private void jbInit() throws Exception { - this.setLayout(new BorderLayout()); + this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); + this.setBackground(Color.white); + + JPanel formatPanel = buildFormatOptionsPanel(); + JPanel linkedFeatures = buildLinkedFeaturesPanel(); + JPanel actionsPanel = buildActionsPanel(); + + this.add(formatPanel); + this.add(linkedFeatures); + this.add(actionsPanel); + } + + /** + * Builds a panel with a checkbox for the option to export linked (CDS/peptide) + * features. This is hidden by default, and only made visible if exporting + * features from a split frame panel which is configured to show linked + * features. + * + * @return + */ + private JPanel buildLinkedFeaturesPanel() + { + linkedFeaturesPanel = new JPanel(); + linkedFeaturesPanel.setOpaque(false); + + boolean nucleotide = ap.av.isNucleotide(); + String complement = nucleotide + ? MessageManager.getString("label.protein").toLowerCase() + : "CDS"; + JLabel label = new JLabel( + MessageManager.formatMessage("label.include_linked_features", + complement)); + label.setHorizontalAlignment(SwingConstants.TRAILING); + String tooltip = MessageManager + .formatMessage("label.include_linked_tooltip", complement); + label.setToolTipText( + JvSwingUtils.wrapTooltip(true, tooltip)); + + includeLinkedFeatures = new JCheckBox(); + linkedFeaturesPanel.add(label); + linkedFeaturesPanel.add(includeLinkedFeatures); + linkedFeaturesPanel.setVisible(false); + + return linkedFeaturesPanel; + } + + /** + * Builds the panel with to File or Textbox or Close actions + * + * @return + */ + JPanel buildActionsPanel() + { + JPanel actionsPanel = new JPanel(); + actionsPanel.setOpaque(false); - toFile.setText(MessageManager.getString("label.to_file")); + JButton toFile = new JButton(MessageManager.getString("label.to_file")); toFile.addActionListener(new ActionListener() { @Override @@ -282,7 +375,8 @@ public class AnnotationExporter extends JPanel toFile_actionPerformed(); } }); - toTextbox.setText(MessageManager.getString("label.to_textbox")); + JButton toTextbox = new JButton( + MessageManager.getString("label.to_textbox")); toTextbox.addActionListener(new ActionListener() { @Override @@ -291,7 +385,7 @@ public class AnnotationExporter extends JPanel toTextbox_actionPerformed(); } }); - close.setText(MessageManager.getString("action.close")); + JButton close = new JButton(MessageManager.getString("action.close")); close.addActionListener(new ActionListener() { @Override @@ -300,52 +394,49 @@ public class AnnotationExporter extends JPanel close_actionPerformed(); } }); + + actionsPanel.add(toFile); + actionsPanel.add(toTextbox); + actionsPanel.add(close); + + return actionsPanel; + } + + /** + * Builds the panel with options to output in Jalview, GFF or CSV format. GFF is + * only made visible when exporting features, CSV only when exporting + * annotation. + * + * @return + */ + JPanel buildFormatOptionsPanel() + { + JPanel formatPanel = new JPanel(); + // formatPanel.setBorder(BorderFactory.createEtchedBorder()); + formatPanel.setOpaque(false); + + JRadioButton jalviewFormat = new JRadioButton("Jalview"); jalviewFormat.setOpaque(false); jalviewFormat.setSelected(true); - jalviewFormat.setText("Jalview"); GFFFormat.setOpaque(false); GFFFormat.setText("GFF"); CSVFormat.setOpaque(false); CSVFormat.setText(MessageManager.getString("label.csv_spreadsheet")); - jLabel1.setHorizontalAlignment(SwingConstants.TRAILING); - jLabel1.setText(MessageManager.getString("action.format") + " "); - this.setBackground(Color.white); - jPanel3.setBorder(BorderFactory.createEtchedBorder()); - jPanel3.setOpaque(false); - jPanel1.setOpaque(false); - jPanel1.add(toFile); - jPanel1.add(toTextbox); - jPanel1.add(close); - jPanel3.add(jLabel1); - jPanel3.add(jalviewFormat); - jPanel3.add(GFFFormat); - jPanel3.add(CSVFormat); + + ButtonGroup buttonGroup = new ButtonGroup(); buttonGroup.add(jalviewFormat); buttonGroup.add(GFFFormat); buttonGroup.add(CSVFormat); - this.add(jPanel3, BorderLayout.CENTER); - this.add(jPanel1, BorderLayout.SOUTH); - } - - JPanel jPanel1 = new JPanel(); - - JButton toFile = new JButton(); - - JButton toTextbox = new JButton(); - - JButton close = new JButton(); - ButtonGroup buttonGroup = new ButtonGroup(); + JLabel format = new JLabel( + MessageManager.getString("action.format") + " "); + format.setHorizontalAlignment(SwingConstants.TRAILING); - JRadioButton jalviewFormat = new JRadioButton(); + formatPanel.add(format); + formatPanel.add(jalviewFormat); + formatPanel.add(GFFFormat); + formatPanel.add(CSVFormat); - JRadioButton GFFFormat = new JRadioButton(); - - JRadioButton CSVFormat = new JRadioButton(); - - JLabel jLabel1 = new JLabel(); - - JPanel jPanel3 = new JPanel(); - - FlowLayout flowLayout1 = new FlowLayout(); + return formatPanel; + } }