Java 11 integration;
[jalview.git] / src2 / fr / orsay / lri / varna / views / VueAboutPanel.java
diff --git a/src2/fr/orsay/lri/varna/views/VueAboutPanel.java b/src2/fr/orsay/lri/varna/views/VueAboutPanel.java
new file mode 100644 (file)
index 0000000..fffbc80
--- /dev/null
@@ -0,0 +1,210 @@
+/*
+ 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<String> _structures = new ArrayList<String>();
+               ArrayList<String> _sequences = new ArrayList<String>();
+               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");
+                       }
+
+               }
+       }
+
+}