/* 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 University 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.controlers; import fr.orsay.lri.varna.VARNAPanel; public class ControleurBlinkingThread extends Thread { public static final long DEFAULT_FREQUENCY = 50; private long _period; private VARNAPanel _parent; private double _minVal, _maxVal, _val, _incr; private boolean _increasing = true; private boolean _active = false; public ControleurBlinkingThread(VARNAPanel vp) { this(vp, DEFAULT_FREQUENCY, 0, 1.0, 0.0, 0.2); } public ControleurBlinkingThread(VARNAPanel vp, long period, double minVal, double maxVal, double val, double incr) { _parent = vp; _period = period; _minVal = minVal; _maxVal = maxVal; _incr = incr; } public void setActive(boolean b) { if (_active == b) {} else { _active = b; if (_active) { interrupt(); } } } public boolean getActive() { return _active; } public double getVal() { return _val; } public void run() { while (true) { try { if (_active) { sleep(_period); if (_increasing) { _val = Math.min(_val + _incr, _maxVal); if (_val == _maxVal) { _increasing = false; } } else { _val = Math.max(_val - _incr, _minVal); if (_val == _minVal) { _increasing = true; } } _parent.repaint(); } else { sleep(10000); } } catch (InterruptedException e) { } } } }