/****************************************************************************
[名称]
	SUSIE32 '00IN' Plug-in for Hidden
	HiddenDecoderクラス ヘッダファイル
[履歴]
	2001.04.12	01.00.00	Bitlearner(Toofect Arts)
	2003.02.25	---			したらびあん用に必要な関数を抽出・コメント付加(moralog)
*****************************************************************************/
#if !defined(AFX_HIDDENDECODER_H_INCLUDED_)
#define AFX_HIDDENDECODER_H_INCLUDED_

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000

#include <afxtempl.h>
#include "spi00in.h"

//***************************************************************************
//プラグインから読み込む関数の定義
//***************************************************************************

// SusiePluginのあるフォルダを設定
typedef int (WINAPI *PLUGINFOLDER)( LPSTR );

// plug-In情報取得関数
typedef int(WINAPI *GETPLUGININFO)(int, LPSTR, int);

// サポート有無取得関数
typedef int(WINAPI *ISSUPPORTED)(LPSTR, DWORD );

// ファイル情報取得関数
typedef int(WINAPI *GETPICTUREINFO)(
		LPSTR,
		long,
		unsigned int,
		struct PictureInfo*
	);

// ファイル展開関数
typedef int (WINAPI *GETFILE)(LPSTR, long, LPSTR, unsigned int, FARPROC, long);

// 画像展開関数
typedef int (WINAPI *GETPICTURE)(
		LPTSTR,
		long,
		unsigned int,
		HANDLE*,
		HANDLE*,
		SPI_PROGRESS,
		long
	);

// サムネイル画像展開関数
typedef int (WINAPI *GETPREVIEW)(
		LPTSTR,
		long,
		unsigned int,
		HANDLE*,
		HANDLE*,
		SPI_PROGRESS,
		long
	);


/****************************************************************************
[名称]
	HiddenDecoder
[概要]
	フォルダ内にあるSusie-Pluginを列挙し、適当に選択して画像ファイルを開く。
[備考]
	Hiddenのデコード処理を殺したもの。(moralog)
****************************************************************************/
class CHiddenDecoder  
{
public:
	CHiddenDecoder();
	virtual ~CHiddenDecoder();

public:
// インタフェース関数の実装部分
	void PluginFolder(
		CString		strPluginFolder
	);

	int GetSupportExt(
		CStringArray*	paExtz
	);

	long GetPluginInfoCore(
		int		iRequest,
		LPSTR	pDst,
		int		lDstSize
	);

	BOOL IsSupportedCore(
		char*		pImageFileName,
		DWORD		dw
	);
	int GetPictureInfoCore(
		LPSTR			buf,
		long			len,
		unsigned int	flag,
		struct PictureInfo *lpInfo
	);
	int GetPictureCore(
		LPSTR			buf,
		long			len,
		unsigned int	flag, 
		HANDLE			*pHBInfo,
		HANDLE			*pHBm,
		SPI_PROGRESS	lpPrgressCallback,
		long			lData
	);
	int GetPreviewCore(
		LPSTR			buf,
		long			len,
		unsigned int	flag,
		HANDLE			*pHBInfo,
		HANDLE			*pHBm,
		SPI_PROGRESS	lpPrgressCallback,
		long			lData
	);

protected:
// 些末な関数
	// 使用可能なSpiの列挙
	virtual void EnumlateSpiz();

	// SPIのサポート可能判定
	BOOL IsSupportedPlugIn(
		CString			strPlugInName,
		char*			pImageHeader
	);

	// 画像ヘッダの取得
	BOOL GetImageHeader(
		LPSTR			buf,
		long			len,
		unsigned int	flag,
		char*			pImageHeader,
		long			ImageHeaderSize
	);

protected:
	BOOL			m_bEnumlated;	// プラグイン情報を列挙済みか
	CStringArray	m_aPluginInfoz;
	CStringArray	m_aPlugInNamez;
	CString			m_strPluginFolder;
};

#endif // !defined(AFX_HIDDENDECODER_H_INCLUDED_)
