/*
 * @(#)RidClipAction.java
 *
 * Copyright 2001 Nomura Research Institute, LTD. All rights reserved.
 *
 * RID-X : rid clip action
 *
 * @author  Intelligent Technology Inc.
 * @version 1.01 2001/05/08
 */
package jp.co.nri.rid.action;

import java.awt.event.ActionEvent;

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

import javax.swing.JComponent;

import jp.co.iti.fagot.IZApp;
import jp.co.iti.fagot.action.ZAction;

import jp.co.iti.fagot.gob.GElement;
import jp.co.iti.fagot.gob.GobManager;

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

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

import jp.co.nri.Rid;
/**
 * Ridクリップボード系アクションを定義する
 */
public class RidClipAction extends ZAction {
	/**
	 * 唯一のコンストラクタです。
	 * @param app アプリケーション
	 * @param szAction アクション名
	 */
	public RidClipAction(IZApp app,String szAction) {
    super(app,szAction);
	}

	/**
	 * アクション実行
	 */
	public void doAction(ActionEvent e) {

	String szTitle = ZInstance.prop().getProperty( Rid.PANEL_ACTIVE );
	JComponent active = (JComponent)ZInstance.map().get(szTitle);
	if ( !(active instanceof DocPane) ) {
		// アクティブパネルが描画パネルでない場合はとりあえず動作しない
		return;
	}
	DocPane editor = (DocPane)active;
	editor.getDocument().beginTransaction();

	// ゾーンパネルの選択されているGOBを取得
	if ( getActionName().equals( CUT ) || getActionName().equals( COPY  ) ) {
		Vector gobs = GobManager.getSelectedElement(editor.getPanelId());
		Enumeration elm = gobs.elements();
		while ( elm.hasMoreElements() ) {
			GElement   gob = (GElement)elm.nextElement();
			gob.removeContainer();
//			DocElement dob = (DocElement)gob.getContainer();
//			dob.removeFromDocTree();
		}
	}
	
	editor.getDocument().commit();
	editor.updateGobs();
	editor.repaint();
	}

	/**
	 * UI更新
	 */
	public void update() {
	boolean bState = false;
	String szTitle = ZInstance.prop().getProperty( Rid.PANEL_ACTIVE );
	JComponent active = (JComponent)ZInstance.map().get(szTitle);
	if ( !(active instanceof DocPane) ) {
		// アクティブパネルが描画パネルでない場合は動作しない
		firePropertyChange(ZAction.ENABLED,null,new Boolean(bState));
		return;
	}
	DocPane editor = (DocPane)active;
	Vector gobs = GobManager.getSelectedElement(editor.getPanelId());
	if ( gobs.size() > 0 ) {
		bState = true;
	}
	firePropertyChange(ZAction.ENABLED,null,new Boolean(bState));
	}

	//## アトリビュート ###############################################
    /**
     * アクション名：カット
     */
	static final public String CUT		= "cut" ;

    /**
     * アクション名：コピー
     */
	static final public String COPY		= "copy" ;

    /**
     * アクション名：ペースト
     */
	static final public String PASTE	= "paste" ;
}
