View Javadoc

    1   /*
    2    *  soapUI, copyright (C) 2004-2007 eviware.com
    3    *
    4    *  soapUI is free software; you can redistribute it and/or modify it under the
    5    *  terms of version 2.1 of the GNU Lesser General Public License as published by
    6    *  the Free Software Foundation.
    7    *
    8    *  soapUI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
    9    *  even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    10   *  See the GNU Lesser General Public License for more details at gnu.org.
    11   */
    12
    13  package com.eviware.soapui.impl.wsdl.support;
    14
    15  import javax.swing.ImageIcon;
    16
    17  import com.eviware.soapui.SoapUI;
    18  import com.eviware.soapui.impl.wsdl.AbstractWsdlModelItem;
    19  import com.eviware.soapui.support.UISupport;
    20
    21  /***
    22   * Class to animate the icon of a ModelItem
    23   *
    24   * @author ole.matzura
    25   */
    26
    27  public class ModelItemIconAnimator implements Runnable
    28  {
    29  	private final AbstractWsdlModelItem target;
    30  	private int index = 0;
    31     private boolean stopped = true;
    32     private boolean enabled = true;
    33     private ImageIcon baseIcon;
    34     private ImageIcon [] animateIcons;
    35  	private Thread iconAnimationThread;
    36
    37     public ModelItemIconAnimator(AbstractWsdlModelItem target, String baseIcon, String [] icons )
    38     {
    39        this.target = target;
    40  		this.baseIcon = UISupport.createImageIcon(baseIcon);
    41
    42        animateIcons = new ImageIcon[icons.length];
    43
    44        for( int c = 0; c < icons.length; c++ )
    45        	animateIcons[c] = UISupport.createImageIcon( icons[c] );
    46     }
    47
    48     public void stop()
    49     {
    50        stopped = true;
    51     }
    52
    53     public int getIndex()
    54     {
    55        return index;
    56     }
    57
    58     public boolean isStopped()
    59     {
    60        return stopped;
    61     }
    62
    63     public void start()
    64     {
    65     	if( !enabled || iconAnimationThread != null )
    66     		return;
    67
    68        stopped = false;
    69        iconAnimationThread = new Thread( this, target.getName() + " ModelItemIconAnimator" );
    70  		iconAnimationThread.start();
    71     }
    72
    73     public ImageIcon getBaseIcon()
    74     {
    75     	return baseIcon;
    76     }
    77
    78     public ImageIcon getIcon()
    79     {
    80        if( !isStopped())
    81        {
    82           return animateIcons[getIndex()];
    83        }
    84
    85        return baseIcon;
    86     }
    87
    88     public void run()
    89     {
    90        while( !stopped )
    91        {
    92           try
    93           {
    94           	if( stopped )
    95           		break;
    96
    97              index = index >= animateIcons.length-1 ? 0 : index+1;
    98              target.setIcon( getIcon() );
    99              Thread.sleep( 500 );
    100          }
    101          catch (InterruptedException e)
    102          {
    103             SoapUI.logError( e );
    104          }
    105       }
    106
    107       target.setIcon( getIcon() );
    108       iconAnimationThread = null;
    109    }
    110
    111 	public AbstractWsdlModelItem getTarget()
    112 	{
    113 		return target;
    114 	}
    115
    116 	public boolean isEnabled()
    117 	{
    118 		return enabled;
    119 	}
    120
    121 	public void setEnabled(boolean enabled)
    122 	{
    123 		this.enabled = enabled;
    124 		if( !stopped )
    125 			stopped = enabled;
    126 	}
    127 }