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

import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.Action;
import javax.swing.JScrollPane;

import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;

import jp.co.iti.fagot.IZApp;

import jp.co.iti.fagot.util.ZString;
import jp.co.iti.fagot.util.ZDebug;
/**
 * Dialog系共通部品
 * @author  福島康治
 * @version 1.01 2001/01/07
 */
public class UDialog extends JDialog {
	/**
	 * コンストラクタ
	 * @param app     アプリケーション
	 * @param szName  ダイアログ名
	 */
	public UDialog(IZApp app,String szName) {
	super( app.getFrame(),false );

	// アプリケーションの設定
	mApp = app ;
	mDialogName = szName;

	setTitle()			;	// タイトルの表示
	getApp().getResource().loadGeometry(this,mDialogName);	// 位置取得
	}

	/**
	 * モーダル実行
	 */
	public boolean doModal() {
	setModal(true);
	pack();
	show();
	
	// OKボタンが押されたか？
	return isOK() ;
	}

	/**
	 * OKボタンが押されたか？
	 */
	public boolean isOK() {
	return mIsOK;
	}

	//## コンポーネント ###############################################
	/**
     * コンポーネントの設定
     * @param cmp メインコンポーネント
     * @param isScroll スクロールの有無
	 */
	public void setComponent( JComponent cmp, boolean isScroll ) {
	if ( isScroll ) {
		mScroll = new JScrollPane();
		mScroll.setViewportView( cmp );
		mComponent = cmp;
		getContentPane().add("Center",mScroll);
	} else {
		mComponent = cmp;
		getContentPane().add("Center",mComponent);
	}
	}

	/**
     * コンポーネントの取得
	 */
	public JComponent getComponent() {
	return mComponent;
	}

	/**
     * スクロールコンポーネントの取得
	 */
	public JScrollPane getScrollComponent() {
	return mScroll;
	}

	//## アクション ###################################################
	/**
	 * 「OK」ボタン
	 */
	public void onOK() {
	mIsOK = true;
	setVisible(false);
	}

	/**
	 * 「Cancel」ボタン
	 */
	public void onCancel() {
	mIsOK = false;
	setVisible(false);
	}

	/**
	 * 「更新」ボタン
	 */
	public void onUpdate() {
	}

	//## ウィンドウ設定 ###############################################
	/**
     * タイトルの表示,アイコンの表示
	 */
	protected void setTitle() {
	// タイトルの表示
	String szTitle = getApp().getResource().getString(
						"app."+mDialogName+".title" );
	if ( szTitle == null ) {
		szTitle = mDialogName;
	}
	setTitle( szTitle );
	}

	/**
	 * ダイアログの終了
	 * ×ボタンが押されたときに呼び出される。
	 */
	public void hide() {
	// フレームの位置保存
	getApp().getResource().saveGeometry(this,mDialogName);
	super.hide();
	}

	/**
	 * 画面設定
	 * @param szItem ボタン項目
	 */
	public void setControlPanel(String szItem) {
	JPanel control = createControlPanel(szItem);
	getContentPane().add( "South", control );
	}

	/**
	 * 画面設定
	 * @param szItem ボタン項目
	 */
	public JPanel createControlPanel(String szItem) {
	String[] items = ZString.tokenize(szItem) ;
	JPanel panel = new JPanel();
	for( int nIndex=0 ; nIndex<items.length ; nIndex++ ) {
		Action act  = null ;
		JButton btn = null ;
		if ( items[nIndex].equals(OK) ) {
			act = new AbstractAction(OK) {
				    public void actionPerformed(ActionEvent e) { onOK(); }
				};
			mOK     = new JButton( act ) ;
			mOK.setText("OK");
			panel.add( mOK ) ;
		} else if ( items[nIndex].equals(CANCEL) ) {
			act = new AbstractAction(CANCEL) {
				    public void actionPerformed(ActionEvent e) { onCancel(); }
				};
			mCancel     = new JButton( act ) ;
			mCancel.setText("Cancel");
			panel.add( mCancel ) ;
		} else if ( items[nIndex].equals(UPDATE) ) {
			act = new AbstractAction(CANCEL) {
				    public void actionPerformed(ActionEvent e) { onUpdate(); }
				};
			mUpdate    = new JButton( act ) ;
			mUpdate.setText("更新");
			panel.add( mUpdate ) ;
		}
	}
	return panel;
	}

	//## プロパティ取得 ###############################################
	/**
	 * アプリケーションの取得
	 */
	public IZApp getApp() {
	return mApp;
	}

	/**
     * ダイアログ名の取得
	 */
	public String getDialogName() {
	return mDialogName;
	}

	/**
	 * OKボタンの取得
	 */
	public JButton getOKButton() {
	return mOK;
	}

	/**
	 * Cancelボタンの取得
	 */
	public JButton getCancelButton() {
	return mCancel;
	}

	/**
	 * 更新ボタンの取得
	 */
	public JButton getUpdateButton() {
	return mUpdate;
	}

	//## アトリビュート ###############################################
    /**
     * リソース
     */
    public IZApp  mApp ;

    /**
     * ダイアログ名
     */
    public String mDialogName ;

    /**
     * 結果
     */
    public boolean mIsOK = false ;

    /**
     * メインコンポーネント
     */
	protected JComponent mComponent	= null ;

    /**
     * スクロールコンポーネント
     */
	protected JScrollPane mScroll	= null ;

    /**
     * ボタン：OK
     */
    protected JButton    mOK     = null ;

    /**
     * ボタン：CANCEL
     */
    protected JButton    mCancel = null ;

    /**
     * ボタン：UPDATE
     */
	protected JButton	 mUpdate = null ;

    /**
     * ラベル：OK
     */
    static public final String OK     = "ok" ;

    /**
     * ラベル：CANCEL
     */
    static public final String CANCEL = "cancel" ;

    /**
     * ラベル：UPDATE
     */
    static public final String UPDATE = "update" ;
}
