/* 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. Copyright (C) 2008 Kevin Darty, Alain Denise and Yann Ponty. electronic mail : Yann.Ponty@lri.fr paper mail : LRI, bat 490 Université Paris-Sud 91405 Orsay Cedex France This file is part of VARNA version 3.1. VARNA version 3.1 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. VARNA version 3.1 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 VARNA version 3.1. If not, see http://www.gnu.org/licenses. */ package fr.orsay.lri.varna.views; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import javax.swing.BorderFactory; import javax.swing.JPanel; import javax.swing.JTextArea; import javax.swing.Timer; import fr.orsay.lri.varna.VARNAPanel; import fr.orsay.lri.varna.exceptions.ExceptionNonEqualLength; import fr.orsay.lri.varna.models.VARNAConfig; /** * BH j2s SwingJS replaces thread with simple javax.swing.Timer * */ public class VueAboutPanel extends JPanel { /** * */ private static final long serialVersionUID = 4525998278180950602L; private AboutAnimator _anim; private JPanel _textPanel; private JTextArea _textArea; public VueAboutPanel() { init(); } private void init() { try { setBorder(BorderFactory.createEtchedBorder()); setLayout(new BorderLayout()); setBackground(Color.WHITE); String message = "VARNA " + VARNAConfig.MAJOR_VERSION + "." + VARNAConfig.MINOR_VERSION + "\n" + "\n" + "Created by: Kevin Darty, Alain Denise and Yann Ponty\n" + "Contact: ponty@lri.fr\n" + "\n" + "VARNA is freely distributed under the terms of the GNU GPL 3.0 license.\n" + "\n" + "Supported by the BRASERO project (ANR-06-BLAN-0045)\n"; _textArea = new JTextArea(); _textArea.setText(message); _textArea.setEditable(false); _textPanel = new JPanel(); _textPanel.setBackground(Color.WHITE); _textPanel.setLayout(new BorderLayout()); _textPanel.setBorder(BorderFactory.createMatteBorder(0, 15, 0, 15, getBackground())); _textPanel.add(_textArea); VARNAPanel vp = new VARNAPanel("GGGGAAAACCCC", "((((....))))"); vp.setModifiable(false); vp.setPreferredSize(new Dimension(100, 100)); // vp.setBorder(BorderFactory.createLineBorder(Color.gray)); _anim = new AboutAnimator(vp); _anim .addRNA("GGGGAAGGGGAAAACCCCAACCCC", "((((..((((....))))..))))"); _anim.addRNA("GGGGAAGGGGAAGGGGAAAACCCCAACCCCAACCCC", "((((..((((..((((....))))..))))..))))"); _anim .addRNA( "GGGGAGGGGAAAACCCCAGGGGAGGGGAAAACCCCAGGGGAAAACCCCAGGGGAAAACCCCACCCCAGGGGAAAACCCCACCCC", "((((.((((....)))).((((.((((....)))).((((....)))).((((....)))).)))).((((....)))).))))"); _anim .addRNA( "GGGGGGGGAAAACCCCAGGGGAAAACCCCAGGGGGGGGAAAACCCCAGGGGAAAACCCCAGGGGAAAACCCCAGGGGAAAACCCCGGGGAAAACCCCACCCCAGGGGAAAACCCCAGGGGAAAACCCCCCCC", "((((((((....)))).((((....)))).((((((((....)))).((((....)))).((((....)))).((((....))))((((....)))).)))).((((....)))).((((....))))))))"); _anim.addRNA("GGGGAAAACCCC", "((((....))))"); _anim.addRNA("GGGGAAGGGGAAAACCCCAGGGGAAAACCCCACCCC", "((((..((((....)))).((((....)))).))))"); _anim.addRNA("GGGGAGGGGAAAACCCCAGGGGAAAACCCCAGGGGAAAACCCCACCCC", "((((.((((....)))).((((....)))).((((....)))).))))"); _anim .addRNA( "GGGGAGGGGAAAAAAACCCCAGGGGAAAAAAACCCCAGGGGAAAAAAACCCCACCCC", "((((.((((.......)))).((((.......)))).((((.......)))).))))"); _anim.start(); add(vp, BorderLayout.WEST); add(_textPanel, BorderLayout.CENTER); } catch (ExceptionNonEqualLength e) { } } public void gracefulStop() { _anim.gracefulStop(); } private class AboutAnimator implements ActionListener { VARNAPanel _vp; ArrayList _structures = new ArrayList(); ArrayList _sequences = new ArrayList(); int _period = 2000; boolean _over = false; public AboutAnimator(VARNAPanel vp) { super(); _vp = vp; } /** * mode pointer for timer cycle -- DELAY1, TASK, DELAY2, STOP */ int mode = 0; /** * modes for run() * */ final int DELAY1 = 0, TASK = 1, DELAY2 = 2, STOP = 3; int i = 0; @Override public void actionPerformed(ActionEvent e) { run(); } public void start() { int mode = DELAY1; run(); } public void addRNA(String seq, String str) { _sequences.add(seq); _structures.add(str); } public void gracefulStop() { _over = true; } public void run() { int initialDelay; if (_over) mode = STOP; switch (mode) { case DELAY1: mode = TASK; initialDelay = _period; break; case TASK: String seq = _sequences.get(i); String str = _structures.get(i); try { _vp.drawRNAInterpolated(seq, str); mode = DELAY2; initialDelay = 500; } catch (ExceptionNonEqualLength e) { initialDelay = -1; } break; case DELAY2: i = (i + 1) % _sequences.size(); mode = DELAY1; initialDelay = 0; break; case STOP: default: initialDelay = -1; break; } if (initialDelay >= 0) { Timer t = new Timer(initialDelay, this); t.setDelay(0); t.setRepeats(false); t.start(); } else { System.out.println("VueAbout done"); } } } }