////////////////////////////////////////////////////////////////////////////
// CTaEditFileSelDlg クラスのインプリメンテーション
//
////////////////////////////////////////////////////////////////////////////

#include "TaEditFileSelDlg.h"
#include <Xm/XmAll.h>
#include <Xm/FileSBP.h>
#include "TaEditShell.h"

////////////////////////////////////////////////////////////////////////////
// 構築/破棄
////////////////////////////////////////////////////////////////////////////

CTaEditFileSelDlg::CTaEditFileSelDlg()
{
	IsSelected = false;
	SelectedFile = "";
}

CTaEditFileSelDlg::~CTaEditFileSelDlg()
{

}

////////////////////////////////////////////////////////////////////////////
// メソッド
////////////////////////////////////////////////////////////////////////////

// 閉じられる
void CTaEditFileSelDlg::OnClose( Widget argWgt, XtPointer user_data )
{
	OnCancel( argWgt, user_data );
}

// キャンセルボタンの押下
void CTaEditFileSelDlg::OnCancel( Widget argWgt, XtPointer user_data )
{
	m_ModalDlg.ExitModal();	// モーダルの終了
	IsSelected = false;	// 処理が中止された
	SelectedFile = "";
}

// ＯＫボタンの押下
void CTaEditFileSelDlg::OnOK( Widget argWgt, XtPointer user_data )
{
	char *pFileName;
	char *pDirName;
	string strFileName;
	VClsPtr< CConfigInfo > pConf = m_TaEditShell->GetConfigInfo();

	// ディレクトリ名を取得
	if ( !XmStringGetLtoR( FS_Directory( m_FileSelectDlg ), XmFONTLIST_DEFAULT_TAG, &pDirName ) ) {
		m_TaEditShell->ShowErrorMsgBox( pConf->RefUnexpectedErrorMsg() );
		return ;
	}

	// ファイル名を取得
	pFileName = XmTextGetString( m_FileNameText );
	strFileName = pFileName;

	// フルパスのファイル名を構築
	SelectedFile = pDirName;
	SelectedFile += strFileName;

	XtFree( pFileName );
	XtFree( pDirName );

	if ( strFileName.empty() ) {
		m_TaEditShell->ShowErrorMsgBox( pConf->RefFileNameIsNotInputtedErrorMsg() );
		return ;
	}

	m_ModalDlg.ExitModal();	// モーダルの終了
	IsSelected = true;
}

// 表示される
void CTaEditFileSelDlg::OnShow( Widget argWgt, XtPointer user_data )
{
	XmFileSelectionDoSearch( m_FileSelectDlg, CCompoundStr( "*" ) );
}

// ダイアログのタイトルを設定
void CTaEditFileSelDlg::SetDlgTitle( const CCompoundStr &rStr ) const
{
	int ac = 0;
	Arg al[2];

	XtSetArg( al[ac], XmNdialogTitle, rStr.GetStr() ); ac++;
	XtSetValues( m_FileSelectDlg, al, ac );
}

// ダイアログを表示
// 処理に成功したか否かを返す
bool CTaEditFileSelDlg::ShowDlg( string *pSelectedFile )
{
	SelectedFile = "";

	// モーダルダイアログの表示
	m_ModalDlg.DoModal( m_FileSelectDlg );

	(*pSelectedFile) = SelectedFile;
	return IsSelected;
}

// フルパスかもしれないファイル名から、ファイル名のみを取り出す。
const char* CTaEditFileSelDlg::FullPathToFileName( const char *pFileName ) const
{
	int slen = strlen( pFileName );
	for (; slen > 0 && pFileName[ slen ] != '/'; slen-- );
	return pFileName + slen;
}

