root/www.mail/JavaPopWeb/src/jp/ac/nime/computer/mailsim/SpoolStatusCanvas.java

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. SpoolStatusCanvas
  2. paint
  3. update
  4. drawAll
  5. drawBack
  6. drawQueue
  7. start
  8. run
  9. 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;
        }
}

/* [<][>][^][v][top][bottom][index][help] */