diff --git a/uk/ac/sanger/artemis/components/genebuilder/gff/PropertiesPanel.java b/uk/ac/sanger/artemis/components/genebuilder/gff/PropertiesPanel.java index a26385842af36ad223097b0cc3eca29f282a668f..791eef3ec8d5e7ed275968aafdf8ecf7070c47f1 100644 --- a/uk/ac/sanger/artemis/components/genebuilder/gff/PropertiesPanel.java +++ b/uk/ac/sanger/artemis/components/genebuilder/gff/PropertiesPanel.java @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/genebuilder/gff/PropertiesPanel.java,v 1.2 2008-09-19 12:39:35 tjc Exp $ + * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/genebuilder/gff/PropertiesPanel.java,v 1.3 2008-09-19 15:19:41 tjc Exp $ */ package uk.ac.sanger.artemis.components.genebuilder.gff; @@ -35,6 +35,7 @@ import java.util.Set; import java.util.Vector; import javax.swing.Box; +import javax.swing.ButtonGroup; import javax.swing.DefaultListModel; import javax.swing.JButton; import javax.swing.JCheckBox; @@ -42,6 +43,7 @@ import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JOptionPane; import javax.swing.JPanel; +import javax.swing.JRadioButton; import javax.swing.JScrollPane; import javax.swing.JSeparator; import javax.swing.JTextField; @@ -76,6 +78,7 @@ public class PropertiesPanel extends JPanel private boolean empty = true; /** track if feature isObsolete flag has changed */ private boolean obsoleteChanged = false; + private ButtonGroup phaseButtonGroup; public PropertiesPanel(final Feature feature) { @@ -98,6 +101,7 @@ public class PropertiesPanel extends JPanel qualifier.getName().equals("feature_relationship_rank") || qualifier.getName().equals("timelastmodified") || qualifier.getName().equals("isObsolete") || + qualifier.getName().equals("codon_start") || ChadoTransactionManager.isSynonymTag(qualifier.getName(), (GFFStreamFeature)feature.getEmblFeature())) return true; @@ -201,7 +205,7 @@ public class PropertiesPanel extends JPanel nrows++; } - + if(!feature.getKey().getKeyString().equals(DatabaseDocument.EXONMODEL)) { @@ -333,7 +337,15 @@ public class PropertiesPanel extends JPanel nrows++; } - + // phase of translation wrt / codon_start + if(feature.getEntry().getEntryInformation().isValidQualifier( + feature.getKey(), "codon_start")) + { + c.gridy = nrows; + addPhaseComponent(c, gridPanel); + nrows++; + } + if(obsoleteQualifier != null) { boolean isObsolete = Boolean.parseBoolean((String) obsoleteQualifier.getValues().get(0)); @@ -454,6 +466,34 @@ public class PropertiesPanel extends JPanel } } + if(phaseButtonGroup != null) + { + String selectionCmd = phaseButtonGroup.getSelection().getActionCommand(); + + Qualifier phaseQualifier = gffQualifiers.getQualifierByName("codon_start"); + if(phaseQualifier == null) + { + if(!selectionCmd.equals("")) + { + phaseQualifier = new Qualifier("codon_start", selectionCmd); + gffQualifiers.addElement(phaseQualifier); + } + } + else + { + String oldPhase = (String)phaseQualifier.getValues().get(0); + if(!oldPhase.equals(phaseButtonGroup)) + { + gffQualifiers.remove(phaseQualifier); + if(!selectionCmd.equals("")) + { + phaseQualifier = new Qualifier("codon_start", selectionCmd); + gffQualifiers.addElement(phaseQualifier); + } + } + } + } + Qualifier isObsoleteQualifier = gffQualifiers.getQualifierByName("isObsolete"); if(isObsoleteQualifier != null) { @@ -593,6 +633,7 @@ public class PropertiesPanel extends JPanel revalidate(); } + private void addSynonym() { final Vector synonyms = DatabaseDocument.getCvterms("", @@ -689,6 +730,65 @@ public class PropertiesPanel extends JPanel gridPanel.add(separator, c); } + /** + * Add codon_start component to the properties panel + * @param c + * @param gridPanel + */ + private void addPhaseComponent(final GridBagConstraints c, final JPanel gridPanel) + { + Qualifier qualifierCodonStart = gffQualifiers.getQualifierByName("codon_start"); + phaseButtonGroup = new ButtonGroup(); + + JRadioButton phase1 = new JRadioButton("1"); + phase1.setOpaque(false); + phase1.setActionCommand("1"); + phaseButtonGroup.add(phase1); + JRadioButton phase2 = new JRadioButton("2"); + phase2.setOpaque(false); + phase2.setActionCommand("2"); + phaseButtonGroup.add(phase2); + JRadioButton phase3 = new JRadioButton("3"); + phase3.setOpaque(false); + phase3.setActionCommand("3"); + phaseButtonGroup.add(phase3); + JRadioButton phaseNone = new JRadioButton("Default"); + phaseNone.setOpaque(false); + phaseNone.setActionCommand(""); + phaseButtonGroup.add(phaseNone); + + if(qualifierCodonStart == null) + phaseNone.setSelected(true); + else + { + int codon_start = feature.getCodonStart(); + empty = false; + switch (codon_start) + { + case 1: phase1.setSelected(true); break; + case 2: phase2.setSelected(true); break; + case 3: phase3.setSelected(true); break; + default: phaseNone.setSelected(true);break; + } + } + + Box xBox = Box.createHorizontalBox(); + c.gridx = 3; + c.anchor = GridBagConstraints.EAST; + c.fill = GridBagConstraints.NONE; + c.ipadx = 5; + gridPanel.add(new JLabel("Codon Start"), c); + xBox.add(phase1); + xBox.add(phase2); + xBox.add(phase3); + xBox.add(phaseNone); + xBox.add(Box.createHorizontalGlue()); + c.gridx = 4; + c.anchor = GridBagConstraints.WEST; + c.ipadx = 0; + gridPanel.add(xBox, c); + } + /** * Add the synonym components * @param qualifier