/*
 * @(#)SnapshotDialog.java
 *
 * Copyright 2001 Nomura Research Institute, LTD. All rights reserved.
 *
 * RID-X : スナップショットダイアログ
 *
 * @author  Intelligent Technology Inc.
 * @version 1.01 2001/03/13
 */
package jp.co.nri.rid.environment;

import java.awt.Insets;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

import jp.co.iti.fagot.ZApp;
import jp.co.iti.fagot.util.ZResource;

/**
 * スナップショットダイアログ
 */

public class SnapshotDialog {

    /** snapshot.commentプロパティの定義      **/
    final static public String SNAPSHOT_COMMENT     = "snapshot.comment";
    /** msg.snapshot.titleプロパティの定義    **/
    final static public String MSG_SNAPSHOT_TITLE   = "msg.snapshot.title";
    /** msg.snapshot.messageプロパティの定義  **/
    final static public String MSG_SNAPSHOT_MESSAGE = "msg.snapshot.message";
    /** msg.snapshot.commenプロパティの定義   **/
    final static public String MSG_SNAPSHOT_COMMENT = "msg.snapshot.comment";

    /** ダイアログ  **/
    protected EnvDialog   gdlg     = null;
    /** パネル      **/
    protected JPanel      mPanel   = null;
    /** コメント    **/
    protected JTextField  mComment = null;

    /**
      * デフォルトコンストラクタ
      */
      public SnapshotDialog() {  }

    /**
      * スナップショットダイアログ生成
      *
      * @return boolean     ボタンの状態true(OK)/false(Cancel)
      */
    public boolean show() {

        ZResource res = ZApp.getTheApp().getResource();

        //ダイアログ生成
        JFrame frame = (JFrame)ZApp.getTheApp().getFrame();
        gdlg = new EnvDialog(frame, res.getString(MSG_SNAPSHOT_TITLE));

        //メインコンポーネント
        mPanel = new JPanel();

        // Layoutを「GridBagLayout」にする
        GridBagLayout mLayout = new GridBagLayout();
        mPanel.setLayout(mLayout);

        // Layout制約の作成
        GridBagConstraints label_gbc = createLabelConstraints();
        GridBagConstraints compo_gbc = createComponentConstraints();

        //メッセージ
        label_gbc.gridy      = 0;
        label_gbc.gridx      = 0;
        label_gbc.gridwidth  = 2;
        label_gbc.gridheight = 1;
        JLabel label = new JLabel(res.getString(MSG_SNAPSHOT_MESSAGE));
        mLayout.setConstraints(label, label_gbc);
        mPanel.add( label );

        //コメント
        label_gbc.gridy      = 1;
        label_gbc.gridx      = 0;
        label_gbc.gridwidth  = 1;
        label_gbc.gridheight = 1;
        label = new JLabel(res.getString(MSG_SNAPSHOT_COMMENT));
        mLayout.setConstraints(label, label_gbc);
        mPanel.add( label );

        //コメントエリア
        compo_gbc.gridy      = 1;
        compo_gbc.gridx      = 1;
        mComment = new JTextField("");
/*        mComment.addActionListener(
            new ActionListener() {
                public void actionPerformed(ActionEvent e) { setComment(); }
            }
        );
*/
        mLayout.setConstraints(mComment, compo_gbc);
        mPanel.add( mComment );

        // [メインコンポーネント]と[OK][CENCEL]
        gdlg.setControlPanel(mPanel);

        //ダイアログを表示する（モーダル）
        gdlg.doModal();

        // [OK]ボタンが押された場合に変更する
        boolean ret = gdlg.isOK();
        if (ret){
            setComment();
        }   
        return ret;
    }

    /**
      * snapshot.commentプロパティにコメントを設定する
      *
      * @return void
      */
    private void setComment(){
        ZResource res = ZApp.getTheApp().getResource();
        res.putString(SNAPSHOT_COMMENT, getComment());
    }

    /**
      * コメントエリアの文字列を取得
      *
      * @return String  コメント文字列
      */
    private String getComment(){
        String szTmp = mComment.getText();
        if ( szTmp == null || szTmp.equals("") ) {  return null;  }
        return szTmp;
    }

    /**
      * ラベル用レイアウト制約の作成
      *
      * @return GridBagConstraints
      */
    private GridBagConstraints createLabelConstraints() {
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.anchor  = GridBagConstraints.NORTHWEST;
        gbc.weightx = 0.0 ;
        gbc.insets  = new Insets(10,10,0,10) ;
        return gbc;
    }

    /**
      * コンポーネント用レイアウト制約の作成
      *
      * @return GridBagConstraints
      */
    private GridBagConstraints createComponentConstraints() {
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.fill    = GridBagConstraints.BOTH;
        gbc.weightx = 1.0 ;
        gbc.insets    = new Insets(10,10,0,10) ;
        return gbc;
    }
}
