/*
 * 作成日: 2007/07/19
 */
package net.sourceforge.swingx;

import java.awt.Component;
import java.awt.Cursor;
import java.lang.reflect.InvocationTargetException;

import javax.swing.Icon;
import javax.swing.SwingUtilities;

public abstract class SxHeavyAction extends SxAction  {
//	private Component comp;
//	private Object param;
	public SxHeavyAction(String name) {
		super(name);
	}
	public SxHeavyAction(String name, Icon icon) {
		super(name, icon);
	}
	/**
	 * マウスカーソルを設定します。
	 * 別スレッドからこのメソッドを呼ぶことを想定しています。
	 * Swingのイベントディスパッチスレッドでなくても構いません。
	 * @param comp
	 * @param cursor
	 */
	protected void setMouseCursor(final Component comp, final Cursor cursor) {
		try {
			SwingUtilities.invokeAndWait(
					new Runnable() { 
						public void run() {
							comp.setCursor(cursor);
						}
					});
		} catch (InterruptedException e) {
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			e.printStackTrace();
		}
	}
//	public void startHeavyProcess(Component comp, Object param) {
//		this.comp = comp;
//		this.param = param;
//		new Thread(this).start();
//	}
//	public void run() {
//		Cursor cursor = comp.getCursor();
//		setMouseCursor(comp, Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
//
//		try {
//			SwingUtilities.invokeAndWait(
//					new Runnable(){
//						public void run(){
//							doHeavyProcess(param);
//						}
//					});
//		} catch (InterruptedException e) {
//			e.printStackTrace();
//		} catch (InvocationTargetException e) {
//			e.printStackTrace();
//		}
//		
//		setMouseCursor(comp, cursor);
//	}
//	/**
//	 * 重い処理はこれを継承して作ります。
//	 */
//	public abstract void doHeavyProcess(Object param);
}
