// spconvDlg.h : ヘッダー ファイル
//
#include "CsvEntry.h"

/////////////////////////////////////////////////////////////////////////////
// CSpconvDlg dialog

#define SPIMAGE_X 12		// SP画像左上
#define SPIMAGE_Y 12
#define PALIMAGE_X 280		// パレット画像左上
#define PALIMAGE_Y 140
#define TXIMAGE_X 420		// テクスチャ画像左上
#define TXIMAGE_Y 12

class Cfbmp;

class CSpconvDlg : public CDialog
{
// 構築
public:
	CSpconvDlg(CWnd* pParent = NULL);	// 標準のコンストラクタ

// Dialog Data
	//{{AFX_DATA(CSpconvDlg)
	enum { IDD = IDD_SPCONV_DIALOG };
	CString	m_BmpFile;
	CString	m_DirName;
	CString	m_MainName;
	CString	m_PalFile;
	CString	m_SpFile;
	//}}AFX_DATA

	// ClassWizard は仮想関数を生成しオーバーライドします。
	//{{AFX_VIRTUAL(CSpconvDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV のサポート
	//}}AFX_VIRTUAL

// インプリメンテーション
protected:
	HICON m_hIcon;

	// 生成されたメッセージ マップ関数
	//{{AFX_MSG(CSpconvDlg)
	virtual BOOL OnInitDialog();
	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
	virtual void OnOK();
	afx_msg void OnAutosw();
	afx_msg void OnSpref();
	afx_msg void OnPalref();
	afx_msg void OnBmpref();
	afx_msg void OnClear();
	afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
public:
	// <<<<< 属性 >>>>>
	//
	// 状態値
	int SelectedPalBlock;				// 選択中のパレットブロック

	// オブジェクト
	Cfbmp* palimage;				// ＰＡＬのイメージを保持するビットマップオブジェクト
	Cfbmp* spimage;				//  ＳＰ のイメージを保持するビットマップオブジェクト
	Cfbmp* tximage;					// テクスチャ向けビットマップオブジェクト

	// 画像・パレットデータ
	RGBQUAD rgb_data[16][16];				// pal_dataから変換したRGB値の配列を保持
	char sp_data[16][16][128];				// スプライトのベタセーブデータを保持
	WORD pal_data[16][16];					// パレットのベタセーブデータを保持
	CArray<CsvEntry> m_operationCsv;		// 操作記録CSV
	//
	// <<<<< メソッド >>>>>
	//
	// 初期化
	void Initialize();
	void Release();

	// メソッド
	CString MakeFullPathName(CString& dirname, CString& fname);
	void MakeRGBTable();

	// 画像再構築
	void MakePalImage();
	void MakeSpImage();
	void InitializeTextureImage();
	void MakeTexturePalet();
	void MakeCsvList();
	void MakeAllImages();
	void SpToBmp(int spDefIndex, int palIndex);
	void DrawScreenAll();

	// SPパターン転送
	void TranslateBmpToSp(int idxFrom, int idxTo);
	void TranslateSpToBmp(int idxFrom, int idxTo, int spAssumedPal);

	// ファイル操作
	BOOL doSave(LPCTSTR filename, Cfbmp* pBmp);
	BOOL doSaveStencil(LPCTSTR filename, Cfbmp* pBmp);
	BOOL doSave256(LPCTSTR filename, Cfbmp* pBmp);
	void SaveBmp(CString fname, BOOL indexedColor);

	// スクリプト
	CRes ExecOperationCsv(CArray<CsvEntry> &operationCsv, CString basePath);
	CRes ExecOperationEntry(CsvEntry& entry, CString basePath);
public:
	//
	// <<<<< イベントハンドラ >>>>>
	//
	// 入力：SP
	afx_msg void OnBnClickedButtonReadPal();		// パレット読み込みボタン
	afx_msg void OnBnClickedButtonReadSp();			// SP読み込みボタン
	//
	// 出力：SP
	afx_msg void OnBnClickedDirref();				// BMP出力先ディレクトリ参照
	afx_msg void OnBnClickedButtonConvToSp();
	//
	// 入力：BMP
	afx_msg void OnBnClickedButtonBmpFilenameRef();	// BMP画像参照ボタン
	afx_msg void OnBnClickedButtonBmpSpRead();		// SP読み込みボタン
	afx_msg void OnBnClickedButtonLoadbmp();		// PAL読み込みボタン
	//
	// 出力：BMP
	afx_msg void OnBnClickedButtonSpToBmp();
	//
	// Script
	afx_msg void OnBnClickedButtonRefBasepath();	// ベースパス参照
	//
	// 全般
	afx_msg void OnClose();							// 閉じる
	afx_msg void OnBnClickedCancel();				// 終了ボタン
	//
	// <<<<< DDX変数 >>>>>
	//
	// 入力：SP
	CString m_spReadTo;
	int m_spAssumedPal;
	int m_spReadCount;
	//
	// 入力：PAL
	int m_palReadTo;
	int m_palReadCount;
	//
	// 入力：BMP
	int m_spReadOffset;
	int m_palReadOffset;
	CString m_bmpBmpFilename;
	int m_bmpSpSizeX;
	int m_bmpSpSizeY;
	int m_bmpSpFrameCount;
	CString m_bmpSpReadTo;
	int m_bmpSpReadOffset;
	int m_bmpPalReadTo;
	int m_bmpPalReadOffset;
	int m_bmpPalReadCount;
	BOOL m_bmpPalShift;
	//
	// Scripts
	CString m_csvList;
	CString m_scriptBasePath;
	//
	// コントロール
	CButton m_loadBmpButton;
	CButton m_convToSpButton;
	//
	// 未整理
	afx_msg void OnBnClickedButtonSpSaveSpRef();
	CString m_spSaveSpFilename;
	CString m_spSaveSpFrom;
	int m_spSaveSpCount;
	CString m_spSavePalFilename;
	int m_spSavePalFrom;
	int m_spSavePalCount;
	afx_msg void OnBnClickedButtonSpSavePalRef();
	BOOL m_bmpSaveAutoSw;
	afx_msg void OnBnClickedButtonBmpSaveFullcolorBmp();
	afx_msg void OnBnClickedButtonScriptFilenameRef();
	CString m_scriptFilename;
	afx_msg void OnBnClickedButtonSaveCsv();
	afx_msg void OnBnClickedButtonReadCsv();

public:
	//
	// ReadPaletを実行
	CRes ExecReadPalet(CString palFile, int palReadTo, int palReadOffset, int palReadCount, CString basePath);

	// ReadSp
	CRes ExecReadSp(CString spFile, int spReadToDec, int spReadOffset, int spReadCount, int spAssumedPal, CString basePath);

	// ReadBmpPal
	CRes ExecReadBmpPal(CString bmpBmpFilename, int bmpPalReadTo, int bmpPalReadOffset, int bmpPalReadCount, CString basePath);

	// ReadBmpSp
	CRes ExecReadBmpSp(
		CString bmpBmpFilename, int bmpSpSizeX, int bmpSpSizeY, int bmpSpFrameCount,
		int bmpSpReadTo, int bmpSpReadOffset, int bmpPalReadTo, int bmpPalReadOffset, int bmpPalReadCount,
		BOOL bmpPalShift, CString basePath
	);

	// SaveSpPal
	CRes ExecSaveSpPal(CString spSaveSpFilename, int spSaveSpFrom, int spSaveSpCount
		, CString spSavePalFilename, int spSavePalFrom, int spSavePalCount, CString basePath);

	// SaveBmpCnv
	CRes ExecSaveBmpCnv(CString bmpFile, CString dirName, CString mainName, BOOL bmpSaveAutoSw, CString basePath, BOOL indexedColor, int selectedPalBlock);

	// SaveBmpFul
	CRes ExecSaveBmpFul(CString bmpFile, CString basePath);

	//
	CString JoinBasePath(CString filename, CString basePath);
	afx_msg void OnBnClickedButtonExecCsv();
	afx_msg void OnEnKillfocusEditCsvlist();
	afx_msg void OnBnClickedButtonSave256();
};
