/* [<][>][^][v][top][bottom][index][help] */
DEFINITIONS
This source file includes following definitions.
- SpoolStatusCanvas
- paint
- update
- drawAll
- drawBack
- drawQueue
- start
- run
- stop
package jp.ac.nime.computer.mailsim;
import java.awt.*;
import java.util.*;
import java.awt.event.*;
import jp.ac.nime.computer.*;
/**
* MAILシミュレータ スプール状態描画クラス
*
* @version 1.00 2003/03/31
* @author Toshikazu Matsumoto Avion Corp.
*/
public class SpoolStatusCanvas extends Canvas implements Runnable
{
private Component m_Parent; //親コンポーネント
private MailSim m_Applet; //メインアプレットクラス
private MailServItem m_Item; //呼出元サーバーオブジェクトクラス
private Image m_imOff =null; //オフスクリーンイメージ
private Thread m_Thread =null; //スレッド
private int m_nOffset =0; //描画オフセット
/**
* クラスコンストラクタ
* @param parent 親コンポーネント
* @param applet メインアプレットクラス
* @param item 呼出元サーバーオブジェクトクラス
*/
public SpoolStatusCanvas(Component parent,MailSim applet,MailServItem item)
{
this.m_Parent=parent;
this.m_Applet=applet;
this.m_Item =item;
this.start();
}
/**
* グラフィックの描画(オフスクリーンからメインスクリーンへの画像コピー)
* @param g 描画グラフィック領域
*/
public void paint(Graphics g)
{
if(this.m_imOff==null)
{
Dimension d=this.getSize();
this.m_imOff=this.m_Parent.createImage(d.width,d.height);
}
this.drawAll();
g.drawImage(this.m_imOff,0,0,this.m_Parent);
this.m_imOff.flush();
}
/**
* グラフィック再描画
* @param g 描画グラフィック領域
*/
public void update(Graphics g)
{
this.drawAll();
this.paint(g);
}
/**
* オフスクリーンイメージへの各グラフィックの描画
*/
private void drawAll()
{
Graphics g=this.m_imOff.getGraphics();
this.drawBack(g);
this.drawQueue(g);
}
/**
* 背景画像の描画
* @param g 描画グラフィック領域
*/
private void drawBack(Graphics g)
{
g.setColor(new Color(57,109,165));
g.fillRect(0,0,this.getSize().width,this.getSize().height);
g.setColor(Color.black);
for(int i=0;i<5;i++)
{
g.drawRect(100,20+(i*63),130,63);
}
}
/**
* 移動するメール画像の描画
* @param g 描画グラフィック領域
*/
private void drawQueue(Graphics g)
{
Vector vcMail=this.m_Item.getSpool();
for(int i=0;i<vcMail.size();i++)
{
MailDataObject objMail=(MailDataObject)vcMail.elementAt(i);
int nProcess=objMail.getProcess();
int nStatus=objMail.getStatus();
int nPos=4-i;
switch(nStatus)
{
case MailDataObject.MAIL_STATUS_SPOOL:
g.drawImage(objMail.getIcon(),120,30+nPos*63,this.m_Parent);
break;
case MailDataObject.MAIL_STATUS_REACH_SPOOL:
g.drawImage(objMail.getIcon(),(int)((float)(120*nProcess)/100),nPos*63+30,this.m_Parent);
break;
case MailDataObject.MAIL_STATUS_TELL_SPOOL:
g.drawImage(objMail.getIcon(),(int)(120-(float)(120*nProcess)/100),nPos*63+30,this.m_Parent);
break;
}
}
}
/**
* スレッドの開始、生成
*/
public void start()
{
if(this.m_Thread==null)
{
this.m_Thread=new Thread(this);
}
this.m_Thread.start();
}
/**
* スレッドの実行
*/
public void run()
{
while(this.m_Thread!=null)
{
Vector vcMail=this.m_Item.getSpool();
for(int i=0;i<vcMail.size();i++)
{
MailDataObject objMail=(MailDataObject)vcMail.elementAt(i);
int nProcess=objMail.getProcess();
int nStatus=objMail.getStatus();
switch(nStatus)
{
case MailDataObject.MAIL_STATUS_SPOOL:
break;
case MailDataObject.MAIL_STATUS_REACH_SPOOL:
if(nProcess>=100)
{
//objMail.stopThread();
objMail.setStatus(nStatus+1);
objMail.setProcess(1);
this.m_Item.setSpool(objMail,i);
continue;
}
break;
case MailDataObject.MAIL_STATUS_TELL_SPOOL:
if(nProcess>=100)
{
objMail.setStatus(0);
objMail.setProcess(1);
this.m_Item.deSpool();
this.m_Applet.addPacket(objMail);
continue;
}
break;
}
}
try
{
this.m_Thread.sleep(100);
}
catch(InterruptedException e)
{
this.m_Thread=null;
}
this.repaint();
}
}
/**
* スレッドの停止
*/
public void stop()
{
this.m_Thread=null;
}
}