/*
 * @(#)ZAction.java
 *
 * Copyright 2001 by Intelligent Technology Inc. All rights reserved.
 */
package jp.co.iti.fagot.action;

import java.awt.Cursor;
import java.awt.event.ActionEvent;

import java.util.Vector;

import javax.swing.Action;
import javax.swing.JComponent;
import javax.swing.AbstractAction;

import javax.swing.event.PopupMenuListener;
import javax.swing.event.PopupMenuEvent;

import jp.co.iti.fagot.IZApp;

import jp.co.iti.fagot.util.ZDebug;
/**
 * アクションの基底クラスです。
 * このクラスではアクションに次の機能を付加しています。
 * <ul>
 * <li>マウスカーソル形状の変更（うまく動作していない？）
 * <li>UIの変更による関連アクションのUI変更
 * </ul>
 *
 * @author  福島康治
 * @version 1.01 2001/01/07
 */
public class ZAction extends AbstractAction implements PopupMenuListener {
	/**
	 * 唯一のコンストラクタです。
	 * @param app    アプリケーションクラス
	 * @param szName アクション名
	 */
	public ZAction( IZApp app, String szName ) {
	super( szName );
	mApp = app ;
	mActionName  = szName ;
	mIsComponent = (mApp instanceof JComponent) ;
	}

	/**
	 * アクション実行
	 */
	public void actionPerformed(ActionEvent e) {
	if ( mIsComponent) {
		((JComponent)getApp()).setCursor( new Cursor( Cursor.WAIT_CURSOR ) );
	}
	doAction(e);
	if ( mIsComponent) {
		((JComponent)getApp()).setCursor( new Cursor( Cursor. DEFAULT_CURSOR ) );
	}
	}

	/**
	 * アクション実行（通常オーバライドされます）
	 */
	public void doAction(ActionEvent e) {
	}

	/**
	 * UI更新
	 */
	public void update() {
	}

	/**
	 * アプリケーションの設定
	 */
	public void setApp( IZApp app ) {
	mApp = app;
	}

	/**
	 * アプリケーションの取得
	 */
	protected IZApp getApp() {
	return ( mApp );
	}

	/**
	 * アクション名の設定
	 * @param szName アクション名
	 */
	public void setActionName(String szName) {
	putValue(Action.NAME, szName);
	}

	/**
	 * アクション名の取得
	 */
	public String getActionName() {
	return (String)getValue(Action.NAME);
	}

	//## PopupMenuListenerブロック ####################################
	/**
	 * ポップアップメニューが可視になる前に呼び出されます
	 */
	public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
	update();
	}

	/**
	 * ポップアップメニューが不可視になる前に呼び出されます
	 */
	public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
	}

	/**
	 * ポップアップメニューが取り消されたときに呼び出されます
	 */
	public void popupMenuCanceled(PopupMenuEvent e) {
	}

	//## アトリビュート ###############################################
    /**
     * アプリケーション
     */
	private IZApp   mApp         = null;

    /**
     * アクション名
     */
	private String  mActionName  = null;

    /**
     * ターゲットはコンポーネントか？
     */
	private boolean mIsComponent = false;

    /**
     * ラベル変更：ZActionとUIFactory.UIChangedListenerのインターフェイス
     */
	static final public String LABEL	= "label" ;

    /**
     * 有効状態変更：ZActionとUIFactory.UIChangedListenerのインターフェイス
     */
	static final public String ENABLED	= "enabled" ;

    /**
     * チェック変更：ZActionとUIFactory.UIChangedListenerのインターフェイス
     */
	static final public String CHECKED	= "checked" ;

}
