/*
 * @(#)RidMapTitlePane.java
 *
 * Copyright 2001 Nomura Research Institute, LTD. All rights reserved.
 *
 * RID-X : Map Title Pane
 *
 * @author  Intelligent Technology Inc.
 * @version 1.01 2001/11/07
 */
package jp.co.nri.rid;

import java.awt.Dimension;
import java.awt.FlowLayout;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

import java.io.File;

import java.util.Enumeration;
import java.util.Vector;

import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JComponent;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JComboBox;
import javax.swing.JPanel;

import jp.co.iti.fagot.fob.xml.XElementNS;

import jp.co.iti.fagot.doc.DocDocument;
import jp.co.iti.fagot.doc.DocElement;
import jp.co.iti.fagot.doc.DocPane;

import jp.co.iti.fagot.util.ZInstance;
import jp.co.iti.fagot.util.ZString;
import jp.co.iti.fagot.util.ZDebug;

import jp.co.nri.Rid;

import jp.co.nri.rid.doc.RidDocumentSite;
import jp.co.nri.rid.doc.RidElementPage;
/**
 * Rid Mapタブシート タイトルパネル
 */
public class RidMapTitlePane extends JPanel {

	/**
	 * コンストラクタ
	 */
	public RidMapTitlePane(){
	setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
	add( new JButton("dummy") );
	}

	//## オーバライド #################################################
	/**
	 * コンポーネントに最適なサイズの取得
	 */
	public Dimension getPreferredSize() {
	Dimension dim = super.getPreferredSize();
	dim.height = 25;
	return dim;
	}

	//## UI ###########################################################
	/**
	 * 画面更新
	 */
	public void restract() {
//	ZDebug.printStack();
	removeAll();
//	setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
	setLayout( new BoxLayout( this, BoxLayout.X_AXIS ) );

	// マップパネルを取得
	DocPane editor = (DocPane)ZInstance.map().get( Rid.PANEL_MAP );

	//
	RidDocumentSite doc = (RidDocumentSite)editor.getDocument();
	RidElementPage  top = doc.getTopPage(editor.getPanelId());

	if ( top != null ) {
		RidElementPage defaultTop = doc.getDefaultTopPage(editor.getPanelId());
		// 現在の中心がデフォルトトップであれば、MyPage
		if ( top == defaultTop ) {
			add( createMyPageInfo( top ) );
		} else {
			add( createPageInfo( defaultTop ) );
			add( createMyPageInfo( top ) );
		}
	}

	// 余白の挿入
	add( Box.createVerticalStrut(5) );

	// シナリオラベル
	add( new JLabel("Scenario:") );

	// シナリオラベル
	JComboBox combo = new JComboBox() {
		// コンポーネントに最適な幅の最小値を200に設定
		public Dimension getPreferredSize() {
		Dimension dim = super.getPreferredSize();
		dim.width = Math.max(dim.width,100);
		return dim;
		}
	};

	// シナリオ一覧の登録
	combo.addItem( "" );
	XElementNS scene = (XElementNS)((XElementNS)doc.getDocumentElement()).findChildElement(".Scenario",null);
	Vector vec = scene.findChildElements("ScenarioUnit");
//	ZDebug.trace("ScenarioCount:"+vec.size());
	Enumeration elm = vec.elements();
	while ( elm.hasMoreElements() ) {
		XElementNS scenario = (XElementNS)elm.nextElement();
		String szName = scenario.getAttribute("Name");
//		ZDebug.trace("addItem:"+szName);
		combo.addItem( szName );
	}
	add( combo );

	// カレントシナリオの選択
	String szName = doc.getScenarioName();
//	ZDebug.trace("選択:"+szName);
	combo.setSelectedItem( szName );

	// リスナーの登録
	RMapScenarioComboAction act = new RMapScenarioComboAction();
	combo.addActionListener( act );

	validate();
	repaint();
	}

	/**
	 * 自分のゾーンのラベル
	 * @param elm rootゾーン
	 */
	public JComponent createMyPageInfo(DocElement elm) {
	JLabel label = new JLabel(elm.getAttribute("Name"));
//	ZDebug.trace("Top:"+elm.getAttribute("Name"));
	return label;
	}

	/**
	 * ジャンプボタンの作成
	 * @param elm ジャンプ先のページ
	 */
	public JComponent createPageInfo(RidElementPage elm) {
	JButton btn = new JButton(elm.getAttribute("Name"));
	RMapTitleBtnAction act = new RMapTitleBtnAction(elm);
	btn.addActionListener( act ) ;
	return btn;
	}

	//## アクションリスナー ###########################################
	/**
	 * ジャンプボタンのアクションリスナー
	 */
	protected class RMapTitleBtnAction implements ActionListener {
	/**
	 * コンストラクタ
	 * @param zone ジャンプ先のページ
	 */
	public RMapTitleBtnAction( RidElementPage page ) {
	mPage = page;
	}

	/**
	 * アクション
	 */
	public void actionPerformed(ActionEvent e) {
	// サイトドキュメントのルートを選択されたゾーンに設定
	DocPane editor = (DocPane)ZInstance.map().get(Rid.PANEL_MAP);
	mPage.changeTop( editor );
	}

	/**
	 * ジャンプ先のページ
	 */
	protected RidElementPage mPage;
	}

	//## アクションリスナー ###########################################
	/**
	 * シナリオコンボボックスのアクションリスナー
	 */
	protected class RMapScenarioComboAction implements ActionListener {
	/**
	 * コンストラクタ
	 * @param zone ジャンプ先のページ
	 */
	public RMapScenarioComboAction() {
	}

	/**
	 * アクション
	 */
	public void actionPerformed(ActionEvent e) {
	// シナリオ変更
	DocPane editor = (DocPane)ZInstance.map().get(Rid.PANEL_MAP);

	JComboBox combo = (JComboBox)e.getSource();
	String szName = (String)combo.getSelectedItem();
	ZDebug.trace("シナリオ選択："+szName);
	
	RidDocumentSite doc = (RidDocumentSite)editor.getDocument();
	doc.beginTransaction();
	doc.setScenarioName( szName );
	doc.commit();
	}
	}
	//## アトリビュート################################################
}
