Refactored alignment viewport to use common base, extended viewport API with getters...
[jalview.git] / src / jalview / gui / AppVarnaBinding.java
index ac9a880..d413c54 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.6)
- * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7)
+ * Copyright (C) 2011 J Procter, AM Waterhouse, J Engelhardt, LM Lui, G Barton, M Clamp, S Searle
  * 
  * This file is part of Jalview.
  * 
@@ -33,6 +33,7 @@ import java.awt.dnd.DropTargetEvent;
 import java.awt.dnd.DropTargetListener;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
+import java.awt.event.ComponentEvent;
 import java.awt.event.MouseEvent;
 import java.awt.event.MouseListener;
 import java.io.File;
@@ -72,7 +73,7 @@ import fr.orsay.lri.varna.models.VARNAConfig;
 import fr.orsay.lri.varna.models.rna.Mapping;
 import fr.orsay.lri.varna.models.rna.RNA;
 
-public class AppVarnaBinding extends JFrame implements DropTargetListener, InterfaceVARNAListener, MouseListener {
+public class AppVarnaBinding extends jalview.ext.varna.JalviewVarnaBinding implements DropTargetListener, InterfaceVARNAListener, MouseListener {
 
        /**
         * 
@@ -80,16 +81,11 @@ public class AppVarnaBinding extends JFrame implements DropTargetListener, Inter
        //private static final long serialVersionUID = -790155708306987257L;
 
        private String DEFAULT_SEQUENCE = "CAGCACGACACUAGCAGUCAGUGUCAGACUGCAIACAGCACGACACUAGCAGUCAGUGUCAGACUGCAIACAGCACGACACUAGCAGUCAGUGUCAGACUGCAIA";
-
        private String DEFAULT_STRUCTURE1 = "..(((((...(((((...(((((...(((((.....)))))...))))).....(((((...(((((.....)))))...))))).....)))))...)))))..";
        private String DEFAULT_STRUCTURE2 = "..(((((...(((((...(((((........(((((...(((((.....)))))...)))))..................))))).....)))))...)))))..";
-       // private static final String DEFAULT_STRUCTURE1 = "((((....))))";
-       // private static final String DEFAULT_STRUCTURE2 =
-       // "((((..(((....)))..))))";
-
-       private VARNAPanel _vp;
+       public VARNAPanel vp;
 
-       private JPanel _tools = new JPanel();
+       protected JPanel _tools = new JPanel();
        private JPanel _input = new JPanel();
 
        private JPanel _seqPanel = new JPanel();
@@ -100,10 +96,11 @@ public class AppVarnaBinding extends JFrame implements DropTargetListener, Inter
        private JLabel _strLabel = new JLabel(" Str:");
        private JLabel _seqLabel = new JLabel(" Seq:");
        private JButton _createButton = new JButton("Create");
+       private JButton _updateButton = new JButton("Update");
        private JButton _deleteButton = new JButton("Delete");
        private JButton _duplicateButton = new JButton("Snapshot");
        
-       private JPanel _listPanel = new JPanel();
+       protected JPanel _listPanel = new JPanel();
        private ReorderableJList _sideList = null;
 
 
@@ -120,14 +117,24 @@ public class AppVarnaBinding extends JFrame implements DropTargetListener, Inter
        private BackupHolder _rnaList;
 
 
-       public AppVarnaBinding() {
-               super("VARNA in Jalview");
+       /*public AppVarnaBinding() {
+               //super("VARNA in Jalview");
                //this.set_seq("ATGC");
                //this.set_str(".().");
                //RNAPanelDemoInit();
                
                //initVarna("ATGCATGATATATATATAT","....((((...))))....");
                initVarna(this.DEFAULT_SEQUENCE,this.DEFAULT_STRUCTURE1);
+       }*/
+       
+       public AppVarnaBinding(String seq,String struc){
+               //super("VARNA in Jalview");
+               initVarna(seq,struc);
+       }
+       
+       public AppVarnaBinding(ArrayList<RNA> rnaList){
+               //super("VARNA in Jalview");
+               initVarnaEdit(rnaList);
        }
        
        
@@ -135,13 +142,11 @@ public class AppVarnaBinding extends JFrame implements DropTargetListener, Inter
        private void initVarna(String seq, String str){
                DefaultListModel dlm = new DefaultListModel(); 
            
-
                DefaultListSelectionModel m = new DefaultListSelectionModel();
            m.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
            m.setLeadAnchorNotificationEnabled(false);
            
-           
-               _sideList = new ReorderableJList();
+           _sideList = new ReorderableJList();
                _sideList.setModel(dlm);
                _sideList.addMouseListener(this);
            _sideList.setSelectionModel(m);
@@ -151,8 +156,8 @@ public class AppVarnaBinding extends JFrame implements DropTargetListener, Inter
                                if (!_sideList.isSelectionEmpty() && !arg0.getValueIsAdjusting())
                                {
                                        FullBackup  sel = (FullBackup) _sideList.getSelectedValue();
-                                       Mapping map = Mapping.DefaultOutermostMapping(_vp.getRNA().getSize(), sel.rna.getSize());
-                                       _vp.showRNAInterpolated(sel.rna,sel.config,map);
+                                       Mapping map = Mapping.DefaultOutermostMapping(vp.getRNA().getSize(), sel.rna.getSize());
+                                       vp.showRNAInterpolated(sel.rna,sel.config,map);
                                        _seq.setText(sel.rna.getSeq());
                                        _str.setText(sel.rna.getStructDBN());
                                }
@@ -163,29 +168,190 @@ public class AppVarnaBinding extends JFrame implements DropTargetListener, Inter
                RNA _RNA1 = new RNA("User defined 1");
                
                try {
-                       _vp = new VARNAPanel("0",".");
+                       vp = new VARNAPanel("0",".");
                        _RNA1.setRNA(seq, str);
-                       _RNA1.drawRNARadiate(_vp.getConfig());
+                       _RNA1.drawRNARadiate(vp.getConfig());
                } catch (ExceptionNonEqualLength e) {
-                       _vp.errorDialog(e);
+                       vp.errorDialog(e);
                } catch (ExceptionUnmatchedClosingParentheses e2) {
                e2.printStackTrace();
                } catch (ExceptionFileFormatOrSyntax e3) {
                e3.printStackTrace();
                }
-               _vp.setPreferredSize(new Dimension(400, 400));
-               _rnaList.add(_vp.getConfig().clone(),_RNA1,generateDefaultName(),true);
+               vp.setPreferredSize(new Dimension(400, 400));
+               _rnaList.add(vp.getConfig().clone(),_RNA1,generateDefaultName(),true);
 
-               setBackground(_backgroundColor);
-               _vp.setBackground(_backgroundColor);
+               //TODO setBackground(_backgroundColor);
+               vp.setBackground(_backgroundColor);
+
+               //TODO getContentPane().setLayout(new BorderLayout());
+               //TODO getContentPane().add(vp, BorderLayout.CENTER);
 
+               //setVisible(true);
+               vp.addVARNAListener(this);
+       }
+       
+       private void initVarnaEdit(ArrayList<RNA> rnaInList) 
+       {
+           DefaultListModel dlm = new DefaultListModel(); 
+           
+
+               int marginTools = 40;
+
+           DefaultListSelectionModel m = new DefaultListSelectionModel();
+           m.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+           m.setLeadAnchorNotificationEnabled(false);
+           
+           
+               _sideList = new ReorderableJList();
+               _sideList.setModel(dlm);
+               _sideList.addMouseListener(this);
+           _sideList.setSelectionModel(m);
+           _sideList.setPreferredSize(new Dimension(100, 0));
+           _sideList.addListSelectionListener( new ListSelectionListener(){
+                       public void valueChanged(ListSelectionEvent arg0) {
+                               //System.out.println(arg0);
+                               if (!_sideList.isSelectionEmpty() && !arg0.getValueIsAdjusting())
+                               {
+                                       FullBackup  sel = (FullBackup) _sideList.getSelectedValue();
+                                       Mapping map = Mapping.DefaultOutermostMapping(vp.getRNA().getSize(), sel.rna.getSize());
+                                       vp.showRNAInterpolated(sel.rna,sel.config,map);
+                                       //_seq.setText(sel.rna.getSeq());
+                                       _str.setText(sel.rna.getStructDBN());
+                               }
+                       }
+           });
+           _rnaList = new BackupHolder(dlm,_sideList);
+                       
+               try {
+                       vp = new VARNAPanel("0",".");
+                       for(int i=0;i<rnaInList.size();i++){
+                               rnaInList.get(i).drawRNARadiate(vp.getConfig());
+                       }
+               } catch (ExceptionNonEqualLength e) {
+                       vp.errorDialog(e);
+               } 
+               vp.setPreferredSize(new Dimension(400, 400));
+               for(int i=0;i<rnaInList.size();i++){
+                       if(i<rnaInList.size()-1){
+                               _rnaList.add(vp.getConfig().clone(),rnaInList.get(i),rnaInList.get(i).getName());
+                       }else{
+                               _rnaList.add(vp.getConfig().clone(),rnaInList.get(i),rnaInList.get(i).getName(),true);
+                       }
+               }
+
+           /*_rnaList.add(vp.getConfig().clone(),_RNA2,generateDefaultName());
+           _rnaList.add(vp.getConfig().clone(),_RNA1,generateDefaultName(),true);*/
+
+           JScrollPane listScroller = new JScrollPane(_sideList);
+           listScroller.setPreferredSize(new Dimension(150, 0));
+
+               vp.setBackground(_backgroundColor);
+               
+               
+               Font textFieldsFont = Font.decode("MonoSpaced-PLAIN-12");
+
+               //_seqLabel.setHorizontalTextPosition(JLabel.LEFT);
+               //_seqLabel.setPreferredSize(new Dimension(marginTools, 15));
+               _seq.setFont(textFieldsFont);
+               _seq.setText(rnaInList.get(0).getSeq());
+               
+               _updateButton.addActionListener(new ActionListener() {
+                       public void actionPerformed(ActionEvent e) {
+                               FullBackup  sel = (FullBackup) _sideList.getSelectedValue();
+                               sel.rna.setSequence("A");
+                               }
+               });
+               
+               //_seqPanel.setLayout(new BorderLayout());
+               //_seqPanel.add(_seqLabel, BorderLayout.WEST);
+               //_seqPanel.add(_seq, BorderLayout.CENTER);
+
+               _strLabel.setPreferredSize(new Dimension(marginTools, 15));
+               _strLabel.setHorizontalTextPosition(JLabel.LEFT);
+               _str.setFont(textFieldsFont);
+               _strPanel.setLayout(new BorderLayout());
+               _strPanel.add(_strLabel, BorderLayout.WEST);
+               _strPanel.add(_str, BorderLayout.CENTER);
+
+               _input.setLayout(new GridLayout(1, 0));
+               //_input.add(_seqPanel);
+               _input.add(_strPanel);
+
+               JPanel goPanel = new JPanel();
+               goPanel.setLayout(new BorderLayout());
+
+               _tools.setLayout(new BorderLayout());
+               _tools.add(_input, BorderLayout.CENTER);
+               //_tools.add(_info, BorderLayout.SOUTH);
+               _tools.add(goPanel, BorderLayout.EAST);
+
+               /*_deleteButton.addActionListener(new ActionListener() {
+                       public void actionPerformed(ActionEvent e) {
+                               _rnaList.removeSelected();
+                       }
+               });
+               _duplicateButton.addActionListener(new ActionListener() {
+                       public void actionPerformed(ActionEvent e) {
+                                       _rnaList.add((VARNAConfig)vp.getConfig().clone(),vp.getRNA().clone(),vp.getRNA().getName()+"-"+DateFormat.getTimeInstance(DateFormat.LONG).format(new Date()),true); 
+                       }});
+               */
+               goPanel.add(_updateButton, BorderLayout.CENTER);
+               
+               
+               JPanel ops = new JPanel();
+               ops.setLayout(new GridLayout(1,2));
+               ops.add(_deleteButton);
+               ops.add(_duplicateButton);
+               
+               JLabel j = new JLabel("Structures Manager",JLabel.CENTER);
+               _listPanel.setLayout(new BorderLayout());
+               
+               _listPanel.add(ops,BorderLayout.SOUTH);
+               _listPanel.add(j,BorderLayout.NORTH);
+               _listPanel.add(listScroller,BorderLayout.CENTER);
+               
+               
+               
+               //JSplitPane split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true,_listPanel,vp);
+               /**TODO
                getContentPane().setLayout(new BorderLayout());
-               getContentPane().add(_vp, BorderLayout.CENTER);
+               getContentPane().add(split, BorderLayout.CENTER);
+               getContentPane().add(_tools, BorderLayout.NORTH);
+                */
 
-               setVisible(true);
-               _vp.addVARNAListener(this);
+               //TODO setVisible(true);
+               DropTarget dt = new DropTarget(vp, this);
+               
+               vp.addVARNAListener(this);
+       }
+       
+       public JPanel getTools(){
+               return _tools;
+       }
+       
+       public JPanel getListPanel(){
+               return _listPanel;
+       }
+       
+       /**
+        * TODO: Is it effective to transfer the whole RNA?
+        * @return Currently selected RNA
+        */
+       public RNA getSelectedRNA(){
+               return _rnaList.getElementAt(_sideList.getSelectedIndex()).rna;
+       }
+       
+       /**
+        * Substitute currently selected RNA with the edited one
+        * @param rnaEdit
+        */
+       public void updateSelectedRNA(RNA rnaEdit){
+               vp.repaint();
+               vp.showRNA(rnaEdit);
        }
 
+       /*
        private void RNAPanelDemoInit() 
        {
            DefaultListModel dlm = new DefaultListModel(); 
@@ -209,8 +375,8 @@ public class AppVarnaBinding extends JFrame implements DropTargetListener, Inter
                                if (!_sideList.isSelectionEmpty() && !arg0.getValueIsAdjusting())
                                {
                                        FullBackup  sel = (FullBackup) _sideList.getSelectedValue();
-                                       Mapping map = Mapping.DefaultOutermostMapping(_vp.getRNA().getSize(), sel.rna.getSize());
-                                       _vp.showRNAInterpolated(sel.rna,sel.config,map);
+                                       Mapping map = Mapping.DefaultOutermostMapping(vp.getRNA().getSize(), sel.rna.getSize());
+                                       vp.showRNAInterpolated(sel.rna,sel.config,map);
                                        _seq.setText(sel.rna.getSeq());
                                        _str.setText(sel.rna.getStructDBN());
                                }
@@ -221,27 +387,27 @@ public class AppVarnaBinding extends JFrame implements DropTargetListener, Inter
                RNA _RNA1 = new RNA("User defined 1");
                RNA _RNA2 = new RNA("User defined 2");
                try {
-                       _vp = new VARNAPanel("0",".");
+                       vp = new VARNAPanel("0",".");
                        _RNA1.setRNA(DEFAULT_SEQUENCE, DEFAULT_STRUCTURE1);
-                       _RNA1.drawRNARadiate(_vp.getConfig());
+                       _RNA1.drawRNARadiate(vp.getConfig());
                        _RNA2.setRNA(DEFAULT_SEQUENCE, DEFAULT_STRUCTURE2);
-                       _RNA2.drawRNARadiate(_vp.getConfig());
+                       _RNA2.drawRNARadiate(vp.getConfig());
                } catch (ExceptionNonEqualLength e) {
-                       _vp.errorDialog(e);
+                       vp.errorDialog(e);
                } catch (ExceptionUnmatchedClosingParentheses e2) {
                e2.printStackTrace();
                } catch (ExceptionFileFormatOrSyntax e3) {
                e3.printStackTrace();
                }
-               _vp.setPreferredSize(new Dimension(400, 400));
-           _rnaList.add(_vp.getConfig().clone(),_RNA2,generateDefaultName());
-           _rnaList.add(_vp.getConfig().clone(),_RNA1,generateDefaultName(),true);
+               vp.setPreferredSize(new Dimension(400, 400));
+           _rnaList.add(vp.getConfig().clone(),_RNA2,generateDefaultName());
+           _rnaList.add(vp.getConfig().clone(),_RNA1,generateDefaultName(),true);
 
            JScrollPane listScroller = new JScrollPane(_sideList);
            listScroller.setPreferredSize(new Dimension(150, 0));
 
                setBackground(_backgroundColor);
-               _vp.setBackground(_backgroundColor);
+               vp.setBackground(_backgroundColor);
 
 
                Font textFieldsFont = Font.decode("MonoSpaced-PLAIN-12");
@@ -256,12 +422,12 @@ public class AppVarnaBinding extends JFrame implements DropTargetListener, Inter
                                try {
                                RNA nRNA = new RNA(generateDefaultName());
                                nRNA.setRNA(_seq.getText(), _str.getText());
-                               nRNA.drawRNARadiate(_vp.getConfig());
+                               nRNA.drawRNARadiate(vp.getConfig());
                                _rnaList.add(new VARNAConfig(),nRNA,true);
                                } catch (ExceptionUnmatchedClosingParentheses e1) {
-                                       JOptionPane.showMessageDialog(_vp, e1.getMessage(),"Error", JOptionPane.ERROR_MESSAGE);
+                                       JOptionPane.showMessageDialog(vp, e1.getMessage(),"Error", JOptionPane.ERROR_MESSAGE);
                                } catch (ExceptionFileFormatOrSyntax e1) {
-                                       JOptionPane.showMessageDialog(_vp, e1.getMessage(),"Error", JOptionPane.ERROR_MESSAGE);
+                                       JOptionPane.showMessageDialog(vp, e1.getMessage(),"Error", JOptionPane.ERROR_MESSAGE);
                                }
                        }
                });
@@ -297,7 +463,7 @@ public class AppVarnaBinding extends JFrame implements DropTargetListener, Inter
                });
                _duplicateButton.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent e) {
-                                       _rnaList.add((VARNAConfig)_vp.getConfig().clone(),_vp.getRNA().clone(),_vp.getRNA().getName()+"-"+DateFormat.getTimeInstance(DateFormat.LONG).format(new Date()),true); 
+                                       _rnaList.add((VARNAConfig)vp.getConfig().clone(),vp.getRNA().clone(),vp.getRNA().getName()+"-"+DateFormat.getTimeInstance(DateFormat.LONG).format(new Date()),true); 
                        }});
                
                JPanel ops = new JPanel();
@@ -314,17 +480,17 @@ public class AppVarnaBinding extends JFrame implements DropTargetListener, Inter
 
                goPanel.add(_createButton, BorderLayout.CENTER);
 
-               JSplitPane split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true,_listPanel,_vp);
+               JSplitPane split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true,_listPanel,vp);
                getContentPane().setLayout(new BorderLayout());
                getContentPane().add(split, BorderLayout.CENTER);
                getContentPane().add(_tools, BorderLayout.NORTH);
 
                setVisible(true);
-               DropTarget dt = new DropTarget(_vp, this);
+               DropTarget dt = new DropTarget(vp, this);
                
-               _vp.addVARNAListener(this);
+               vp.addVARNAListener(this);
        }
-       
+       */
        public static String generateDefaultName()
        {
                return "User file #"+_nextID++;
@@ -347,7 +513,7 @@ public class AppVarnaBinding extends JFrame implements DropTargetListener, Inter
        }
 
        public void init() {
-               _vp.setBackground(_backgroundColor);
+               vp.setBackground(_backgroundColor);
                _error = true;
        }
 
@@ -367,11 +533,11 @@ public class AppVarnaBinding extends JFrame implements DropTargetListener, Inter
        }
 
        public VARNAPanel get_varnaPanel() {
-               return _vp;
+               return vp;
        }
 
        public void set_varnaPanel(VARNAPanel surface) {
-               _vp = surface;
+               vp = surface;
        }
 
 
@@ -399,12 +565,12 @@ public class AppVarnaBinding extends JFrame implements DropTargetListener, Inter
                this._info = _info;
        }
 
-       public static void main(String[] args) {
+       /*public static void main(String[] args) {
                AppVarnaBinding d = new AppVarnaBinding();
                d.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                d.pack();
                d.setVisible(true);
-       }
+       }*/
        
 
        public void dragEnter(DropTargetDragEvent arg0) {
@@ -559,8 +725,8 @@ public class AppVarnaBinding extends JFrame implements DropTargetListener, Inter
                                  } catch (ExceptionUnmatchedClosingParentheses e1) {
                                  } catch (ExceptionFileFormatOrSyntax e1) {
                                  }
-                                 _vp.showRNA(r);
-                                 _vp.repaint();
+                                 vp.showRNA(r);
+                                 vp.repaint();
                          }
                          else
                          {  
@@ -598,7 +764,7 @@ public class AppVarnaBinding extends JFrame implements DropTargetListener, Inter
                             ListModel dlm = _sideList.getModel();
                             FullBackup item = (FullBackup) dlm.getElementAt(index);;
                             _sideList.ensureIndexIsVisible(index);
-                            Object newName = JOptionPane.showInputDialog(
+                            /*TODO Object newName = JOptionPane.showInputDialog(
                                            this,
                                            "Specify a new name for this RNA",
                                            "Rename RNA", 
@@ -610,7 +776,7 @@ public class AppVarnaBinding extends JFrame implements DropTargetListener, Inter
                             {
                                 item.name = newName.toString();
                                 this._sideList.repaint();
-                            }
+                            }*/
                             }
        }
 
@@ -633,6 +799,75 @@ public class AppVarnaBinding extends JFrame implements DropTargetListener, Inter
                // TODO Auto-generated method stub
                
        }
+
+       @Override
+       public Color getColour(int atomIndex, int pdbResNum, String chain,
+                       String pdbId) {
+               // TODO Auto-generated method stub
+               return null;
+       }
+
+       @Override
+       public String[] getPdbFile() {
+               // TODO Auto-generated method stub
+               return null;
+       }
+
+       @Override
+       public void highlightAtom(int atomIndex, int pdbResNum, String chain,
+                       String pdbId) {
+               // TODO Auto-generated method stub
+               
+       }
+
+       @Override
+       public void mouseOverStructure(int atomIndex, String strInfo) {
+               // TODO Auto-generated method stub
+               
+       }
+
+       @Override
+       public void releaseReferences(Object svl) {
+               // TODO Auto-generated method stub
+               
+       }
+
+       @Override
+       public void updateColours(Object source) {
+               // TODO Auto-generated method stub
+               
+       }
+
+       @Override
+       public void componentHidden(ComponentEvent e) {
+               // TODO Auto-generated method stub
+               
+       }
+
+       @Override
+       public void componentMoved(ComponentEvent e) {
+               // TODO Auto-generated method stub
+               
+       }
+
+       @Override
+       public void componentResized(ComponentEvent e) {
+               // TODO Auto-generated method stub
+               
+       }
+
+       @Override
+       public void componentShown(ComponentEvent e) {
+               // TODO Auto-generated method stub
+               
+       }
+
+  @Override
+  public void onStructureRedrawn()
+  {
+    // TODO Auto-generated method stub
+    
+  }
 }