2 VARNA is a tool for the automated drawing, visualization and annotation of the secondary structure of RNA, designed as a companion software for web servers and databases.
3 Copyright (C) 2008 Kevin Darty, Alain Denise and Yann Ponty.
4 electronic mail : Yann.Ponty@lri.fr
5 paper mail : LRI, bat 490 Université Paris-Sud 91405 Orsay Cedex France
7 This file is part of VARNA version 3.1.
8 VARNA version 3.1 is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License
9 as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
11 VARNA version 3.1 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
12 without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13 See the GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License along with VARNA version 3.1.
16 If not, see http://www.gnu.org/licenses.
18 package fr.orsay.lri.varna.applications.fragseq;
20 import java.awt.BorderLayout;
21 import java.awt.Color;
22 import java.awt.Component;
23 import java.awt.Dimension;
24 import java.awt.GridLayout;
25 import java.awt.datatransfer.DataFlavor;
26 import java.awt.datatransfer.Transferable;
27 import java.awt.datatransfer.UnsupportedFlavorException;
28 import java.awt.dnd.DropTarget;
29 import java.awt.dnd.DropTargetDragEvent;
30 import java.awt.dnd.DropTargetDropEvent;
31 import java.awt.dnd.DropTargetEvent;
32 import java.awt.dnd.DropTargetListener;
33 import java.awt.event.ActionEvent;
34 import java.awt.event.ActionListener;
35 import java.awt.event.ComponentEvent;
36 import java.awt.event.ComponentListener;
37 import java.awt.event.FocusEvent;
38 import java.awt.event.FocusListener;
39 import java.awt.event.MouseEvent;
40 import java.awt.event.MouseListener;
41 import java.awt.event.WindowEvent;
42 import java.awt.event.WindowListener;
43 import java.io.IOException;
44 import java.util.ArrayList;
46 import javax.swing.BorderFactory;
47 import javax.swing.ButtonGroup;
48 import javax.swing.DefaultListSelectionModel;
49 import javax.swing.JButton;
50 import javax.swing.JComboBox;
51 import javax.swing.JComponent;
52 import javax.swing.JFileChooser;
53 import javax.swing.JFrame;
54 import javax.swing.JLabel;
55 import javax.swing.JList;
56 import javax.swing.JOptionPane;
57 import javax.swing.JPanel;
58 import javax.swing.JRadioButton;
59 import javax.swing.JScrollPane;
60 import javax.swing.JSplitPane;
61 import javax.swing.JTextPane;
62 import javax.swing.JToolBar;
63 import javax.swing.JTree;
64 import javax.swing.ListSelectionModel;
65 import javax.swing.LookAndFeel;
66 import javax.swing.SwingUtilities;
67 import javax.swing.TransferHandler;
68 import javax.swing.UIManager;
69 import javax.swing.UIManager.LookAndFeelInfo;
70 import javax.swing.UnsupportedLookAndFeelException;
71 import javax.swing.event.TreeModelEvent;
72 import javax.swing.event.TreeModelListener;
73 import javax.swing.event.TreeSelectionEvent;
74 import javax.swing.event.TreeSelectionListener;
75 import javax.swing.tree.DefaultMutableTreeNode;
76 import javax.swing.tree.ExpandVetoException;
77 import javax.swing.tree.TreePath;
78 import javax.swing.tree.TreeSelectionModel;
80 import fr.orsay.lri.varna.VARNAPanel;
81 import fr.orsay.lri.varna.applications.BasicINI;
82 import fr.orsay.lri.varna.exceptions.ExceptionLoadingFailed;
83 import fr.orsay.lri.varna.exceptions.ExceptionNonEqualLength;
84 import fr.orsay.lri.varna.models.FullBackup;
87 public class FragSeqGUI extends JFrame implements TreeModelListener, MouseListener,DropTargetListener, WindowListener, ComponentListener, ActionListener, TreeSelectionListener {
107 private static final long serialVersionUID = -790155708306987257L;
111 private String _INIFilename = "FragSeqUI.ini";
112 private boolean redrawOnSlide = false;
113 private int dividerWidth = 5;
115 private JPanel _varnaUpperPanels = new JPanel();
116 private JPanel _varnaLowerPanels = new JPanel();
118 private JPanel _listPanel = new JPanel();
119 private JPanel _infoPanel = new JPanel();
120 private FragSeqTree _sideList = null;
123 private FragSeqTreeModel _treeModel;
124 private JToolBar _toolbar = new JToolBar();
125 private JFileChooser _choice = new JFileChooser();
127 private JScrollPane _listScroller;
129 private JList _selectedElems;
130 private JSplitPane _splitLeft;
131 private JSplitPane _splitRight;
132 private JSplitPane _splitVARNA;
134 private JComboBox _lnf;
137 public FragSeqGUI() {
138 super("VARNA Explorer");
143 private void RNAPanelDemoInit()
145 JFrame.setDefaultLookAndFeelDecorated(true);
146 this.addWindowListener(this);
148 _selectedElems = new JList();
150 _lnf = new JComboBox(UIManager.getInstalledLookAndFeels());
152 // Initializing Custom Tree Model
153 _treeModel = new FragSeqTreeModel();
154 _treeModel.addTreeModelListener(this);
156 _sideList = new FragSeqTree(_treeModel);
157 _sideList.addMouseListener(this);
158 _sideList.setLargeModel(true);
159 _sideList.setEditable(true);
160 _sideList.addTreeWillExpandListener(_treeModel);
161 FragSeqCellRenderer renderer = new FragSeqCellRenderer(_sideList,_treeModel);
162 //_sideList.setUI(new CustomTreeUI());
163 _sideList.setCellRenderer(renderer);
164 _sideList.setCellEditor(new FragSeqCellEditor(_sideList,renderer,_treeModel));
165 TreeSelectionModel m = _sideList.getSelectionModel();
166 m.setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
167 _sideList.setSelectionModel(m);
168 m.addTreeSelectionListener(this);
169 _sideList.setShowsRootHandles(true);
170 _sideList.setDragEnabled(true);
171 _sideList.setRootVisible(false);
172 _sideList.setTransferHandler(new TransferHandler(null)
174 public int getSourceActions(JComponent c) {
177 protected Transferable createTransferable(JComponent c) {
178 JTree tree = (JTree) c;
179 TreePath tp =tree.getSelectionPath();
182 DefaultMutableTreeNode node = (DefaultMutableTreeNode) tp.getLastPathComponent();
183 if (node.getUserObject() instanceof FragSeqRNASecStrModel) {
184 return new Transferable(){
185 public DataFlavor[] getTransferDataFlavors() {
186 DataFlavor[] dt = {FragSeqRNASecStrModel.Flavor};
189 public Object getTransferData(DataFlavor df)
190 throws UnsupportedFlavorException, IOException {
191 if (!isDataFlavorSupported(df))
192 throw new UnsupportedFlavorException(df);
193 DefaultMutableTreeNode node = (DefaultMutableTreeNode) _sideList.getSelectionPath().getLastPathComponent();
194 return node.getUserObject();
196 public boolean isDataFlavorSupported(DataFlavor df) {
197 return FragSeqRNASecStrModel.Flavor.equals(df);
200 } else if (node.getUserObject() instanceof FragSeqAnnotationDataModel) {
201 return new Transferable(){
202 public DataFlavor[] getTransferDataFlavors() {
203 DataFlavor[] dt = { FragSeqAnnotationDataModel.Flavor};
206 public Object getTransferData(DataFlavor df)
207 throws UnsupportedFlavorException, IOException {
208 if (!isDataFlavorSupported(df))
209 throw new UnsupportedFlavorException(df);
210 DefaultMutableTreeNode node = (DefaultMutableTreeNode) _sideList.getSelectionPath().getLastPathComponent();
211 return node.getUserObject();
213 public boolean isDataFlavorSupported(DataFlavor df) {
214 return FragSeqAnnotationDataModel.Flavor.equals(df);
226 JButton refreshAllFoldersButton = new JButton("Refresh All");
227 refreshAllFoldersButton.setActionCommand(""+Commands.REFRESH_ALL);
228 refreshAllFoldersButton.addActionListener(this);
230 JButton watchFolderButton = new JButton("Add folder");
231 watchFolderButton.setActionCommand("" +Commands.NEW_FOLDER);
232 watchFolderButton.addActionListener(this);
234 JButton addUpperButton = new JButton("+Up");
235 addUpperButton.setActionCommand(""+Commands.ADD_PANEL_UP);
236 addUpperButton.addActionListener(this);
238 JButton removeUpperButton = new JButton("-Up");
239 removeUpperButton.setActionCommand(""+Commands.REMOVE_PANEL_UP);
240 removeUpperButton.addActionListener(this);
242 JButton addLowerButton = new JButton("+Down");
243 addLowerButton.setActionCommand(""+Commands.ADD_PANEL_DOWN);
244 addLowerButton.addActionListener(this);
246 JButton removeLowerButton = new JButton("-Down");
247 removeLowerButton.setActionCommand(""+Commands.REMOVE_PANEL_DOWN);
248 removeLowerButton.addActionListener(this);
250 JButton changeLNFButton = new JButton("Change");
251 changeLNFButton.setActionCommand(""+Commands.CHANGE_LNF);
252 changeLNFButton.addActionListener(this);
254 JButton XMLButton = new JButton("Test XML");
255 XMLButton.setActionCommand(""+Commands.TEST_XML);
256 XMLButton.addActionListener(this);
258 _toolbar.setFloatable(false);
259 _toolbar.add(refreshAllFoldersButton);
260 _toolbar.addSeparator();
261 _toolbar.add(addUpperButton);
262 _toolbar.add(removeUpperButton);
263 _toolbar.add(addLowerButton);
264 _toolbar.add(removeLowerButton);
265 _toolbar.addSeparator();
266 _toolbar.add(XMLButton);
267 _toolbar.addSeparator();
269 _toolbar.add(changeLNFButton);
271 // Scroller for File tree
272 _listScroller = new JScrollPane(_sideList,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
273 _listScroller.setPreferredSize(new Dimension(300, 200));
274 _listScroller.addComponentListener(this);
277 _listPanel.setLayout(new BorderLayout());
279 _listPanel.add(_listScroller,BorderLayout.CENTER);
280 _listPanel.add(_selectedElems,BorderLayout.SOUTH);
281 _listPanel.setBorder(BorderFactory.createTitledBorder("Structures"));
282 _listPanel.setPreferredSize(new Dimension(300, 0));
284 _varnaUpperPanels.setLayout(new GridLayout());
285 _varnaUpperPanels.setPreferredSize(new Dimension(800, 600));
287 _varnaLowerPanels.setLayout(new GridLayout());
288 _varnaLowerPanels.setPreferredSize(new Dimension(800, 000));
290 JRadioButton sortFileName = new JRadioButton("Directory");
291 sortFileName.setActionCommand("sortfilename");
292 sortFileName.setSelected(true);
293 sortFileName.setOpaque(false);
294 sortFileName.setActionCommand(""+Commands.SORT_FILENAME);
295 sortFileName.addActionListener(this);
296 JRadioButton sortID = new JRadioButton("ID");
297 sortID.setActionCommand("sortid");
298 sortID.setOpaque(false);
299 sortID.setActionCommand(""+Commands.SORT_ID);
300 sortID.addActionListener(this);
302 ButtonGroup group = new ButtonGroup();
303 group.add(sortFileName);
306 JToolBar listTools = new JToolBar();
307 listTools.setFloatable(false);
308 listTools.add(watchFolderButton);
309 listTools.addSeparator();
310 listTools.add(new JLabel("Sort by"));
311 listTools.add(sortFileName);
312 listTools.add(sortID);
314 JPanel sidePanel = new JPanel();
315 sidePanel.setLayout(new BorderLayout());
316 sidePanel.add(listTools,BorderLayout.NORTH);
317 sidePanel.add(_listPanel,BorderLayout.CENTER);
320 JPanel mainVARNAPanel = new JPanel();
321 mainVARNAPanel.setLayout(new BorderLayout());
322 _splitVARNA = new JSplitPane(JSplitPane.VERTICAL_SPLIT,redrawOnSlide,_varnaUpperPanels,_varnaLowerPanels);
323 _splitVARNA.setDividerSize(dividerWidth);
324 _splitVARNA.setResizeWeight(1.0);
325 _splitLeft = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,redrawOnSlide,sidePanel,_splitVARNA);
326 _splitLeft.setResizeWeight(0.1);
327 _splitLeft.setDividerSize(dividerWidth);
328 _splitRight = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,redrawOnSlide,_splitLeft,_infoPanel);
329 _splitRight.setResizeWeight(0.85);
330 _splitRight.setDividerSize(dividerWidth);
332 _infoPanel.setLayout(new GridLayout(0,1));
334 this.restoreConfig();
335 this.getContentPane().setLayout(new BorderLayout());
336 this.getContentPane().add(_splitRight, BorderLayout.CENTER);
337 this.getContentPane().add(_toolbar, BorderLayout.NORTH);
340 this.setVisible(true);
343 public FragSeqGUI getSelf()
348 public VARNAHolder createIntegratedPanel(int height)
350 VARNAHolder vh = new VARNAHolder(this);
351 _varnaPanels.add(vh);
356 public void removeUpperPanel()
358 if (_varnaUpperPanels.getComponentCount()>1)
360 VARNAHolder vh = (VARNAHolder) _varnaUpperPanels.getComponent(_varnaUpperPanels.getComponentCount()-1);
361 _infoPanel.remove(vh.getInfoPane());
362 _varnaUpperPanels.remove(vh);
363 _splitLeft.validate();
364 _splitRight.validate();
368 public void addUpperPanel()
370 VARNAHolder vh = createIntegratedPanel(100);
371 _varnaUpperPanels.add(vh);
372 _infoPanel.add(vh.getInfoPane());
373 _splitRight.validate();
374 _splitLeft.validate();
378 public void removeLowerPanel()
380 if (_varnaLowerPanels.getComponentCount()>0)
382 _varnaLowerPanels.remove(_varnaLowerPanels.getComponentCount()-1);
383 if (_varnaLowerPanels.getComponentCount()==0)
385 _splitVARNA.setDividerLocation(1.0);
386 _splitVARNA.validate();
387 _splitVARNA.repaint();
389 _splitLeft.validate();
393 public void addLowerPanel()
395 if (_varnaLowerPanels.getComponentCount()==0)
397 _splitVARNA.setDividerLocation(0.7);
398 _splitVARNA.validate();
400 _varnaLowerPanels.add(createIntegratedPanel(400));
401 _splitLeft.validate();
405 public void treeNodesChanged(TreeModelEvent e) {
406 DefaultMutableTreeNode node;
407 node = (DefaultMutableTreeNode)
408 (e.getTreePath().getLastPathComponent());
411 * If the event lists children, then the changed
412 * node is the child of the node we have already
413 * gotten. Otherwise, the changed node and the
414 * specified node are the same.
417 int index = e.getChildIndices()[0];
418 node = (DefaultMutableTreeNode)
419 (node.getChildAt(index));
420 } catch (NullPointerException exc) {}
427 public void addFolder(String path) {
428 addFolder( path, true);
431 public void addFolder(String path,
432 boolean shouldBeVisible)
434 DefaultMutableTreeNode childNode = _treeModel.addFolder(path);
436 if ((childNode!=null) && shouldBeVisible ) {
437 System.out.println(" Expanding: "+childNode.getUserObject());
438 TreePath tp = new TreePath(childNode.getPath());
439 _sideList.scrollPathToVisible(tp);
440 _sideList.expandRow(_sideList.getRowForPath(tp));
441 _sideList.updateUI();
442 _sideList.validate();
446 public void treeNodesInserted(TreeModelEvent e) {
447 System.out.println(e);
451 public void treeNodesRemoved(TreeModelEvent e) {
452 // TODO Auto-generated method stub
456 public void treeStructureChanged(TreeModelEvent e) {
457 // TODO Auto-generated method stub
461 public void mouseClicked(MouseEvent e) {
462 // TODO Auto-generated method stub
466 public void mousePressed(MouseEvent e) {
472 public void mouseReleased(MouseEvent e) {
473 // TODO Auto-generated method stub
474 if (e.getSource() == this._sideList)
476 if (e.getClickCount() == 1)
478 /*TreePath t = _sideList.getSelectionPath();
481 DefaultMutableTreeNode node = (DefaultMutableTreeNode) t.getLastPathComponent();
482 if (node.getUserObject() instanceof FragSeqFileModel)
484 int row = _sideList.getRowForPath(t);
485 System.out.println("[A]"+row);
486 if (!_sideList.isExpanded(row))
489 _sideList.fireTreeWillExpand(t);
490 _sideList.expandPath(t);
491 } catch (ExpandVetoException e1) {
492 // TODO Auto-generated catch block
493 e1.printStackTrace();
499 _sideList.fireTreeWillCollapse(t);
500 _sideList.collapsePath(t);
501 } catch (ExpandVetoException e1) {
502 // TODO Auto-generated catch block
503 e1.printStackTrace();
509 else if (e.getClickCount() == 2)
511 TreePath t = _sideList.getSelectionPath();
514 DefaultMutableTreeNode node = (DefaultMutableTreeNode) t.getLastPathComponent();
515 if (node.getUserObject() instanceof FragSeqFileModel)
517 if (!_sideList.isExpanded(t))
520 _sideList.fireTreeWillExpand(t);
521 _sideList.expandPath(t);
522 } catch (ExpandVetoException e1) {
523 e1.printStackTrace();
529 _sideList.fireTreeWillCollapse(t);
530 _sideList.collapsePath(t);
531 } catch (ExpandVetoException e1) {
532 e1.printStackTrace();
536 else if (node.getUserObject() instanceof FragSeqModel)
538 FragSeqModel model = (FragSeqModel) node.getUserObject();
540 // Figuring out which panel to add object to...
542 if (model instanceof FragSeqRNASecStrModel)
544 res = index % (_varnaUpperPanels.getComponentCount()+_varnaLowerPanels.getComponentCount());
548 res = (index+_varnaUpperPanels.getComponentCount()+_varnaLowerPanels.getComponentCount()-1) % (_varnaUpperPanels.getComponentCount()+_varnaLowerPanels.getComponentCount());
551 if (res<_varnaUpperPanels.getComponentCount())
553 c = (VARNAHolder)_varnaUpperPanels.getComponent(res);
557 res -= _varnaUpperPanels.getComponentCount();
558 c = (VARNAHolder)_varnaLowerPanels.getComponent(res);
561 if (c instanceof VARNAHolder)
563 VARNAHolder h = (VARNAHolder) c;
564 if (model instanceof FragSeqRNASecStrModel)
566 h.setSecStrModel((FragSeqRNASecStrModel)model);
569 else if (model instanceof FragSeqAnnotationDataModel)
571 h.setDataModel((FragSeqAnnotationDataModel)model);
583 class VARNAHolder extends JPanel
586 FragSeqRNASecStrModel _m;
587 FragSeqAnnotationDataModel _data;
592 public VARNAHolder(DropTargetListener f)
595 vp = new VARNAPanel();
596 vp.addFocusListener(new FocusListener(){
597 public void focusGained(FocusEvent e) {
600 public void focusLost(FocusEvent e) {
602 vp.setPreferredSize(new Dimension(800, 400));
604 _infoTxt = new JTextPane();
605 _infoTxt.setPreferredSize(new Dimension(200,0));
606 _infoTxt.setContentType("text/html");
608 JScrollPane scroll = new JScrollPane(_infoTxt,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
610 _infoPanel = new JPanel();
611 _infoPanel.setLayout(new BorderLayout());
612 _infoPanel.setPreferredSize(new Dimension(200,0));
613 _infoPanel.setBorder(BorderFactory.createTitledBorder("Info"));
614 _infoPanel.add(scroll,BorderLayout.CENTER);
615 _infoPanel.validate();
617 this.setLayout(new BorderLayout());
618 this.setPreferredSize(new Dimension(300,600));
619 this.setBorder(BorderFactory.createTitledBorder("None"));
620 this.add(vp, BorderLayout.CENTER);
622 DropTarget dt = new DropTarget(vp, f);
625 VARNAPanel getVARNAPanel()
629 void setSecStrModel(FragSeqRNASecStrModel m)
632 vp.showRNAInterpolated(m.getRNA());
633 setBorder(BorderFactory.createTitledBorder(m.toString()));
634 _infoTxt.setText(m.getRNA().getHTMLDescription());
635 _infoPanel.setBorder(BorderFactory.createTitledBorder("Info ("+_m+")"));
638 void setDataModel(FragSeqAnnotationDataModel data)
641 data.applyTo(vp.getRNA());
645 FragSeqModel getModel()
647 setBorder(BorderFactory.createTitledBorder(_m.toString()));
650 public void setInfoTxt(String s)
652 _infoTxt.setText(vp.getRNA().getHTMLDescription());
655 public JPanel getInfoPane()
663 private ArrayList<VARNAHolder> _varnaPanels = new ArrayList<VARNAHolder>();
665 private VARNAHolder getHolder(Component vp)
667 if (vp instanceof VARNAHolder)
669 int i= _varnaPanels.indexOf(vp);
672 return _varnaPanels.get(i);
675 if (vp instanceof VARNAPanel)
677 for (VARNAHolder vh: _varnaPanels)
679 if (vh.getVARNAPanel()==vp)
688 public void mouseEntered(MouseEvent e) {
689 // TODO Auto-generated method stub
693 public void mouseExited(MouseEvent e) {
694 // TODO Auto-generated method stub
698 public void dragEnter(DropTargetDragEvent arg0) {
699 // TODO Auto-generated method stub
703 public void dragExit(DropTargetEvent arg0) {
704 // TODO Auto-generated method stub
708 public void dragOver(DropTargetDragEvent arg0) {
712 public void drop(DropTargetDropEvent arg0) {
715 DropTarget o = (DropTarget)arg0.getSource();
716 if (o.getComponent() instanceof VARNAPanel)
718 VARNAHolder h = getHolder(o.getComponent());
721 System.out.println("[X]");
722 Transferable t = arg0.getTransferable();
723 if (t.isDataFlavorSupported(FragSeqRNASecStrModel.Flavor))
725 Object data = t.getTransferData(FragSeqRNASecStrModel.Flavor);
726 if (data instanceof FragSeqRNASecStrModel)
728 h.setSecStrModel((FragSeqRNASecStrModel) data);
731 else if (t.isDataFlavorSupported(FragSeqAnnotationDataModel.Flavor))
733 System.out.println("[Y]");
734 Object data = t.getTransferData(FragSeqAnnotationDataModel.Flavor);
735 if (data instanceof FragSeqAnnotationDataModel)
737 FragSeqAnnotationDataModel d = (FragSeqAnnotationDataModel) data;
743 } catch (UnsupportedFlavorException e) {
744 // TODO Auto-generated catch block
746 } catch (IOException e) {
747 // TODO Auto-generated catch block
752 public void dropActionChanged(DropTargetDragEvent arg0) {
753 // TODO Auto-generated method stub
757 public void windowOpened(WindowEvent e) {
758 // TODO Auto-generated method stub
762 public void windowClosing(WindowEvent e) {
767 public void windowClosed(WindowEvent e) {
768 // TODO Auto-generated method stub
772 public void windowIconified(WindowEvent e) {
773 // TODO Auto-generated method stub
777 public void windowDeiconified(WindowEvent e) {
778 // TODO Auto-generated method stub
782 public void windowActivated(WindowEvent e) {
783 // TODO Auto-generated method stub
787 public void windowDeactivated(WindowEvent e) {
788 // TODO Auto-generated method stub
792 private void restoreConfig()
794 BasicINI config = BasicINI.loadINI(_INIFilename);
795 ArrayList<String> vals = config.getItemList("folders");
796 System.out.print("[C]"+vals);
798 for(String path:vals)
800 System.out.println("Loading folder "+path);
803 _sideList.validate();
804 _listScroller.validate();
807 private void saveConfig()
809 BasicINI data = new BasicINI();
811 for (String folderPath: _treeModel.getFolders())
813 data.addItem("folders", "val"+i, folderPath);
816 BasicINI.saveINI(data, _INIFilename);
820 public void componentResized(ComponentEvent e) {
821 _sideList.validate();
825 public void componentMoved(ComponentEvent e) {
826 // TODO Auto-generated method stub
831 public void componentShown(ComponentEvent e) {
832 // TODO Auto-generated method stub
837 public void componentHidden(ComponentEvent e) {
838 // TODO Auto-generated method stub
843 public void actionPerformed(ActionEvent e) {
844 String cmd = e.getActionCommand();
845 System.out.println(cmd);
846 if (cmd.equals(""+Commands.NEW_FOLDER))
848 _choice.setDialogTitle("Watch new folder...");
849 _choice.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
850 _choice.setAcceptAllFileFilterUsed(false);
852 if (_choice.showOpenDialog(getSelf()) == JFileChooser.APPROVE_OPTION) {
853 addFolder(_choice.getSelectedFile().getCanonicalPath());
856 System.out.println("No Selection ");
858 } catch (IOException e1) {
859 e1.printStackTrace();
862 else if (cmd.equals(""+Commands.ADD_PANEL_DOWN))
866 else if (cmd.equals(""+Commands.ADD_PANEL_UP))
870 else if (cmd.equals(""+Commands.REMOVE_PANEL_DOWN))
874 else if (cmd.equals(""+Commands.REMOVE_PANEL_UP))
878 else if (cmd.equals(""+Commands.SORT_FILENAME))
880 _sideList.switchToPath();
882 else if (cmd.equals(""+Commands.SORT_ID))
884 _sideList.switchToID();
886 else if (cmd.equals(""+Commands.TEST_XML))
888 String path = "temp.xml";
889 VARNAHolder vh = (VARNAHolder) _varnaUpperPanels.getComponent(0);
892 FullBackup b = vh.vp.importSession(path);
893 VARNAHolder vh2 = (VARNAHolder) _varnaUpperPanels.getComponent(1);
894 vh2.vp.setConfig(b.config);
895 vh2.vp.showRNAInterpolated(b.rna);
897 } catch (ExceptionLoadingFailed e1) {
898 e1.printStackTrace();
901 else if (cmd.equals(""+Commands.CHANGE_LNF))
905 Object o = _lnf.getModel().getSelectedItem();
906 System.out.println(o);
907 UIManager.setLookAndFeel(((LookAndFeelInfo)_lnf.getModel().getSelectedItem()).getClassName());
908 SwingUtilities.updateComponentTreeUI(this);
910 } catch (UnsupportedLookAndFeelException e1) {
911 // TODO Auto-generated catch block
912 e1.printStackTrace();
913 } catch (ClassNotFoundException e2) {
914 // TODO Auto-generated catch block
915 e2.printStackTrace();
916 } catch (InstantiationException e3) {
917 // TODO Auto-generated catch block
918 e3.printStackTrace();
919 } catch (IllegalAccessException e4) {
920 // TODO Auto-generated catch block
921 e4.printStackTrace();
926 JOptionPane.showMessageDialog(this, "Command '"+cmd+"' not implemented yet.");
931 public void valueChanged(TreeSelectionEvent e) {
932 int[] t = _sideList.getSelectionRows();
935 System.out.print("null");
939 System.out.print("[");
940 for(int i=0;i<t.length;i++)
942 System.out.print(t[i]+",");
944 System.out.println("]");
949 public static void main(String[] args) {
950 FragSeqGUI d = new FragSeqGUI();
951 d.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);