////////////////////////////////////////////////////////////////////////////
// CTaEditProcessingDlg クラスのインタフェース宣言
//
////////////////////////////////////////////////////////////////////////////

#if !defined( TAEDITPROCESSINGDLG_H_INCLUDED_ )
#define TAEDITPROCESSINGDLG_H_INCLUDED_

#include <Xm/XmAll.h>

#include "TaEdit_std.h"
#include "output/gui.h"

#include "ModalDlg.h"

// ワーカースレッドオブジェクトのインタフェース
class CProcesingObj : public CThread
{
public:
	CProcesingObj(){};
	virtual ~CProcesingObj(){};

	// 終了可能か否か
	virtual bool EnableExit() const = 0;

	// 処理の中断を指示
	virtual void Interrupt() = 0;

	// スレッドが確実に終了するまで待ち合わせる
	virtual void WaitThreadTerminate() {
		CThread::Wait();
	};

	// 一定時間だけスレッドの終了を待ち合わせる
	// スレッドが終了したら真を返す
	virtual bool WaitThreadTerminateForTime( int ms ) {
		return CThread::WaitForTime( ms );
	};
};

class CTaEditProcessingDlg : public CProcessingDlg
{
public:
	CTaEditProcessingDlg();
	~CTaEditProcessingDlg();

	// ダイアログを表示・処理を開始する
	// 割り込みをかけられた場合は真を返す
	bool ShowDlg( CProcesingObj *pArgPO, int delay );

protected:
	// OKボタンの押下
	void OnOK( Widget argWgt, XtPointer user_data );

	// 構築
	void OnCreate( Widget argWgt, XtPointer user_data );

	// タイマイベント
	void OnTimer();

	// タイマイベントの受け取り用
	void static TimerEventEntry( XtPointer client_data, XtIntervalId *timer );

	CModalDlg m_ModalDlg;
	CProcesingObj *pProcessingObj;
	bool IsInterrupted;
	XtIntervalId TimerID;
	bool EnableTimer;	// タイマコールバックが設定されているか否か
};

#endif // TAEDITPROCESSINGDLG_H_INCLUDED_

