content: /*
   *    This program 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 2 of the License, or
   *    (at your option) any later version.
   *
   *    This program 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 this program; if not, write to the Free Software
   *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
   */
  
  /*
   *    WekaTaskMonitor.java
   *    Copyright (C) 2000 University of Waikato, Hamilton, New Zealand
   *
   */
  
  package weka.gui;
  
  import java.awt.BorderLayout;
  import java.awt.Dimension;
  import java.awt.Image;
  import java.awt.Toolkit;
  
  import javax.swing.BorderFactory;
  import javax.swing.ImageIcon;
  import javax.swing.JLabel;
  import javax.swing.JPanel;
  import javax.swing.SwingConstants;
  
  /** 
   * This panel records the number of weka tasks running and displays a
   * simple bird animation while their are active tasks
   *
   * @author Mark Hall (mhall@cs.waikato.ac.nz)
   * @version $Revision: 5198 $
   */
  public class WekaTaskMonitor
    extends JPanel
    implements TaskLogger {
  
    /** for serialization */
    private static final long serialVersionUID = 508309816292197578L;
  
    /** The number of running weka threads */
    private int m_ActiveTasks = 0;
  
    /** The label for displaying info */
    private JLabel m_MonitorLabel;
  
    /** The icon for the stationary bird */
    private ImageIcon m_iconStationary;
  
    /** The icon for the animated bird */
    private ImageIcon m_iconAnimated;
  
    /** True if their are active tasks */
    private boolean m_animating = false;
    
    /**
     * Constructor
     */
    public WekaTaskMonitor() {
      java.net.URL imageURL = 
        this.getClass().getClassLoader().getResource("weka/gui/weka_stationary.gif");
  
      if (imageURL != null) {
        Image pic = Toolkit.getDefaultToolkit().getImage(imageURL);
        imageURL = 
          this.getClass().getClassLoader().getResource("weka/gui/weka_animated.gif");
        Image pic2 = Toolkit.getDefaultToolkit().getImage(imageURL); 
      
        /*    Image pic = Toolkit.getDefaultToolkit().
              getImage(ClassLoader.getSystemResource("weka/gui/weka_stationary.gif"));
              Image pic2 = Toolkit.getDefaultToolkit().
              getImage(ClassLoader.getSystemResource("weka/gui/weka_animated.gif")); */
  
        m_iconStationary = new ImageIcon(pic); 
        m_iconAnimated = new ImageIcon(pic2);
      }
      
      m_MonitorLabel = new JLabel(" x "+m_ActiveTasks,m_iconStationary,SwingConstants.CENTER);
      /*
      setBorder(BorderFactory.createCompoundBorder(
    	      BorderFactory.createTitledBorder("Weka Tasks"),
    	      BorderFactory.createEmptyBorder(0, 5, 5, 5)
    	      ));
      */
      setLayout(new BorderLayout());
      Dimension d = m_MonitorLabel.getPreferredSize();
      m_MonitorLabel.setPreferredSize(new Dimension(d.width+15,d.height));
      m_MonitorLabel.setMinimumSize(new Dimension(d.width+15,d.height));
      add(m_MonitorLabel, BorderLayout.CENTER);
      
  
    }
  
    /**
     * Tells the panel that a new task has been started
     */
    public synchronized void taskStarted() {
      m_ActiveTasks++;
      updateMonitor();
    }
  
    /**
     * Tells the panel that a task has completed
     */
    public synchronized void taskFinished() {
      m_ActiveTasks--;
      if (m_ActiveTasks < 0) {
        m_ActiveTasks = 0;
      }
      updateMonitor();
    }
  
    /**
     * Updates the number of running tasks an the status of the bird
     * image
     */
    private void updateMonitor() {
      m_MonitorLabel.setText(" x "+m_ActiveTasks);
      if (m_ActiveTasks > 0 && !m_animating) {
        m_MonitorLabel.setIcon(m_iconAnimated);
        m_animating = true;
      }
  
      if (m_ActiveTasks == 0 && m_animating) {
        m_MonitorLabel.setIcon(m_iconStationary);
        m_animating = false;
      }
    }
  
    /**
     * Main method for testing this class
     */
    public static void main(String [] args) {
      
      try {
        final javax.swing.JFrame jf = new javax.swing.JFrame();
        jf.getContentPane().setLayout(new BorderLayout());
        final WekaTaskMonitor tm = new WekaTaskMonitor();
        tm.setBorder(BorderFactory.createCompoundBorder(
    	           BorderFactory.createTitledBorder("Weka Tasks"),
    	           BorderFactory.createEmptyBorder(0, 5, 5, 5)
    	           ));
        jf.getContentPane().add(tm, BorderLayout.CENTER);
        jf.addWindowListener(new java.awt.event.WindowAdapter() {
  	public void windowClosing(java.awt.event.WindowEvent e) {
  	  jf.dispose();
  	  System.exit(0);
  	}
        });
        jf.pack();
        jf.setVisible(true);
        tm.taskStarted();
      } catch (Exception ex) {
        ex.printStackTrace();
        System.err.println(ex.getMessage());
      }
    }
  }
  