/* * Jalview - A Sequence Alignment Editor and Viewer (Version 2.6) * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle * * This file is part of Jalview. * * Jalview is free software: you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * * Jalview is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty * of MERCHANTABILITY or FITNESS FOR A PARTICULAR * PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with Jalview. If not, see . */ package jalview.gui; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.Font; import java.awt.GridLayout; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.dnd.DnDConstants; import java.awt.dnd.DropTarget; import java.awt.dnd.DropTargetDragEvent; import java.awt.dnd.DropTargetDropEvent; 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; import java.text.DateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import javax.swing.DefaultListModel; import javax.swing.DefaultListSelectionModel; import javax.swing.Icon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JSplitPane; import javax.swing.JTextField; import javax.swing.ListModel; import javax.swing.ListSelectionModel; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import fr.orsay.lri.varna.VARNAPanel; import fr.orsay.lri.varna.components.ReorderableJList; import fr.orsay.lri.varna.exceptions.ExceptionFileFormatOrSyntax; import fr.orsay.lri.varna.exceptions.ExceptionLoadingFailed; import fr.orsay.lri.varna.exceptions.ExceptionNonEqualLength; import fr.orsay.lri.varna.exceptions.ExceptionUnmatchedClosingParentheses; import fr.orsay.lri.varna.interfaces.InterfaceVARNAListener; import fr.orsay.lri.varna.models.FullBackup; 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 jalview.ext.varna.JalviewVarnaBinding implements DropTargetListener, InterfaceVARNAListener, MouseListener { /** * */ //private static final long serialVersionUID = -790155708306987257L; private String DEFAULT_SEQUENCE = "CAGCACGACACUAGCAGUCAGUGUCAGACUGCAIACAGCACGACACUAGCAGUCAGUGUCAGACUGCAIACAGCACGACACUAGCAGUCAGUGUCAGACUGCAIA"; private String DEFAULT_STRUCTURE1 = "..(((((...(((((...(((((...(((((.....)))))...))))).....(((((...(((((.....)))))...))))).....)))))...))))).."; private String DEFAULT_STRUCTURE2 = "..(((((...(((((...(((((........(((((...(((((.....)))))...)))))..................))))).....)))))...))))).."; public VARNAPanel vp; protected JPanel _tools = new JPanel(); private JPanel _input = new JPanel(); private JPanel _seqPanel = new JPanel(); private JPanel _strPanel = new JPanel(); private JLabel _info = new JLabel(); private JTextField _str = new JTextField(); private JTextField _seq = new JTextField(); 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"); protected JPanel _listPanel = new JPanel(); private ReorderableJList _sideList = null; private static String errorOpt = "error"; @SuppressWarnings("unused") private boolean _error; private Color _backgroundColor = Color.white; private static int _nextID = 1; @SuppressWarnings("unused") private int _algoCode; private BackupHolder _rnaList; /*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 rnaList){ //super("VARNA in Jalview"); initVarnaEdit(rnaList); } 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.setModel(dlm); _sideList.addMouseListener(this); _sideList.setSelectionModel(m); _sideList.setPreferredSize(new Dimension(100, 0)); _sideList.addListSelectionListener( new ListSelectionListener(){ public void valueChanged(ListSelectionEvent 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); RNA _RNA1 = new RNA("User defined 1"); try { vp = new VARNAPanel("0","."); _RNA1.setRNA(seq, str); _RNA1.drawRNARadiate(vp.getConfig()); } catch (ExceptionNonEqualLength 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); //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 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 _rnas = new ArrayList(); JList _l; public BackupHolder(DefaultListModel rnaList, JList l) { _rnaList = rnaList; _l = l; } public void add(VARNAConfig c, RNA r) { add(c, r, r.getName(),false); } public void add(VARNAConfig c, RNA r,boolean select) { add(c, r, r.getName(),select); } public void add(VARNAConfig c, RNA r, String name) { add(c, r, name,false); } public void add(VARNAConfig c, RNA r, String name, boolean select) { if (select){ _l.removeSelectionInterval(0, _rnaList.size()); } if (name.equals("")) { name = generateDefaultName(); } FullBackup bck = new FullBackup(c,r,name); _rnas.add(0, r); _rnaList.add(0,bck); if (select){ _l.setSelectedIndex(0); } } public void remove(int i) { _rnas.remove(i); _rnaList.remove(i); } public DefaultListModel getModel() { return _rnaList; } public boolean contains(RNA r) { return _rnas.contains(r); } /*public int getSize() { return _rnaList.getSize(); }*/ public FullBackup getElementAt(int i) { return (FullBackup) _rnaList.getElementAt(i); } public void removeSelected() { int i = _l.getSelectedIndex(); if (i!=-1) { if (_rnaList.getSize()==1) { RNA r = new RNA(); try { r.setRNA(" ", "."); } catch (ExceptionUnmatchedClosingParentheses e1) { } catch (ExceptionFileFormatOrSyntax e1) { } vp.showRNA(r); vp.repaint(); } else { int newi = i+1; if (newi==_rnaList.getSize()) { newi = _rnaList.getSize()-2; } FullBackup bck = (FullBackup) _rnaList.getElementAt(newi); _l.setSelectedValue(bck,true); } _rnaList.remove(i); } } } public void onLayoutChanged() { // TODO Auto-generated method stub } public void onUINewStructure(VARNAConfig v, RNA r) { _rnaList.add(v, r,"",true); } public void onWarningEmitted(String s) { // TODO Auto-generated method stub } public void mouseClicked(MouseEvent e) { if(e.getClickCount() == 2){ int index = _sideList.locationToIndex(e.getPoint()); ListModel dlm = _sideList.getModel(); FullBackup item = (FullBackup) dlm.getElementAt(index);; _sideList.ensureIndexIsVisible(index); /*TODO Object newName = JOptionPane.showInputDialog( this, "Specify a new name for this RNA", "Rename RNA", JOptionPane.QUESTION_MESSAGE, (Icon)null, null, item.toString()); if (newName!=null) { item.name = newName.toString(); this._sideList.repaint(); }*/ } } public void mouseEntered(MouseEvent arg0) { // TODO Auto-generated method stub } public void mouseExited(MouseEvent arg0) { // TODO Auto-generated method stub } public void mousePressed(MouseEvent arg0) { // TODO Auto-generated method stub } public void mouseReleased(MouseEvent arg0) { // 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 } } /* public static void main(String[] args) { JTextField str = new JTextField("ATGC"); AppVarnaBinding vab = new AppVarnaBinding(); vab.varnagui.set_seq(str); vab.varnagui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); vab.varnagui.pack(); vab.varnagui.setVisible(true); } } */