*2005.09.21更新

1.プラグインに必ず実装しなければいけない関数
2.プラグインがタグの読み書きをサポートする場合に実装しなければいけない関数
3.プラグインに実装できる関数
4.ファイル毎に行うコールバック関数
5.プラグインから呼び出せる関数(API)
6.タグ情報の取得／設定API


/* 1.プラグインに必ず実装しなければいけない関数 */
----------------------------------------------------------------------------
bool WINAPI STEPInit(UINT pID, LPCTSTR szPluginFolder)

	pID		: プラグイン固有ID
	szPluginFolder	: プラグインがインストールされているフォルダ

プラグインが読み込まれた直後に１度だけ呼び出されます。
拡張子の登録やメニューへの追加などに初期化処理を行います。
※API(STEPxxxx関数)を使用する場合は、ここでInitialize()を呼び出してください。

----------------------------------------------------------------------------
void WINAPI STEPFinalize(void)

STEが終了するときに呼び出されます。必要に応じて終了処理を行ってください。
Initialize()を呼び出している場合は、ここでFinalize()を呼び出してください。

----------------------------------------------------------------------------
UINT WINAPI STEPGetAPIVersion(void)

プラグインがサポートしているAPIバージョン(STEP_API_VERSION)を返してください。

----------------------------------------------------------------------------
LPCTSTR WINAPI STEPGetPluginName(void)

プラグインの名称を返してください。
この名称はプラグイン設定ダイアログで使われます。

----------------------------------------------------------------------------
LPCTSTR WINAPI STEPGetPluginInfo(void)

プラグインについての情報を返してください。
この情報はプラグイン設定ダイアログで使われます。

----------------------------------------------------------------------------

/* 2.プラグインがタグの読み書きをサポートする場合に実装しなければいけない関数 */
----------------------------------------------------------------------------
CONTROLTYPE WINAPI
 STEPGetControlType(UINT nFormat, COLUMNTYPE nColumn, bool isEditSIF)

	nFormat		: 対象のファイルフォーマットID
	nColumn		: カラム
	isEditSIF	: SI/ID3v2フィールド編集時は true

ファイルフォーマット毎に現在のカラムが編集可能か、可能な場合に使用するコントロールを返してください。

----------------------------------------------------------------------------
UINT WINAPI
 STEPGetColumnMax(UINT nFormat, COLUMNTYPE nColumn, bool isEditSIF)

	nFormat		: 対象のファイルフォーマットID
	nColumn		: カラム
	isEditSIF	: SI/ID3v2フィールド編集時は true

ファイルフォーマット毎に現在のカラム入力最大桁数を返してください。

----------------------------------------------------------------------------
UINT WINAPI
 STEPLoad(FILE_INFO* fileInfo, LPCTSTR szExt)

	fileInfo	: タグ情報を格納するためのもの
	szExt		: ファイルの拡張子

渡された拡張子、ファイル内容によってプラグインがサポートしているフォーマットである場合は fileInfo に読み込んだタグ情報などを設定してください。
正常に読み込んだ場合は STEP_SUCCESS をエラーの場合は STEP_ERRORを返してください。サポートしていないファイルの場合は STEP_UNKNOWN_FORMAT を返してください。

----------------------------------------------------------------------------
UINT WINAPI
 STEPSave(FILE_INFO*)

	fileInfo	: タグ情報が保存されている

タグ情報によりタグの書き込みを行ってください。
書き込みが正常の場合は STEP_SUCCESS をエラーの場合は STEP_ERRORを返してください。サポートしていないファイルの場合は STEP_UNKNOWN_FORMAT を返してください。
STEP_SUCCESSが返されるとSTEはファイル名の変更処理を行います。

----------------------------------------------------------------------------

/* 3.プラグインに実装できる関数 */
----------------------------------------------------------------------------
LPCTSTR WINAPI
 STEPGetToolTipText(UINT nID)

	nID		: コマンドID

ツールバーに配置したボタンに対するツールチップに表示する内容を返してください。
表示する必要がない場合は NULL を返してください。

----------------------------------------------------------------------------
LPCTSTR WINAPI
 STEPGetStatusMessage(UINT nID)

	nID		: コマンドID

メニューやツールバーに配置したコマンドに対するステータスメッセージを返してください。
メッセージがない場合は NULL を返してください。

----------------------------------------------------------------------------
bool WINAPI
 STEPOnUpdateCommand(UINT nID)

	nID		: コマンドID

コマンドが有効か無効かを返してください。無効(false)の場合、該当するメニュー・ツールバーのボタンは淡色表示されます。

----------------------------------------------------------------------------
bool WINAPI
 STEPOnCommand(UINT nID, HWND hWnd)

	nID		: コマンドID
	hWnd		: 親ウィンドウ

コマンドに対する処理を行います。
処理を行った場合は true を返してください。

----------------------------------------------------------------------------
bool WINAPI
 STEPSupportSIF(UINT nFormat)

	nFormat		: 対象のファイルフォーマットID

SIF入力が行える場合は true を返してください。
FILE_INFO の Get/SetXXXSI() によりタグ情報を操作する場合は true。

----------------------------------------------------------------------------
bool WINAPI
 STEPSupportTrackNumberSIF(UINT nFormat)

	nFormat		: 対象のファイルフォーマットID

SIF入力時にトラック№に数字以外の入力が行える場合は true を返してください。
未定義の場合は STEPSupportSIF() を呼び出します。

----------------------------------------------------------------------------
bool WINAPI
 STEPSupportGenreSIF(UINT nFormat)

	nFormat		: 対象のファイルフォーマットID

SIF入力時にユーザ指定ジャンルや任意のジャンル名を入力できる場合は true を返してください。
未定義の場合は STEPSupportSIF() を呼び出します。

----------------------------------------------------------------------------
void WINAPI
 STEPShowOptionDialog(HWND hWnd)

	hWnd		: 親ウィンドウ

プラグイン設定ダイアログを表示してください。

----------------------------------------------------------------------------
void WINAPI
 STEPOnLoadMenu(HMENU hMenu, UINT nType)

	hMenu		: メニュー
	nType		: メニュータイプ
				MENU_CELL_RANGE
				MENU_FILE_EDIT_OK
				MENU_FILE_RANGE
				MENU_SELECT_FOLDER

コンテキストメニューが表示される直前に呼び出されます。必要に応じてメニュー項目の追加等を行ってください。

----------------------------------------------------------------------------
LPCTSTR WINAPI
 STEPGetColumnName(UINT nFormat, COLUMNTYPE nColumn)

	nFormat		: 対象のファイルフォーマットID
	nColumn		: カラムタイプ

ヘッダーに表示するカラム名を返してください。標準のカラム名でよい場合は NULL を返しください。
なお、STEPHasSpecificColumnName() で true を返すフォーマットのみこの関数が呼び出されます。

----------------------------------------------------------------------------
bool WINAPI
 STEPHasSpecificColumnName(UINT nFormat)

	nFormat		: 対象のファイルフォーマットID

独自のカラム名を使用する場合は true を返してください。
その場合、STEPGetColumnName() でカラム名を返すようにする必要があります。

----------------------------------------------------------------------------
void WINAPI
 STEPInitFileSpecificInfo(FILE_INFO* pFileInfo)

	pFileInfo	: ファイル情報

ファイル固有情報の初期化が必要な場合に呼び出されます。
固有情報をもっている場合は、メモリの開放などを行ってください。

----------------------------------------------------------------------------
bool WINAPI
 STEPOnConvSiFieldToId3tag(FILE_INFO* pFileInfo)

	pFileInfo	: ファイル情報

メニューからSI/ID3v2フィールドからID3tagへ変換が選択されたときに呼び出されます。
STEP本体側で変換処理を実行してもよい場合は true を返してください。
プラグイン側で変換処理を行う場合は  false を返してください。

----------------------------------------------------------------------------

/* 4.ファイル毎に行うコールバック関数 */
----------------------------------------------------------------------------
typedef bool WINAPI
 STEPProcessSelectedFilesCB(FILE_INFO* pFileInfo, int nProcFlag, HWND hWnd)

	pFileInfo	: ファイル情報
	pProcFlag	: 処理フラグ
				0:処理継続(処理中ファイルの上書き)
				1:処理継続(以降全て上書き)
				2:このファイルをスキップ
				3:処理の中止
	hWnd		: 親ウィンドウ

ファイル情報をもとに処理を行い、正常終了した場合は true を返してください。
サポートしていないファイルの場合は、何も処理を行わずに true を返してください。

----------------------------------------------------------------------------

/* 5.プラグインから呼び出せる関数 */
----------------------------------------------------------------------------
STEP_API UINT
 STEPGetCommandID(void)

メニュー・ツールバーの登録するとき必要なコマンドIDを取得します。
このIDは、STEPOnCommand() などで渡されますので、取得したIDと一致する場合に処理を行うようにしてください。

----------------------------------------------------------------------------
STEP_API HMENU
 STEPGetMenu(UINT nType)

	nType		: メニュータイプ
				MENU_FILE
				MENU_EDIT
				MENU_DISP
				MENU_CONV
				MENU_PLAYLIST
				MENU_PLAYER
				MENU_OPTION
				MENU_HELP

指定されたメニュータイプのハンドルを取得します。
このハンドルを使用してメニューへの登録を行ってください。
上記以外のメニューについては STEPOnLoadMenu() を参照してください。

----------------------------------------------------------------------------
STEP_API void
 STEPAddToolBarButton(HBITMAP hBitmap, UINT nID, char* szCommandName)

	hBitmap			: アイコンビットマップハンドル
	nID				: コマンドID
						STEPGetCommandID() で取得
	szCommandName	: コマンド名
						他のプラグインと重ならないように注意

ツールバーへの登録を行います。

----------------------------------------------------------------------------
STEP_API UINT
 STEPKeyAssign(UINT nID, LPCTSTR sComment, LPCTSTR szCommandName);

	nID				: コマンドID
	sComment		: 説明
						オプション設定のキー割り当てで使用
	szCommandName	: コマンド名

メニュー・ツールバーに登録したコマンドに対してキー割り当てを行えるようにします。

----------------------------------------------------------------------------
STEP_API const char*
 STEPGetGenreNameSIF(BYTE byGenre)

	byGenre		: ジャンル番号

ジャンル番号からジャンル名を取得します。
ユーザ指定ジャンルには対応していません。

----------------------------------------------------------------------------
STEP_API BYTE
 STEPGetGenreCode(const char* szGenre)

	szGenre		: ジャンル名

ジャンル名に対応するジャンル番号を取得します。

----------------------------------------------------------------------------
STEP_API bool
 STEPIsUserGenre(const char* szGenre)

	szGenre		: ジャンル名

ジャンル名がユーザ指定ジャンルである場合は true を返します。

----------------------------------------------------------------------------
STEP_API int
 STEPGetNumericTrackNumber(const char* szTrackNumber, char* szNumericNumber, int size)

	szTrackNumber	: トラック番号
	szNumericNumber	: 結果を格納する領域
	size			: szNummericNumberのサイズ

トラック番号を数値に変換します。数字以外が含まれている場合は前後の数字が使われます。
数値化したときの実際の長さを返します。szNumericNumberのサイズが足りていない場合は格納された
サイズより大きい値が帰ります。
 ex."1/10" → "01"、"DISC1-02" → "02"

----------------------------------------------------------------------------
STEP_API int
 STEPGetIntegerTrackNumber(const char* szTrackNumber)

	szTrackNumber	: トラック番号

トラック番号を数値に変換します。数字以外が含まれている場合は前後の数字が使われます。
 ex."1/10" → 1、"DISC1-02" → 2

----------------------------------------------------------------------------
STEP_API bool
 STEPIsNumeric(const char* szText)

	szText	: 文字列

文字列がすべて数字の場合は true を返します。

----------------------------------------------------------------------------
STEP_API void
 STEPConvSIFieldToID3tag(FILE_INFO* pFileInfo)

	fileInfo	: タグ情報が保存されている

SI/ID3v2フィールドのタグ情報をID3tagフィールドにコピーします。

----------------------------------------------------------------------------
STEP_API void
 STEPProcessSelectedFiles(LPCTSTR szTitle, STEPProcessSelectedFilesCB func)

	szTitle		: プログレスダイアログに表示するタイトル
	func		: コールバック関数

現在選択状態となっているファイルに対して指定された処理（コールバック関数）を行います。

----------------------------------------------------------------------------
STEP_API void
 STEPProcessSelectedFilesForUpdate(LPCTSTR szTitle, STEPProcessSelectedFilesCB func);

	szTitle		: プログレスダイアログに表示するタイトル
	func		: コールバック関数

現在選択状態となっているファイルに対して指定された処理（コールバック関数）を行います。
ファイルの更新を行う場合はこちらを使用してください。

----------------------------------------------------------------------------
STEP_API bool
 STEPIsRangeSelected(void)

範囲選択（セル単位）中の場合は true を返します。

----------------------------------------------------------------------------
STEP_API int
 STEPGetSelectedCount(void)

選択状態にあるファイル数を返します。

----------------------------------------------------------------------------
STEP_API bool
 STEPIsCurrentCellEditOK(void)

フォーカスのあるセルが編集可能の場合は true を返します。

----------------------------------------------------------------------------
STEP_API bool
 STEPGetSelectedRange(int* sx, int* sy, int* ex, int* ey)

	sx		: 開始カラム
	sy		: 開始行
	ex		: 終了カラム
	ey		: 終了行

範囲選択されている範囲を取得します。
範囲選択中でない場合は false を返します。

----------------------------------------------------------------------------
STEP_API void
 STEPChangeSubItemText(int nItem, int nColumn, LPCTSTR szText)

	nItem		: アイテム位置（行）
	nColumn		: カラム位置
	szText		: 変更文字列

指定されたセルの内容を変更します。

----------------------------------------------------------------------------
STEP_API void
 STEPGetFileInfo(int nItem, FILE_INFO* info)

	nItem		: アイテム位置（行）
	fileInfo	: タグ情報が保存されている

指定された位置のタグ情報を取得します。

----------------------------------------------------------------------------
STEP_API void
 STEPInitDataSIF(FILE_INFO* info)

	fileInfo	: タグ情報が保存されている

指定されたタグ情報のSIフィールドをクリアします。

----------------------------------------------------------------------------
STEP_API void
 STEPInitDataID3(FILE_INFO* info)

	fileInfo	: タグ情報が保存されている

指定されたタグ情報のID3フィールドをクリアします。

----------------------------------------------------------------------------
STEP_API void
 STEPInitData(FILE_INFO* info)

	fileInfo	: タグ情報が保存されている

指定されたタグ情報をすべてクリアします。演奏時間/ファイル名などもクリアします。

----------------------------------------------------------------------------
STEP_API bool
 STEPWriteTag(FILE_INFO* pFileInfo)

	fileInfo	: タグ情報が保存されている

タグの更新を行います。

----------------------------------------------------------------------------
STEP_API bool
 STEPUpdateCellInfo(void)

カラム名・入力最大桁数などの情報を更新します。
設定が変更された場合に呼び出します。

----------------------------------------------------------------------------

/* 6.タグ情報の取得／設定 */
※FILE_INFO内のデータ操作には以下のAPIを使用してください。

LPCTSTR GetFullPath(FILE_INFO* info)
LPCTSTR GetFileName(FILE_INFO* info)
LPCTSTR GetFilePath(FILE_INFO* info)
LPCTSTR GetVisualFormat(FILE_INFO* info)
LPCTSTR GetAudioFormat(FILE_INFO* info)
LPCTSTR GetTrackName(FILE_INFO* info)
LPCTSTR GetArtistName(FILE_INFO* info)
LPCTSTR GetAlbumName(FILE_INFO* info)
LPCTSTR GetComment(FILE_INFO* info)
LPCTSTR GetYear(FILE_INFO* info)
LPCTSTR GetTrackNumber(FILE_INFO* info)
LPCTSTR GetGenre(FILE_INFO* info)
LPCTSTR GetTrackNameSI(FILE_INFO* info)
LPCTSTR GetArtistNameSI(FILE_INFO* info)
LPCTSTR GetAlbumNameSI(FILE_INFO* info)
LPCTSTR GetCommentSI(FILE_INFO* info)
LPCTSTR GetYearSI(FILE_INFO* info)
LPCTSTR GetGenreSI(FILE_INFO* info)
LPCTSTR GetCopyrightSI(FILE_INFO* info)
LPCTSTR GetEngineerSI(FILE_INFO* info)
LPCTSTR GetSourceSI(FILE_INFO* info)
LPCTSTR GetSoftwareSI(FILE_INFO* info)
LPCTSTR GetKeywordSI(FILE_INFO* info)
LPCTSTR GetTechnicianSI(FILE_INFO* info)
LPCTSTR GetLyricSI(FILE_INFO* info)
LPCTSTR GetCommissionSI(FILE_INFO* info)
LPCTSTR GetComposerSI(FILE_INFO* info)
LPCTSTR GetOrigArtistSI(FILE_INFO* info)
LPCTSTR GetURLSI(FILE_INFO* info)
LPCTSTR GetEncodest(FILE_INFO* info)
LPCTSTR GetOther(FILE_INFO* info)
LPCTSTR GetFileTypeName(FILE_INFO* info)
void SetFullPathName(FILE_INFO* info, LPCTSTR szValue)
void SetFileName(FILE_INFO* info, LPCTSTR szValue)
void SetFilePath(FILE_INFO* info, LPCTSTR szValue)
void SetVisualFormat(FILE_INFO* info, LPCTSTR szValue)
void SetAudioFormat(FILE_INFO* info, LPCTSTR szValue)
void SetTrackName(FILE_INFO* info, LPCTSTR szValue)
void SetArtistName(FILE_INFO* info, LPCTSTR szValue)
void SetAlbumName(FILE_INFO* info, LPCTSTR szValue)
void SetComment(FILE_INFO* info, LPCTSTR szValue)
void SetYear(FILE_INFO* info, LPCTSTR szValue)
void SetTrackNumber(FILE_INFO* info, LPCTSTR szValue)
void SetGenre(FILE_INFO* info, LPCTSTR szValue)
void SetTrackNameSI(FILE_INFO* info, LPCTSTR szValue)
void SetArtistNameSI(FILE_INFO* info, LPCTSTR szValue)
void SetAlbumNameSI(FILE_INFO* info, LPCTSTR szValue)
void SetCommentSI(FILE_INFO* info, LPCTSTR szValue)
void SetYearSI(FILE_INFO* info, LPCTSTR szValue)
void SetGenreSI(FILE_INFO* info, LPCTSTR szValue)
void SetCopyrightSI(FILE_INFO* info, LPCTSTR szValue)
void SetEngineerSI(FILE_INFO* info, LPCTSTR szValue)
void SetSourceSI(FILE_INFO* info, LPCTSTR szValue)
void SetSoftwareSI(FILE_INFO* info, LPCTSTR szValue)
void SetKeywordSI(FILE_INFO* info, LPCTSTR szValue)
void SetTechnicianSI(FILE_INFO* info, LPCTSTR szValue)
void SetLyricSI(FILE_INFO* info, LPCTSTR szValue)
void SetCommissionSI(FILE_INFO* info, LPCTSTR szValue)
void SetComposerSI(FILE_INFO* info, LPCTSTR szValue)
void SetOrigArtistSI(FILE_INFO* info, LPCTSTR szValue)
void SetURLSI(FILE_INFO* info, LPCTSTR szValue)
void SetEncodest(FILE_INFO* info, LPCTSTR szValue)
void SetOther(FILE_INFO* info, LPCTSTR szValue)
void SetFileTypeName(FILE_INFO* info, LPCTSTR szValue)

bool isModify(FILE_INFO*)
void SetModifyFlag(FILE_INFO* pInfo, bool bModify)
bool isChecked(FILE_INFO* pInfo)
void SetCheckFlag(FILE_INFO* pInfo, bool bCheck)
bool isExistLyricFile(FILE_INFO* pInfo)
void SetExistLyricFile(FILE_INFO* pInfo, bool bExist)
long GetFileSize(FILE_INFO* pInfo)
void SetFileSize(FILE_INFO* pInfo, long size)
UINT GetFormat(FILE_INFO* pInfo)
void SetFormat(FILE_INFO* pInfo, UINT nFormat)
int  GetPlayTime(FILE_INFO* pInfo)
void SetPlayTime(FILE_INFO* pInfo, int nPlayTime)
BYTE GetBTrackNumber(FILE_INFO* pInfo)
void SetBTrackNumber(FILE_INFO* pInfo, BYTE nTrackNumber)
BYTE GetBGenre(FILE_INFO* pInfo)
void SetBGenre(FILE_INFO* pInfo, BYTE nGenre)
void* GetFileSpecificInfo(FILE_INFO* pInfo)
void SetFileSpecificInfo(FILE_INFO* pInfo, void* info)

----------------------------------------------------------------------------
