/********************************************************************/
/* Copyright (c) 2019 System fugen G.K. and Yuzi Mizuno          */
/* All rights reserved.                                             */
/********************************************************************/
/********************************************************************/
/**
 * @file ExportTool.h
 * @brief クラス MGExportTool の宣言
 */
#pragma once

#include "Common/CommandStateOwner.h"
#include "Common/SelectState.h"

/// @class MGExportTool ExportTool.h "FileCmd/ExportTool.h"
/// 「選択オブジェクトをエクスポート」のコマンドクラス
class MGExportTool : public MGCommandStateOwner
{
	MGPickObjects m_target;

public:
	explicit MGExportTool(fugenDoc* pDoc);

	virtual MGCommandBase* initial_clone(fugenDoc* pDoc)const;

	virtual bool initiate_tool();

	const MGPickObjects& GetTarget() const;
	void SetTarget(const MGPickObjects& target);
};

/// @class MGExportSelectState
/// MGExport のヘルパークラス
///
/// 仕様書 file-export.doc の状態 [S1] に相当する。
class MGExportSelectState : public MGSelectState
{
public:
	explicit MGExportSelectState(MGExportTool* pOwnerTool);

	virtual bool initiate_tool();

	// Enter キーをトラップする。
	virtual bool OnKeyDown(fugenView* pView, UINT nChar,UINT nRepCnt, UINT nFlags);

private:
	MGExportTool* state_owner()
	{
		return static_cast<MGExportTool*>(get_owner_command());
	}
};

/// @class MGExportSaveState
/// MGExport のヘルパークラス
///
/// 仕様書 file-export.doc の状態 [S2] に相当する。
class MGExportSaveState : public MGCommandBase
{
public:
	explicit MGExportSaveState(MGExportTool* pOwnerTool);

	virtual bool initiate_tool();

private:
	MGExportTool* state_owner()
	{
		return static_cast<MGExportTool*>(get_owner_command());
	}

	bool execute();
};
