File Annotation

Not logged in
dcdd144598 2011-02-23        kinaba: #include "stdafx.h"
dcdd144598 2011-02-23        kinaba: #include "rsrc/resource.h"
dcdd144598 2011-02-23        kinaba: #include "kilib/kilib.h"
dcdd144598 2011-02-23        kinaba: #include "OpenSaveDlg.h"
dcdd144598 2011-02-23        kinaba: using namespace ki;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: //------------------------------------------------------------------------
dcdd144598 2011-02-23        kinaba: // �����R�[�h���X�g
dcdd144598 2011-02-23        kinaba: //------------------------------------------------------------------------
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: CharSetList::CharSetList()
dcdd144598 2011-02-23        kinaba: 	: list_( 30 )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	static const TCHAR* const lnmJp[] = {
dcdd144598 2011-02-23        kinaba: 		TEXT("��������"),
dcdd144598 2011-02-23        kinaba: 		TEXT("���{��(ShiftJIS)"),
dcdd144598 2011-02-23        kinaba: 		TEXT("���{��(EUC)"),
dcdd144598 2011-02-23        kinaba: 		TEXT("���{��(ISO-2022-JP)"),
dcdd144598 2011-02-23        kinaba: 		TEXT("UTF-5"),
dcdd144598 2011-02-23        kinaba: 		TEXT("UTF-7"),
dcdd144598 2011-02-23        kinaba: 		TEXT("UTF-8"),
dcdd144598 2011-02-23        kinaba: 		TEXT("UTF-8N"),
dcdd144598 2011-02-23        kinaba: 		TEXT("UTF-16BE(BOM)"),
dcdd144598 2011-02-23        kinaba: 		TEXT("UTF-16LE(BOM)"),
dcdd144598 2011-02-23        kinaba: 		TEXT("UTF-16BE"),
dcdd144598 2011-02-23        kinaba: 		TEXT("UTF-16LE"),
dcdd144598 2011-02-23        kinaba: 		TEXT("UTF-32BE(BOM)"),
dcdd144598 2011-02-23        kinaba: 		TEXT("UTF-32LE(BOM)"),
dcdd144598 2011-02-23        kinaba: 		TEXT("UTF-32BE"),
dcdd144598 2011-02-23        kinaba: 		TEXT("UTF-32LE"),
dcdd144598 2011-02-23        kinaba: 		TEXT("����"),
dcdd144598 2011-02-23        kinaba: 		TEXT("����"),
dcdd144598 2011-02-23        kinaba: 		TEXT("�؍���(EUC-KR)"),
dcdd144598 2011-02-23        kinaba: 		TEXT("�؍���(ISO-2022-KR)"),
dcdd144598 2011-02-23        kinaba: 		TEXT("�؍���(Johab)"),
dcdd144598 2011-02-23        kinaba: 		TEXT("������(GB2312)"),
dcdd144598 2011-02-23        kinaba: 		TEXT("������(ISO-2022-CN)"),
dcdd144598 2011-02-23        kinaba: 		TEXT("������(HZ)"),
dcdd144598 2011-02-23        kinaba: 		TEXT("������(Big5)"),
dcdd144598 2011-02-23        kinaba: 		TEXT("�L������(Windows)"),
dcdd144598 2011-02-23        kinaba: 		TEXT("�L������(KOI8-R)"),
dcdd144598 2011-02-23        kinaba: 		TEXT("�L������(KOI8-U)"),
dcdd144598 2011-02-23        kinaba: 		TEXT("�^�C��"),
dcdd144598 2011-02-23        kinaba: 		TEXT("�g���R��"),
dcdd144598 2011-02-23        kinaba: 		TEXT("�o���g��"),
dcdd144598 2011-02-23        kinaba: 		TEXT("�x�g�i����"),
dcdd144598 2011-02-23        kinaba: 		TEXT("�M���V����"),
dcdd144598 2011-02-23        kinaba: 		TEXT("MSDOS(us)")
dcdd144598 2011-02-23        kinaba: 	};
dcdd144598 2011-02-23        kinaba: 	static const TCHAR* const lnmEn[] = {
dcdd144598 2011-02-23        kinaba: 		TEXT("AutoDetect"),
dcdd144598 2011-02-23        kinaba: 		TEXT("Japanese(ShiftJIS)"),
dcdd144598 2011-02-23        kinaba: 		TEXT("Japanese(EUC)"),
dcdd144598 2011-02-23        kinaba: 		TEXT("Japanese(ISO-2022-JP)"),
dcdd144598 2011-02-23        kinaba: 		TEXT("UTF-5"),
dcdd144598 2011-02-23        kinaba: 		TEXT("UTF-7"),
dcdd144598 2011-02-23        kinaba: 		TEXT("UTF-8"),
dcdd144598 2011-02-23        kinaba: 		TEXT("UTF-8N"),
dcdd144598 2011-02-23        kinaba: 		TEXT("UTF-16BE(BOM)"),
dcdd144598 2011-02-23        kinaba: 		TEXT("UTF-16LE(BOM)"),
dcdd144598 2011-02-23        kinaba: 		TEXT("UTF-16BE"),
dcdd144598 2011-02-23        kinaba: 		TEXT("UTF-16LE"),
dcdd144598 2011-02-23        kinaba: 		TEXT("UTF-32BE(BOM)"),
dcdd144598 2011-02-23        kinaba: 		TEXT("UTF-32LE(BOM)"),
dcdd144598 2011-02-23        kinaba: 		TEXT("UTF-32BE"),
dcdd144598 2011-02-23        kinaba: 		TEXT("UTF-32LE"),
dcdd144598 2011-02-23        kinaba: 		TEXT("Latin-1"),
dcdd144598 2011-02-23        kinaba: 		TEXT("Latin-2"),
dcdd144598 2011-02-23        kinaba: 		TEXT("Korean(EUC-KR)"),
dcdd144598 2011-02-23        kinaba: 		TEXT("Korean(ISO-2022-KR)"),
dcdd144598 2011-02-23        kinaba: 		TEXT("Korean(Johab)"),
dcdd144598 2011-02-23        kinaba: 		TEXT("Chinese(GB2312)"),
dcdd144598 2011-02-23        kinaba: 		TEXT("Chinese(ISO-2022-CN)"),
dcdd144598 2011-02-23        kinaba: 		TEXT("Chinese(HZ)"),
dcdd144598 2011-02-23        kinaba: 		TEXT("Chinese(Big5)"),
dcdd144598 2011-02-23        kinaba: 		TEXT("Cyrillic(Windows)"),
dcdd144598 2011-02-23        kinaba: 		TEXT("Cyrillic(KOI8-R)"),
dcdd144598 2011-02-23        kinaba: 		TEXT("Cyrillic(KOI8-U)"),
dcdd144598 2011-02-23        kinaba: 		TEXT("Thai"),
dcdd144598 2011-02-23        kinaba: 		TEXT("Turkish"),
dcdd144598 2011-02-23        kinaba: 		TEXT("Baltic"),
dcdd144598 2011-02-23        kinaba: 		TEXT("Vietnamese"),
dcdd144598 2011-02-23        kinaba: 		TEXT("Greek"),
dcdd144598 2011-02-23        kinaba: 		TEXT("MSDOS(us)")
dcdd144598 2011-02-23        kinaba: 	};
dcdd144598 2011-02-23        kinaba: 	static const TCHAR* const snm[] = {
dcdd144598 2011-02-23        kinaba: 		TEXT(""),
dcdd144598 2011-02-23        kinaba: 		TEXT("SJIS"),
dcdd144598 2011-02-23        kinaba: 		TEXT("EUC"),
dcdd144598 2011-02-23        kinaba: 		TEXT("JIS"),
dcdd144598 2011-02-23        kinaba: 		TEXT("UTF5"),
dcdd144598 2011-02-23        kinaba: 		TEXT("UTF7"),
dcdd144598 2011-02-23        kinaba: 		TEXT("UTF8"),
dcdd144598 2011-02-23        kinaba: 		TEXT("UTF8"),
dcdd144598 2011-02-23        kinaba: 		TEXT("U16B"),
dcdd144598 2011-02-23        kinaba: 		TEXT("U16L"),
dcdd144598 2011-02-23        kinaba: 		TEXT("U16B"),
dcdd144598 2011-02-23        kinaba: 		TEXT("U16L"),
dcdd144598 2011-02-23        kinaba: 		TEXT("U32B"),
dcdd144598 2011-02-23        kinaba: 		TEXT("U32L"),
dcdd144598 2011-02-23        kinaba: 		TEXT("U32B"),
dcdd144598 2011-02-23        kinaba: 		TEXT("U32L"),
dcdd144598 2011-02-23        kinaba: 		TEXT("LTN1"),
dcdd144598 2011-02-23        kinaba: 		TEXT("LTN2"),
dcdd144598 2011-02-23        kinaba: 		TEXT("UHC"),
dcdd144598 2011-02-23        kinaba: 		TEXT("I2KR"),
dcdd144598 2011-02-23        kinaba: 		TEXT("Jhb"),
dcdd144598 2011-02-23        kinaba: 		TEXT("GBK"),
dcdd144598 2011-02-23        kinaba: 		TEXT("I2CN"),
dcdd144598 2011-02-23        kinaba: 		TEXT("HZ"),
dcdd144598 2011-02-23        kinaba: 		TEXT("BIG5"),
dcdd144598 2011-02-23        kinaba: 		TEXT("CYRL"),
dcdd144598 2011-02-23        kinaba: 		TEXT("KO8R"),
dcdd144598 2011-02-23        kinaba: 		TEXT("KO8U"),
dcdd144598 2011-02-23        kinaba: 		TEXT("THAI"),
dcdd144598 2011-02-23        kinaba: 		TEXT("TRK"),
dcdd144598 2011-02-23        kinaba: 		TEXT("BALT"),
dcdd144598 2011-02-23        kinaba: 		TEXT("VTNM"),
dcdd144598 2011-02-23        kinaba: 		TEXT("GRK"),
dcdd144598 2011-02-23        kinaba: 		TEXT("DOS")
dcdd144598 2011-02-23        kinaba: 	};
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// ���{��‹��Ȃ���{��\����I��
dcdd144598 2011-02-23        kinaba: 	const TCHAR* const * lnm = (::GetACP()==932 ? lnmJp : lnmEn);
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// �������������̖ʓ|�Ȃ̂ŒZ�k�\�L(^^;
dcdd144598 2011-02-23        kinaba: 	CsInfo cs;
dcdd144598 2011-02-23        kinaba: 	#define Enroll(_id,_nm)   cs.ID=_id,             \
dcdd144598 2011-02-23        kinaba: 		cs.longName=lnm[_nm], cs.shortName=snm[_nm], \
dcdd144598 2011-02-23        kinaba: 		cs.type=LOAD|SAVE,    list_.Add( cs )
dcdd144598 2011-02-23        kinaba: 	#define EnrollS(_id,_nm)  cs.ID=_id,             \
dcdd144598 2011-02-23        kinaba: 		cs.longName=lnm[_nm], cs.shortName=snm[_nm], \
dcdd144598 2011-02-23        kinaba: 		cs.type=SAVE,         list_.Add( cs )
dcdd144598 2011-02-23        kinaba: 	#define EnrollL(_id,_nm)  cs.ID=_id,             \
dcdd144598 2011-02-23        kinaba: 		cs.longName=lnm[_nm], cs.shortName=snm[_nm], \
dcdd144598 2011-02-23        kinaba: 		cs.type=LOAD,         list_.Add( cs )
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// �K�X�o�^
dcdd144598 2011-02-23        kinaba: 	                               EnrollL( AutoDetect,0 );
dcdd144598 2011-02-23        kinaba: 	if( ::IsValidCodePage(932) )   Enroll(  SJIS,      1 ),
dcdd144598 2011-02-23        kinaba: 	                               Enroll(  EucJP,     2 ),
dcdd144598 2011-02-23        kinaba: 	                               Enroll(  IsoJP,     3 );
dcdd144598 2011-02-23        kinaba: 	/* if( always ) */             Enroll(  UTF5,      4 );
dcdd144598 2011-02-23        kinaba: 	                               Enroll(  UTF7,      5 );
dcdd144598 2011-02-23        kinaba: 	                               Enroll(  UTF8,      6 );
dcdd144598 2011-02-23        kinaba: 	                               EnrollS( UTF8N,     7 );
dcdd144598 2011-02-23        kinaba: 	                               EnrollS( UTF16b,    8 );
dcdd144598 2011-02-23        kinaba: 	                               EnrollS( UTF16l,    9 );
dcdd144598 2011-02-23        kinaba: 	                               Enroll(  UTF16BE,  10 );
dcdd144598 2011-02-23        kinaba: 	                               Enroll(  UTF16LE,  11 );
dcdd144598 2011-02-23        kinaba: 	                               EnrollS( UTF32b,   12 );
dcdd144598 2011-02-23        kinaba: 	                               EnrollS( UTF32l,   13 );
dcdd144598 2011-02-23        kinaba: 	                               Enroll(  UTF32BE,  14 );
dcdd144598 2011-02-23        kinaba: 	                               Enroll(  UTF32LE,  15 );
dcdd144598 2011-02-23        kinaba: 	                               Enroll(  Western,  16 );
dcdd144598 2011-02-23        kinaba: 	if( ::IsValidCodePage(28592) ) Enroll(  Central,  17 );
dcdd144598 2011-02-23        kinaba: 	if( ::IsValidCodePage(949) )   Enroll(  UHC,      18 ),
dcdd144598 2011-02-23        kinaba: 	                               Enroll(  IsoKR,    19 );
dcdd144598 2011-02-23        kinaba: 	if( ::IsValidCodePage(1361) )  Enroll(  Johab,    20 );
dcdd144598 2011-02-23        kinaba: 	if( ::IsValidCodePage(936) )   Enroll(  GBK,      21 ),
dcdd144598 2011-02-23        kinaba: 	                               Enroll(  IsoCN,    22 ),
dcdd144598 2011-02-23        kinaba: 	                               Enroll(  HZ   ,    23 );
dcdd144598 2011-02-23        kinaba: 	if( ::IsValidCodePage(950) )   Enroll(  Big5 ,    24 );
dcdd144598 2011-02-23        kinaba: 	if( ::IsValidCodePage(28595) ) Enroll(  Cyrillic, 25 );
dcdd144598 2011-02-23        kinaba: 	if( ::IsValidCodePage(20866) ) Enroll(  Koi8R,    26 );
dcdd144598 2011-02-23        kinaba: 	if( ::IsValidCodePage(21866) ) Enroll(  Koi8U,    27 );
dcdd144598 2011-02-23        kinaba: 	if( ::IsValidCodePage(874) )   Enroll(  Thai,     28 );
dcdd144598 2011-02-23        kinaba: 	if( ::IsValidCodePage(1254) )  Enroll(  Turkish,  29 );
dcdd144598 2011-02-23        kinaba: 	if( ::IsValidCodePage(1257) )  Enroll(  Baltic,   30 );
dcdd144598 2011-02-23        kinaba: 	if( ::IsValidCodePage(1258) )  Enroll( Vietnamese,31 );
dcdd144598 2011-02-23        kinaba: 	if( ::IsValidCodePage(28597) ) Enroll(  Greek,    32 );
dcdd144598 2011-02-23        kinaba: 	                               Enroll(  DOSUS,    33 );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// �I��
dcdd144598 2011-02-23        kinaba: 	#undef Enroll
dcdd144598 2011-02-23        kinaba: 	#undef EnrollS
dcdd144598 2011-02-23        kinaba: 	#undef EnrollL
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: int CharSetList::defaultCs() const
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	return ::GetACP();
dcdd144598 2011-02-23        kinaba: /*
dcdd144598 2011-02-23        kinaba: 	switch( ::GetACP() )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 	case 932: return SJIS;
dcdd144598 2011-02-23        kinaba: 	case 936: return GBK;
dcdd144598 2011-02-23        kinaba: 	case 949: return UHC;
dcdd144598 2011-02-23        kinaba: 	case 950: return Big5;
dcdd144598 2011-02-23        kinaba: 	default:  return Western;
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: */
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: ulong CharSetList::defaultCsi() const
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	return findCsi( defaultCs() );
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: ulong CharSetList::findCsi( int cs ) const
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	for( ulong i=0,ie=list_.size(); i<ie; ++i )
dcdd144598 2011-02-23        kinaba: 		if( list_[i].ID == cs )
dcdd144598 2011-02-23        kinaba: 			return i;
dcdd144598 2011-02-23        kinaba: 	return 0xffffffff;
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: //------------------------------------------------------------------------
dcdd144598 2011-02-23        kinaba: // �u�J���v�_�C�A���O
dcdd144598 2011-02-23        kinaba: //------------------------------------------------------------------------
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: namespace
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	// �֐��I�����ɁA�J�����g�f�B���N�g�������ɖ߂�
dcdd144598 2011-02-23        kinaba: 	class CurrentDirRecovery
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		Path cur_;
dcdd144598 2011-02-23        kinaba: 	public:
dcdd144598 2011-02-23        kinaba: 		CurrentDirRecovery() : cur_(Path::Cur) {}
dcdd144598 2011-02-23        kinaba: 		~CurrentDirRecovery() { ::SetCurrentDirectory(cur_.c_str()); }
dcdd144598 2011-02-23        kinaba: 	};
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: OpenFileDlg* OpenFileDlg::pThis;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: bool OpenFileDlg::DoModal( HWND wnd, const TCHAR* fltr, const TCHAR* fnm )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	CurrentDirRecovery cdr;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	if( fnm == NULL )
dcdd144598 2011-02-23        kinaba: 		filename_[0] = TEXT('\0');
dcdd144598 2011-02-23        kinaba: 	else
dcdd144598 2011-02-23        kinaba: 		::lstrcpy( filename_, fnm );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	OPENFILENAME ofn = {sizeof(ofn)};
dcdd144598 2011-02-23        kinaba: 	ofn.hwndOwner      = wnd;
dcdd144598 2011-02-23        kinaba: 	ofn.hInstance      = app().hinst();
dcdd144598 2011-02-23        kinaba: 	ofn.lpstrFilter    = fltr;
dcdd144598 2011-02-23        kinaba: 	ofn.lpstrFile      = filename_;
dcdd144598 2011-02-23        kinaba: 	ofn.nMaxFile       = countof(filename_);
dcdd144598 2011-02-23        kinaba: 	ofn.lpTemplateName = MAKEINTRESOURCE(IDD_OPENFILEHOOK);
dcdd144598 2011-02-23        kinaba: 	ofn.lpfnHook       = OfnHook;
dcdd144598 2011-02-23        kinaba: 	ofn.Flags = OFN_FILEMUSTEXIST |
dcdd144598 2011-02-23        kinaba: 				OFN_HIDEREADONLY  |
dcdd144598 2011-02-23        kinaba: 				OFN_EXPLORER      |
dcdd144598 2011-02-23        kinaba: 				OFN_ENABLESIZING  |
dcdd144598 2011-02-23        kinaba: 				OFN_ENABLEHOOK    |
dcdd144598 2011-02-23        kinaba: 				OFN_ENABLETEMPLATE;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	pThis = this;
dcdd144598 2011-02-23        kinaba: 	return ( ::GetOpenFileName(&ofn) != 0 );
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: UINT_PTR CALLBACK OpenFileDlg::OfnHook( HWND dlg, UINT msg, WPARAM, LPARAM lp )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	if( msg==WM_INITDIALOG )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		// �R���{�{�b�N�X�𖄂߂āA�u�����I���v��I��
dcdd144598 2011-02-23        kinaba: 		ComboBox cb( dlg, IDC_CODELIST );
dcdd144598 2011-02-23        kinaba: 		const CharSetList& csl = pThis->csl_;
dcdd144598 2011-02-23        kinaba: 		for( ulong i=0; i<csl.size(); ++i )
dcdd144598 2011-02-23        kinaba: 			if( csl[i].type & 2 ) // 2:=LOAD
dcdd144598 2011-02-23        kinaba: 				cb.Add( csl[i].longName );
dcdd144598 2011-02-23        kinaba: 		cb.Select( csl[0].longName );
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 	else if( msg==WM_NOTIFY )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		// OK�������ꂽ��A�����R�[�h�̑I���󋵂��L�^
dcdd144598 2011-02-23        kinaba: 		if( reinterpret_cast<NMHDR*>(lp)->code==CDN_FILEOK )
dcdd144598 2011-02-23        kinaba: 		{
dcdd144598 2011-02-23        kinaba: 			ulong j=0, i=ComboBox(dlg,IDC_CODELIST).GetCurSel();
dcdd144598 2011-02-23        kinaba: 			for(;;++j,--i)
dcdd144598 2011-02-23        kinaba: 			{
dcdd144598 2011-02-23        kinaba: 				while( !(pThis->csl_[j].type & 2) ) // !LOAD
dcdd144598 2011-02-23        kinaba: 					++j;
dcdd144598 2011-02-23        kinaba: 				if( i==0 )
dcdd144598 2011-02-23        kinaba: 					break;
dcdd144598 2011-02-23        kinaba: 			}
dcdd144598 2011-02-23        kinaba: 			pThis->csIndex_ = j;
dcdd144598 2011-02-23        kinaba: 		}
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 	return FALSE;
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: //------------------------------------------------------------------------
dcdd144598 2011-02-23        kinaba: // �u�ۑ��v�_�C�A���O
dcdd144598 2011-02-23        kinaba: //------------------------------------------------------------------------
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: SaveFileDlg* SaveFileDlg::pThis;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: bool SaveFileDlg::DoModal( HWND wnd, const TCHAR* fltr, const TCHAR* fnm )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	CurrentDirRecovery cdr;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	if( fnm == NULL )
dcdd144598 2011-02-23        kinaba: 		filename_[0] = TEXT('\0');
dcdd144598 2011-02-23        kinaba: 	else
dcdd144598 2011-02-23        kinaba: 		::lstrcpy( filename_, fnm );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	OPENFILENAME ofn = {sizeof(ofn)};
dcdd144598 2011-02-23        kinaba:     ofn.hwndOwner      = wnd;
dcdd144598 2011-02-23        kinaba:     ofn.hInstance      = app().hinst();
dcdd144598 2011-02-23        kinaba:     ofn.lpstrFilter    = fltr;
dcdd144598 2011-02-23        kinaba:     ofn.lpstrFile      = filename_;
dcdd144598 2011-02-23        kinaba:     ofn.nMaxFile       = countof(filename_);
dcdd144598 2011-02-23        kinaba:     ofn.lpTemplateName = MAKEINTRESOURCE(IDD_SAVEFILEHOOK);
dcdd144598 2011-02-23        kinaba:     ofn.lpfnHook       = OfnHook;
dcdd144598 2011-02-23        kinaba:     ofn.Flags = OFN_HIDEREADONLY    |
dcdd144598 2011-02-23        kinaba: 				OFN_PATHMUSTEXIST   |
dcdd144598 2011-02-23        kinaba: 				OFN_EXPLORER        |
dcdd144598 2011-02-23        kinaba: 				OFN_ENABLESIZING    |
dcdd144598 2011-02-23        kinaba: 				OFN_ENABLEHOOK      |
dcdd144598 2011-02-23        kinaba: 				OFN_ENABLETEMPLATE  |
dcdd144598 2011-02-23        kinaba: 				OFN_OVERWRITEPROMPT;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	pThis        = this;
dcdd144598 2011-02-23        kinaba: 	return ( ::GetSaveFileName(&ofn) != 0 );
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: UINT_PTR CALLBACK SaveFileDlg::OfnHook( HWND dlg, UINT msg, WPARAM, LPARAM lp )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	if( msg==WM_INITDIALOG )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		// �R���{�{�b�N�X�𖄂߂āA�K�؂Ȃ̂�I��
dcdd144598 2011-02-23        kinaba: 		{
dcdd144598 2011-02-23        kinaba: 			ComboBox cb( dlg, IDC_CODELIST );
dcdd144598 2011-02-23        kinaba: 			const CharSetList& csl = pThis->csl_;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 			for( ulong i=0; i<csl.size(); ++i )
dcdd144598 2011-02-23        kinaba: 				if( csl[i].type & 1 ) // 1:=SAVE
dcdd144598 2011-02-23        kinaba: 					cb.Add( csl[i].longName );
dcdd144598 2011-02-23        kinaba: 			cb.Select( csl[pThis->csIndex_].longName );
dcdd144598 2011-02-23        kinaba: 		}
dcdd144598 2011-02-23        kinaba: 		{
dcdd144598 2011-02-23        kinaba: 			ComboBox cb( dlg, IDC_CRLFLIST );
dcdd144598 2011-02-23        kinaba: 			static const TCHAR* const lbList[] = {
dcdd144598 2011-02-23        kinaba: 				TEXT("CR"),
dcdd144598 2011-02-23        kinaba: 				TEXT("LF"),
dcdd144598 2011-02-23        kinaba: 				TEXT("CRLF")
dcdd144598 2011-02-23        kinaba: 			};
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 			for( ulong i=0; i<countof(lbList); ++i )
dcdd144598 2011-02-23        kinaba: 				cb.Add( lbList[i] );
dcdd144598 2011-02-23        kinaba: 			cb.Select( lbList[pThis->lb_] );
dcdd144598 2011-02-23        kinaba: 		}
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 	else if( msg==WM_NOTIFY )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		if( reinterpret_cast<NMHDR*>(lp)->code==CDN_FILEOK )
dcdd144598 2011-02-23        kinaba: 		{
dcdd144598 2011-02-23        kinaba: 			// OK�������ꂽ��A�����R�[�h�̑I���󋵂��L�^
dcdd144598 2011-02-23        kinaba: 			ulong j=0, i=ComboBox(dlg,IDC_CODELIST).GetCurSel();
dcdd144598 2011-02-23        kinaba: 			for(;;++j,--i)
dcdd144598 2011-02-23        kinaba: 			{
dcdd144598 2011-02-23        kinaba: 				while( !(pThis->csl_[j].type & 1) ) // !SAVE
dcdd144598 2011-02-23        kinaba: 					++j;
dcdd144598 2011-02-23        kinaba: 				if( i==0 )
dcdd144598 2011-02-23        kinaba: 					break;
dcdd144598 2011-02-23        kinaba: 			}
dcdd144598 2011-02-23        kinaba: 			pThis->csIndex_ = j;
dcdd144598 2011-02-23        kinaba: 			// ���s�R�[�h��
dcdd144598 2011-02-23        kinaba: 			pThis->lb_ = ComboBox(dlg,IDC_CRLFLIST).GetCurSel();
dcdd144598 2011-02-23        kinaba: 		}
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 	return FALSE;
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: //------------------------------------------------------------------------
dcdd144598 2011-02-23        kinaba: // ���[�e�B���e�B�[
dcdd144598 2011-02-23        kinaba: //------------------------------------------------------------------------
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: ki::aarr<TCHAR> OpenFileDlg::ConnectWithNull( String lst[], int num )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	int TtlLen = 1;
dcdd144598 2011-02-23        kinaba: 	for( int i=0; i<num; ++i )
dcdd144598 2011-02-23        kinaba: 		TtlLen += (lst[i].len() + 1);
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	aarr<TCHAR> a( new TCHAR[TtlLen] );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	TCHAR* p = a.get();
dcdd144598 2011-02-23        kinaba: 	for( int i=0; i<num; ++i )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		::lstrcpy( p, lst[i].c_str() );
dcdd144598 2011-02-23        kinaba: 		p += (lst[i].len() + 1);
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 	*p = TEXT('\0');
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	return a;
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: //------------------------------------------------------------------------
dcdd144598 2011-02-23        kinaba: // �u�J�������v�_�C�A���O
dcdd144598 2011-02-23        kinaba: //------------------------------------------------------------------------
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: ReopenDlg::ReopenDlg( const CharSetList& csl, int csi )
dcdd144598 2011-02-23        kinaba: 	: DlgImpl(IDD_REOPENDLG), csl_(csl), csIndex_(csi)
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: void ReopenDlg::on_init()
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	// �R���{�{�b�N�X�𖄂߂āA�u�����I���v��I��
dcdd144598 2011-02-23        kinaba: 	ComboBox cb( hwnd(), IDC_CODELIST );
dcdd144598 2011-02-23        kinaba: 	for( ulong i=0; i<csl_.size(); ++i )
dcdd144598 2011-02-23        kinaba: 		if( csl_[i].type & 1 ) // 2:=SAVE
dcdd144598 2011-02-23        kinaba: 			cb.Add( csl_[i].longName );
dcdd144598 2011-02-23        kinaba: 	cb.Select( csl_[csIndex_].longName );
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: bool ReopenDlg::on_ok()
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	// OK�������ꂽ��A�����R�[�h�̑I���󋵂��L�^
dcdd144598 2011-02-23        kinaba: 	ulong j=0, i=ComboBox(hwnd(),IDC_CODELIST).GetCurSel();
dcdd144598 2011-02-23        kinaba: 	for(;;++j,--i)
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		while( !(csl_[j].type & 1) ) // !SAVE
dcdd144598 2011-02-23        kinaba: 			++j;
dcdd144598 2011-02-23        kinaba: 		if( i==0 )
dcdd144598 2011-02-23        kinaba: 			break;
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 	csIndex_ = j;
dcdd144598 2011-02-23        kinaba: 	return true;
dcdd144598 2011-02-23        kinaba: }