File Annotation

Not logged in
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: #include "stdafx.h"
dcdd144598 2011-02-23        kinaba: #include "ConfigManager.h"
dcdd144598 2011-02-23        kinaba: #include "rsrc/resource.h"
dcdd144598 2011-02-23        kinaba: #include "RSearch.h"
dcdd144598 2011-02-23        kinaba: using namespace ki;
dcdd144598 2011-02-23        kinaba: using namespace editwing;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: void BootNewProcess( const TCHAR* cmd ); // in GpMain.cpp
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: //-------------------------------------------------------------------------
dcdd144598 2011-02-23        kinaba: // 設定項目管理。
dcdd144598 2011-02-23        kinaba: // SetDocTypeで切り替えると、文書タイプ依存の項目を自動で
dcdd144598 2011-02-23        kinaba: // 入れ替えたり色々。
dcdd144598 2011-02-23        kinaba: //-------------------------------------------------------------------------
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: ConfigManager::ConfigManager()
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	// デフォルトのレイアウト設定は何よりも先に読んでおく
dcdd144598 2011-02-23        kinaba: 	DocType d;
dcdd144598 2011-02-23        kinaba: 	d.name.Load( IDS_DEFAULT );
dcdd144598 2011-02-23        kinaba: 	d.layfile   = TEXT("default.lay");
dcdd144598 2011-02-23        kinaba: 	LoadLayout( &d );
dcdd144598 2011-02-23        kinaba: 	dtList_.Add( d );
dcdd144598 2011-02-23        kinaba: 	curDt_ = dtList_.begin();
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// ini読み込み
dcdd144598 2011-02-23        kinaba: 	LoadIni();
dcdd144598 2011-02-23        kinaba: 	SetDocTypeByName( newfileDoctype_ );
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: ConfigManager::~ConfigManager()
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	// ini保存
dcdd144598 2011-02-23        kinaba: 	SaveIni();
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: void ConfigManager::SetDocTypeByName( const ki::String& nam )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	curDt_             = dtList_.begin();
dcdd144598 2011-02-23        kinaba: 	DtList::iterator b = dtList_.begin();
dcdd144598 2011-02-23        kinaba: 	DtList::iterator e = dtList_.end();
dcdd144598 2011-02-23        kinaba: 	for( ; b!=e; ++b )
dcdd144598 2011-02-23        kinaba: 		if( b->name == nam )
dcdd144598 2011-02-23        kinaba: 		{
dcdd144598 2011-02-23        kinaba: 			curDt_ = b;
dcdd144598 2011-02-23        kinaba: 			break;
dcdd144598 2011-02-23        kinaba: 		}
dcdd144598 2011-02-23        kinaba: 	LoadLayout( &*curDt_ );
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: int ConfigManager::SetDocType( const Path& fname )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	const unicode* uname = fname.ConvToWChar();
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	int ct = 1;
dcdd144598 2011-02-23        kinaba: 	DtList::iterator i=dtList_.begin(), e=dtList_.end();
dcdd144598 2011-02-23        kinaba: 	if( fname.len() > 0 )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		for( ++i; i!=e; ++i, ++ct )
dcdd144598 2011-02-23        kinaba: 			if( i->pattern.len() > 0 )
dcdd144598 2011-02-23        kinaba: 			{
dcdd144598 2011-02-23        kinaba: 				const unicode* upat = i->pattern.ConvToWChar();
dcdd144598 2011-02-23        kinaba: 				bool b = MatchDocType( uname, upat );
dcdd144598 2011-02-23        kinaba: 				i->pattern.FreeWCMem( upat );
dcdd144598 2011-02-23        kinaba: 				if( b ) break;
dcdd144598 2011-02-23        kinaba: 			}
dcdd144598 2011-02-23        kinaba: 		if( i == e )
dcdd144598 2011-02-23        kinaba: 			ct=0, i=dtList_.begin(); // 適切なのが見つからなければ[標準]。
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 	else
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		ct = 0;
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	SetDocTypeByName( i->name );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	fname.FreeWCMem( uname );
dcdd144598 2011-02-23        kinaba: 	return ct;
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: bool ConfigManager::MatchDocType
dcdd144598 2011-02-23        kinaba: 	( const unicode* fname, const unicode* pat )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	// pattern と fname とのマッチをとって判定…
dcdd144598 2011-02-23        kinaba: 	return reg_match( pat, fname, 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: // 設定ダイアログ関連
dcdd144598 2011-02-23        kinaba: //-------------------------------------------------------------------------
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: struct ConfigDlg : public ki::DlgImpl
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: private:
dcdd144598 2011-02-23        kinaba: 	typedef ConfigManager::DtList::iterator DTI;
dcdd144598 2011-02-23        kinaba: 	ulong curSel_;
dcdd144598 2011-02-23        kinaba: 	void SaveDt()
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		DTI p=myDtl_.begin(), e=myDtl_.end();
dcdd144598 2011-02-23        kinaba: 		for( ulong ct=0; p!=e && ct!=curSel_; ++ct,++p );
dcdd144598 2011-02-23        kinaba: 		if( p==e ) return;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 		TCHAR buf[256];
dcdd144598 2011-02-23        kinaba: 		SendMsgToItem(IDC_DT_PAT, WM_GETTEXT,
dcdd144598 2011-02-23        kinaba: 			countof(buf),reinterpret_cast<LPARAM>(buf));
dcdd144598 2011-02-23        kinaba: 		p->pattern = buf;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 		SendMsgToItem(IDC_PAT_KWD, CB_GETLBTEXT,
dcdd144598 2011-02-23        kinaba: 			SendMsgToItem(IDC_PAT_KWD, CB_GETCURSEL),
dcdd144598 2011-02-23        kinaba: 			reinterpret_cast<LPARAM>(buf) );
dcdd144598 2011-02-23        kinaba: 		p->kwdfile = buf;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 		SendMsgToItem(IDC_PAT_LAY, CB_GETLBTEXT,
dcdd144598 2011-02-23        kinaba: 			SendMsgToItem(IDC_PAT_LAY, CB_GETCURSEL),
dcdd144598 2011-02-23        kinaba: 			reinterpret_cast<LPARAM>(buf) );
dcdd144598 2011-02-23        kinaba: 		p->layfile = buf;
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 	void SelDt(ulong i)
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		DTI p=myDtl_.begin(), e=myDtl_.end();
dcdd144598 2011-02-23        kinaba: 		for( ulong ct=0; p!=e && ct!=i; ++ct,++p );
dcdd144598 2011-02-23        kinaba: 		if( p==e ) return;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 		curSel_ = i;
dcdd144598 2011-02-23        kinaba: 		SendMsgToItem(IDC_DT_PAT, WM_SETTEXT, p->pattern.c_str());
dcdd144598 2011-02-23        kinaba: 		if( p->kwdfile.len()==0 )
dcdd144598 2011-02-23        kinaba: 			SendMsgToItem(IDC_PAT_KWD, CB_SETCURSEL);
dcdd144598 2011-02-23        kinaba: 		else
dcdd144598 2011-02-23        kinaba: 			SendMsgToItem(IDC_PAT_KWD,CB_SELECTSTRING,p->kwdfile.c_str());
dcdd144598 2011-02-23        kinaba: 		SendMsgToItem(IDC_PAT_LAY,CB_SELECTSTRING,p->layfile.c_str());
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 	void on_deldoctype()
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		ulong ct;
dcdd144598 2011-02-23        kinaba: 		DTI p=myDtl_.begin(), e=myDtl_.end();
dcdd144598 2011-02-23        kinaba: 		for( ct=0; p!=e && ct!=curSel_; ++ct,++p );
dcdd144598 2011-02-23        kinaba: 		if( p==e ) return;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 		String msg = TEXT("[");
dcdd144598 2011-02-23        kinaba: 		msg += p->name, msg += TEXT("]"), msg += String(IDS_OKTODEL);
dcdd144598 2011-02-23        kinaba: 		if( IDNO ==
dcdd144598 2011-02-23        kinaba: 			MsgBox( msg.c_str(), String(IDS_APPNAME).c_str(), MB_YESNO ) )
dcdd144598 2011-02-23        kinaba: 			return;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 		myDtl_.Del(p);
dcdd144598 2011-02-23        kinaba: 		SendMsgToItem( IDC_DOCTYPELIST, LB_DELETESTRING, ct );
dcdd144598 2011-02-23        kinaba: 		SelDt(0);
dcdd144598 2011-02-23        kinaba: 		if( ct+1 == (ulong)SendMsgToItem(IDC_NEWDT,CB_GETCURSEL) )
dcdd144598 2011-02-23        kinaba: 			SendMsgToItem( IDC_NEWDT, CB_SETCURSEL );
dcdd144598 2011-02-23        kinaba: 		SendMsgToItem( IDC_NEWDT, CB_DELETESTRING, ct+1 );
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 	void on_newdoctype()
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		struct NewDocTypeDlg : public DlgImpl
dcdd144598 2011-02-23        kinaba: 		{
dcdd144598 2011-02-23        kinaba: 			NewDocTypeDlg(HWND wnd)
dcdd144598 2011-02-23        kinaba: 				: DlgImpl(IDD_ADDDOCTYPE) { GoModal(wnd); }
dcdd144598 2011-02-23        kinaba: 			virtual bool on_ok()
dcdd144598 2011-02-23        kinaba: 			{
dcdd144598 2011-02-23        kinaba: 				TCHAR buf[MAX_PATH];
dcdd144598 2011-02-23        kinaba: 				SendMsgToItem(IDC_NAME, WM_GETTEXT,
dcdd144598 2011-02-23        kinaba: 					countof(buf),reinterpret_cast<LPARAM>(buf));
dcdd144598 2011-02-23        kinaba: 				name = buf;
dcdd144598 2011-02-23        kinaba: 				SendMsgToItem(IDC_EXT, WM_GETTEXT,
dcdd144598 2011-02-23        kinaba: 					countof(buf),reinterpret_cast<LPARAM>(buf));
dcdd144598 2011-02-23        kinaba: 				ext=buf;
dcdd144598 2011-02-23        kinaba: 				return true;
dcdd144598 2011-02-23        kinaba: 			}
dcdd144598 2011-02-23        kinaba: 			String name;
dcdd144598 2011-02-23        kinaba: 			String ext;
dcdd144598 2011-02-23        kinaba: 		} dlg( hwnd() );
dcdd144598 2011-02-23        kinaba: 		if( IDOK == dlg.endcode() )
dcdd144598 2011-02-23        kinaba: 		{
dcdd144598 2011-02-23        kinaba: 			ConfigManager::DocType ndt;
dcdd144598 2011-02-23        kinaba: 			TCHAR buf[200];
dcdd144598 2011-02-23        kinaba: 			SendMsgToItem(IDC_PAT_KWD, CB_GETLBTEXT,
dcdd144598 2011-02-23        kinaba: 				SendMsgToItem(IDC_PAT_KWD, CB_GETCURSEL),
dcdd144598 2011-02-23        kinaba: 				reinterpret_cast<LPARAM>(buf) );
dcdd144598 2011-02-23        kinaba: 			ndt.kwdfile = buf;
dcdd144598 2011-02-23        kinaba: 			SendMsgToItem(IDC_PAT_LAY, CB_GETLBTEXT,
dcdd144598 2011-02-23        kinaba: 				SendMsgToItem(IDC_PAT_LAY, CB_GETCURSEL),
dcdd144598 2011-02-23        kinaba: 				reinterpret_cast<LPARAM>(buf) );
dcdd144598 2011-02-23        kinaba: 			ndt.layfile = buf;
dcdd144598 2011-02-23        kinaba: 			ndt.name = dlg.name;
dcdd144598 2011-02-23        kinaba: 			ndt.pattern = TEXT(".*\\.")+dlg.ext+TEXT("$");
dcdd144598 2011-02-23        kinaba: 			myDtl_.Add(ndt);
dcdd144598 2011-02-23        kinaba: 			SendMsgToItem( IDC_DOCTYPELIST, LB_ADDSTRING,
dcdd144598 2011-02-23        kinaba: 				ndt.name.c_str() );
dcdd144598 2011-02-23        kinaba: 			SendMsgToItem( IDC_NEWDT, CB_ADDSTRING,
dcdd144598 2011-02-23        kinaba: 				ndt.name.c_str() );
dcdd144598 2011-02-23        kinaba: 		}
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: public:
dcdd144598 2011-02-23        kinaba: 	ConfigDlg( ConfigManager& cfg, HWND wnd )
dcdd144598 2011-02-23        kinaba: 		: cfg_( cfg )
dcdd144598 2011-02-23        kinaba: 		, DlgImpl( IDD_CONFIG )
dcdd144598 2011-02-23        kinaba: 		, curSel_( 0xffffffff )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		for( DTI i=++cfg_.dtList_.begin(); i!=cfg_.dtList_.end(); ++i )
dcdd144598 2011-02-23        kinaba: 			myDtl_.Add( *i );
dcdd144598 2011-02-23        kinaba: 		GoModal( wnd );
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: private:
dcdd144598 2011-02-23        kinaba: 	void on_init()
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		SendMsgToItem(IDC_LATEST_NUM, WM_SETTEXT,
dcdd144598 2011-02-23        kinaba: 			String().SetInt(cfg_.mrus_).c_str() );
dcdd144598 2011-02-23        kinaba: 		if( cfg_.undoLimit() == -1 )
dcdd144598 2011-02-23        kinaba: 		{
dcdd144598 2011-02-23        kinaba: 			SendMsgToItem(IDC_UNDOLIM1, BM_SETCHECK, BST_CHECKED);
dcdd144598 2011-02-23        kinaba: 			SendMsgToItem(IDC_UNDO_CT, WM_SETTEXT, TEXT("20") );
dcdd144598 2011-02-23        kinaba: 		}
dcdd144598 2011-02-23        kinaba: 		else
dcdd144598 2011-02-23        kinaba: 		{
dcdd144598 2011-02-23        kinaba: 			SendMsgToItem(IDC_UNDOLIM2, BM_SETCHECK, BST_CHECKED);
dcdd144598 2011-02-23        kinaba: 			SendMsgToItem(IDC_UNDO_CT, WM_SETTEXT,
dcdd144598 2011-02-23        kinaba: 				String().SetInt(cfg_.undoLimit()).c_str() );
dcdd144598 2011-02-23        kinaba: 		}
dcdd144598 2011-02-23        kinaba: 		if( cfg_.countByUnicode() )
dcdd144598 2011-02-23        kinaba: 		{
dcdd144598 2011-02-23        kinaba: 			SendMsgToItem(IDC_COUNTBYLETTER,  BM_SETCHECK, BST_CHECKED);
dcdd144598 2011-02-23        kinaba: 			SendMsgToItem(IDC_COUNTBYLETTER2, BM_SETCHECK);
dcdd144598 2011-02-23        kinaba: 		}
dcdd144598 2011-02-23        kinaba: 		else
dcdd144598 2011-02-23        kinaba: 		{
dcdd144598 2011-02-23        kinaba: 			SendMsgToItem(IDC_COUNTBYLETTER,  BM_SETCHECK);
dcdd144598 2011-02-23        kinaba: 			SendMsgToItem(IDC_COUNTBYLETTER2, BM_SETCHECK, BST_CHECKED);
dcdd144598 2011-02-23        kinaba: 		}
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 		SendMsgToItem(IDC_TXTFILT, WM_SETTEXT,
dcdd144598 2011-02-23        kinaba: 			cfg_.txtFileFilter().c_str() );
dcdd144598 2011-02-23        kinaba: 		SendMsgToItem(IDC_EXTGREP, WM_SETTEXT,
dcdd144598 2011-02-23        kinaba: 			cfg_.grepExe().c_str() );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 		if( cfg_.openSame() )
dcdd144598 2011-02-23        kinaba: 			SendMsgToItem(IDC_OPENSAME, BM_SETCHECK, BST_CHECKED);
dcdd144598 2011-02-23        kinaba: 		if( cfg_.rememberWindowSize_ )
dcdd144598 2011-02-23        kinaba: 			SendMsgToItem(IDC_REMSIZE, BM_SETCHECK, BST_CHECKED);
dcdd144598 2011-02-23        kinaba: 		if( cfg_.rememberWindowPlace_ )
dcdd144598 2011-02-23        kinaba: 			SendMsgToItem(IDC_REMPLACE, BM_SETCHECK, BST_CHECKED);
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 		CharSetList& csl = cfg_.GetCharSetList();
dcdd144598 2011-02-23        kinaba: 		for(ulong i=1; i<csl.size(); ++i)
dcdd144598 2011-02-23        kinaba: 			SendMsgToItem( IDC_NEWCS, CB_ADDSTRING, csl[i].longName );
dcdd144598 2011-02-23        kinaba: 		SendMsgToItem( IDC_NEWCS, CB_SETCURSEL, csl.findCsi(cfg_.newfileCharset_)-1 );
dcdd144598 2011-02-23        kinaba: 		SendMsgToItem( IDC_NEWLB, CB_ADDSTRING, TEXT("CR") );
dcdd144598 2011-02-23        kinaba: 		SendMsgToItem( IDC_NEWLB, CB_ADDSTRING, TEXT("LF") );
dcdd144598 2011-02-23        kinaba: 		SendMsgToItem( IDC_NEWLB, CB_ADDSTRING, TEXT("CRLF") );
dcdd144598 2011-02-23        kinaba: 		SendMsgToItem( IDC_NEWLB, CB_SETCURSEL, cfg_.newfileLB_ );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 		ulong nfd_idx=0, nfd_cnt=1;
dcdd144598 2011-02-23        kinaba: 		SendMsgToItem( IDC_NEWDT, CB_ADDSTRING,
dcdd144598 2011-02-23        kinaba: 			cfg_.dtList_.begin()->name.c_str() );
dcdd144598 2011-02-23        kinaba: 		for( DTI i=myDtl_.begin(), e=myDtl_.end(); i!=e; ++i,++nfd_cnt )
dcdd144598 2011-02-23        kinaba: 		{
dcdd144598 2011-02-23        kinaba: 			SendMsgToItem( IDC_DOCTYPELIST, LB_ADDSTRING,
dcdd144598 2011-02-23        kinaba: 				i->name.c_str() );
dcdd144598 2011-02-23        kinaba: 			SendMsgToItem( IDC_NEWDT, CB_ADDSTRING,
dcdd144598 2011-02-23        kinaba: 				i->name.c_str() );
dcdd144598 2011-02-23        kinaba: 			if( i->name == cfg_.newfileDoctype_ )
dcdd144598 2011-02-23        kinaba: 				nfd_idx = nfd_cnt;
dcdd144598 2011-02-23        kinaba: 		}
dcdd144598 2011-02-23        kinaba: 		SendMsgToItem( IDC_NEWDT, CB_SETCURSEL, nfd_idx );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 		FindFile f;
dcdd144598 2011-02-23        kinaba: 		WIN32_FIND_DATA fd;
dcdd144598 2011-02-23        kinaba: 		f.Begin( (Path(Path::Exe)+=TEXT("type\\*.kwd")).c_str() );
dcdd144598 2011-02-23        kinaba: 		SendMsgToItem( IDC_PAT_KWD, CB_ADDSTRING, TEXT("") );
dcdd144598 2011-02-23        kinaba: 		while( f.Next(&fd) )
dcdd144598 2011-02-23        kinaba: 			SendMsgToItem( IDC_PAT_KWD, CB_ADDSTRING, fd.cFileName );
dcdd144598 2011-02-23        kinaba: 		f.Begin( (Path(Path::Exe)+=TEXT("type\\*.lay")).c_str() );
dcdd144598 2011-02-23        kinaba: 		while( f.Next(&fd) )
dcdd144598 2011-02-23        kinaba: 			SendMsgToItem( IDC_PAT_LAY, CB_ADDSTRING, fd.cFileName );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 		SelDt(0);
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 		SetCenter( hwnd(), ::GetParent(hwnd()) );
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	bool on_command( UINT cmd, UINT id, HWND ctrl )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		switch( cmd )
dcdd144598 2011-02-23        kinaba: 		{
dcdd144598 2011-02-23        kinaba: 		case LBN_SELCHANGE:
dcdd144598 2011-02-23        kinaba: 			SaveDt();
dcdd144598 2011-02-23        kinaba: 			SelDt( (ulong)SendMsgToItem( IDC_DOCTYPELIST, LB_GETCURSEL ) );
dcdd144598 2011-02-23        kinaba: 			break;
dcdd144598 2011-02-23        kinaba: 		default:
dcdd144598 2011-02-23        kinaba: 			TCHAR buf[256];
dcdd144598 2011-02-23        kinaba: 			switch( id )
dcdd144598 2011-02-23        kinaba: 			{
dcdd144598 2011-02-23        kinaba: 			case IDC_EDITKWD:
dcdd144598 2011-02-23        kinaba: 				SendMsgToItem(IDC_PAT_KWD, CB_GETLBTEXT,
dcdd144598 2011-02-23        kinaba: 					SendMsgToItem(IDC_PAT_KWD, CB_GETCURSEL),
dcdd144598 2011-02-23        kinaba: 					reinterpret_cast<LPARAM>(buf) );
dcdd144598 2011-02-23        kinaba: 				if( buf[0] != TEXT('\0') )
dcdd144598 2011-02-23        kinaba: 					BootNewProcess( (TEXT("\"")+Path(Path::Exe)+
dcdd144598 2011-02-23        kinaba: 						TEXT("type\\")+buf+TEXT("\"") ).c_str());
dcdd144598 2011-02-23        kinaba: 				break;
dcdd144598 2011-02-23        kinaba: 			case IDC_EDITLAY:
dcdd144598 2011-02-23        kinaba: 				SendMsgToItem(IDC_PAT_LAY, CB_GETLBTEXT,
dcdd144598 2011-02-23        kinaba: 					SendMsgToItem(IDC_PAT_LAY, CB_GETCURSEL),
dcdd144598 2011-02-23        kinaba: 					reinterpret_cast<LPARAM>(buf) );
dcdd144598 2011-02-23        kinaba: 				BootNewProcess( (TEXT("\"")+Path(Path::Exe)+
dcdd144598 2011-02-23        kinaba: 					TEXT("type\\")+buf+TEXT("\"") ).c_str());
dcdd144598 2011-02-23        kinaba: 				break;
dcdd144598 2011-02-23        kinaba: 			case IDC_NEWDOCTYPE:
dcdd144598 2011-02-23        kinaba: 				on_newdoctype();
dcdd144598 2011-02-23        kinaba: 				break;
dcdd144598 2011-02-23        kinaba: 			case IDC_DELDOCTYPE:
dcdd144598 2011-02-23        kinaba: 				on_deldoctype();
dcdd144598 2011-02-23        kinaba: 				break;
dcdd144598 2011-02-23        kinaba: 			default:
dcdd144598 2011-02-23        kinaba: 				return false;
dcdd144598 2011-02-23        kinaba: 			}
dcdd144598 2011-02-23        kinaba: 			break;
dcdd144598 2011-02-23        kinaba: 		}
dcdd144598 2011-02-23        kinaba: 		return true;
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	bool on_ok()
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		TCHAR buf[100];
dcdd144598 2011-02-23        kinaba: 		SendMsgToItem(IDC_LATEST_NUM, WM_GETTEXT,
dcdd144598 2011-02-23        kinaba: 			countof(buf),reinterpret_cast<LPARAM>(buf));
dcdd144598 2011-02-23        kinaba: 		cfg_.mrus_ = String::GetInt(buf);
dcdd144598 2011-02-23        kinaba: 		cfg_.mrus_ = Min(Max(0, cfg_.mrus_), 20);
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 		if( BST_CHECKED == SendMsgToItem(IDC_UNDOLIM1, BM_GETCHECK) )
dcdd144598 2011-02-23        kinaba: 		{
dcdd144598 2011-02-23        kinaba: 			cfg_.undoLimit_ = -1;
dcdd144598 2011-02-23        kinaba: 		}
dcdd144598 2011-02-23        kinaba: 		else
dcdd144598 2011-02-23        kinaba: 		{
dcdd144598 2011-02-23        kinaba: 			SendMsgToItem(IDC_UNDO_CT, WM_GETTEXT,
dcdd144598 2011-02-23        kinaba: 				countof(buf),reinterpret_cast<LPARAM>(buf));
dcdd144598 2011-02-23        kinaba: 			cfg_.undoLimit_ = String::GetInt(buf);
dcdd144598 2011-02-23        kinaba: 		}
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 		SendMsgToItem(IDC_TXTFILT, WM_GETTEXT,
dcdd144598 2011-02-23        kinaba: 			countof(buf),reinterpret_cast<LPARAM>(buf));
dcdd144598 2011-02-23        kinaba: 		cfg_.txtFilter_ = buf;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 		SendMsgToItem(IDC_EXTGREP, WM_GETTEXT,
dcdd144598 2011-02-23        kinaba: 			countof(buf),reinterpret_cast<LPARAM>(buf));
dcdd144598 2011-02-23        kinaba: 		cfg_.grepExe_ = buf;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 		cfg_.openSame_ =
dcdd144598 2011-02-23        kinaba: 			( BST_CHECKED==SendMsgToItem(IDC_OPENSAME, BM_GETCHECK) );
dcdd144598 2011-02-23        kinaba: 		cfg_.rememberWindowSize_ =
dcdd144598 2011-02-23        kinaba: 			( BST_CHECKED==SendMsgToItem(IDC_REMSIZE, BM_GETCHECK) );
dcdd144598 2011-02-23        kinaba: 		cfg_.rememberWindowPlace_ =
dcdd144598 2011-02-23        kinaba: 			( BST_CHECKED==SendMsgToItem(IDC_REMPLACE, BM_GETCHECK) );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 		cfg_.countbyunicode_ =
dcdd144598 2011-02-23        kinaba: 			( BST_CHECKED==SendMsgToItem(IDC_COUNTBYLETTER, BM_GETCHECK) );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 		cfg_.newfileCharset_ = cfg_.GetCharSetList()[1+SendMsgToItem(IDC_NEWCS, CB_GETCURSEL)].ID;
dcdd144598 2011-02-23        kinaba: 		cfg_.newfileLB_ = (lbcode) SendMsgToItem(IDC_NEWLB, CB_GETCURSEL);
dcdd144598 2011-02-23        kinaba: 		size_t nfd_idx=SendMsgToItem(IDC_NEWDT, CB_GETCURSEL), nfd_cnt=1;
dcdd144598 2011-02-23        kinaba: 		cfg_.newfileDoctype_ = String();
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 		SaveDt();
dcdd144598 2011-02-23        kinaba: 		cfg_.dtList_.DelAfter( ++cfg_.dtList_.begin() );
dcdd144598 2011-02-23        kinaba: 		for( DTI i=myDtl_.begin(), e=myDtl_.end(); i!=e; ++i, ++nfd_cnt )
dcdd144598 2011-02-23        kinaba: 		{
dcdd144598 2011-02-23        kinaba: 			cfg_.dtList_.Add( *i );
dcdd144598 2011-02-23        kinaba: 			if( nfd_idx == nfd_cnt )
dcdd144598 2011-02-23        kinaba: 				cfg_.newfileDoctype_ = i->name;
dcdd144598 2011-02-23        kinaba: 		}
dcdd144598 2011-02-23        kinaba: 		return true;
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: private:
dcdd144598 2011-02-23        kinaba: 	ConfigManager& cfg_;
dcdd144598 2011-02-23        kinaba: 	ConfigManager::DtList myDtl_;
dcdd144598 2011-02-23        kinaba: };
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: bool ConfigManager::DoDialog( const ki::Window& parent )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	LoadIni();
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		ConfigDlg dlg(*this, parent.hwnd());
dcdd144598 2011-02-23        kinaba: 		if( IDOK != dlg.endcode() )
dcdd144598 2011-02-23        kinaba: 			return false;
dcdd144598 2011-02-23        kinaba: 		curDt_ = dtList_.begin(); // とりあえず
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 	SaveIni();
dcdd144598 2011-02-23        kinaba: 	return true;
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: // *.lay ファイルからの読み込み処理
dcdd144598 2011-02-23        kinaba: //-------------------------------------------------------------------------
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: namespace {
dcdd144598 2011-02-23        kinaba: 	static ulong ToByte( unicode* str )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		ulong c = str[0];
dcdd144598 2011-02-23        kinaba: 			 if( L'a' <= str[0] ) c -= (L'a' - 10);
dcdd144598 2011-02-23        kinaba: 		else if( L'A' <= str[0] ) c -= (L'A' - 10);
dcdd144598 2011-02-23        kinaba: 		else                      c -=  L'0';
dcdd144598 2011-02-23        kinaba: 		c = c*16 + str[1];
dcdd144598 2011-02-23        kinaba: 			 if( L'a' <= str[1] ) c -= (L'a' - 10);
dcdd144598 2011-02-23        kinaba: 		else if( L'A' <= str[1] ) c -= (L'A' - 10);
dcdd144598 2011-02-23        kinaba: 		else                      c -=  L'0';
dcdd144598 2011-02-23        kinaba: 		return c;
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 	static ulong GetColor( unicode* str )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		return ToByte(str) + (ToByte(str+2)<<8) + (ToByte(str+4)<<16);
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 	static int GetInt( unicode* str )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		int c = 0;
dcdd144598 2011-02-23        kinaba: 		int s = 1;
dcdd144598 2011-02-23        kinaba: 		if( *str == L'-' )
dcdd144598 2011-02-23        kinaba: 			s=-1, ++str;
dcdd144598 2011-02-23        kinaba: 		for( ; *str!=L'\0'; ++str )
dcdd144598 2011-02-23        kinaba: 			c = c * 10 + *str - L'0';
dcdd144598 2011-02-23        kinaba: 		return c*s;
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: void ConfigManager::LoadLayout( ConfigManager::DocType* dt )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba:   // 1.省略値として…
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	DtList::iterator ref = dtList_.begin();
dcdd144598 2011-02-23        kinaba: 	if( ref != dtList_.end() )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		// default.layがロードされていればそれを使う
dcdd144598 2011-02-23        kinaba: 		dt->vc        = ref->vc;
dcdd144598 2011-02-23        kinaba: 		dt->wrapWidth = ref->wrapWidth;
dcdd144598 2011-02-23        kinaba: 		dt->wrapType  = ref->wrapType;
dcdd144598 2011-02-23        kinaba: 		dt->showLN    = ref->showLN;
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 	else
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		// 組み込みのデフォルト設定をロード
dcdd144598 2011-02-23        kinaba: 		dt->vc.SetFont( TEXT("FixedSys"), 14 );
dcdd144598 2011-02-23        kinaba: 		dt->vc.SetTabStep( 4 );
dcdd144598 2011-02-23        kinaba: 		dt->vc.color[TXT] = RGB(0,0,0);
dcdd144598 2011-02-23        kinaba: 		dt->vc.color[KWD] = RGB(0,90,230);
dcdd144598 2011-02-23        kinaba: 		dt->vc.color[CMT] = RGB(0,0,0);
dcdd144598 2011-02-23        kinaba: 		dt->vc.color[BG]  = RGB(255,255,255);
dcdd144598 2011-02-23        kinaba: 		dt->vc.color[CTL] = RGB(240,200,240);
dcdd144598 2011-02-23        kinaba: 		dt->vc.color[LN]  = RGB(0,0,0);
dcdd144598 2011-02-23        kinaba: 		dt->vc.sc[scEOF]  = dt->vc.sc[scEOL]=true;
dcdd144598 2011-02-23        kinaba: 		dt->vc.sc[scHSP]  = dt->vc.sc[scZSP]=dt->vc.sc[scTAB]=false;
dcdd144598 2011-02-23        kinaba: 		dt->wrapWidth  = 80;
dcdd144598 2011-02-23        kinaba: 		dt->wrapType   = -1;
dcdd144598 2011-02-23        kinaba: 		dt->showLN     = false;
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba:   // 2.*.layファイルからの読み込み
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	TextFileR tf( UTF16LE );
dcdd144598 2011-02-23        kinaba: 	if( tf.Open( (Path(Path::Exe)+TEXT("type\\")+dt->layfile).c_str() ) )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		String fontname;
dcdd144598 2011-02-23        kinaba: 		int    fontsize=0;
dcdd144598 2011-02-23        kinaba: 		int    x;
dcdd144598 2011-02-23        kinaba: 		bool   clfound = false;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 		unicode buf[1024], *ptr=buf+3;
dcdd144598 2011-02-23        kinaba: 		while( tf.state() != 0 ) // !EOF
dcdd144598 2011-02-23        kinaba: 		{
dcdd144598 2011-02-23        kinaba: 			size_t len = tf.ReadLine( buf, countof(buf)-1 );
dcdd144598 2011-02-23        kinaba: 			if( len<=3 || buf[2]!=L'=' )
dcdd144598 2011-02-23        kinaba: 				continue;
dcdd144598 2011-02-23        kinaba: 			buf[len] = L'\0';
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 			switch( (buf[0]<<16)|buf[1] )
dcdd144598 2011-02-23        kinaba: 			{
dcdd144598 2011-02-23        kinaba: 			case 0x00630074: // ct: COLOR-TEXT
dcdd144598 2011-02-23        kinaba: 				dt->vc.color[TXT] = GetColor(ptr);
dcdd144598 2011-02-23        kinaba: 				break;
dcdd144598 2011-02-23        kinaba: 			case 0x0063006B: // ck: COLOR-KEYWORD
dcdd144598 2011-02-23        kinaba: 				dt->vc.color[KWD] = GetColor(ptr);
dcdd144598 2011-02-23        kinaba: 				break;
dcdd144598 2011-02-23        kinaba: 			case 0x00630062: // cb: COLOR-BACKGROUND
dcdd144598 2011-02-23        kinaba: 				dt->vc.color[BG ] = GetColor(ptr);
dcdd144598 2011-02-23        kinaba: 				break;
dcdd144598 2011-02-23        kinaba: 			case 0x00630063: // cc: COLOR-COMMENT
dcdd144598 2011-02-23        kinaba: 				dt->vc.color[CMT] = GetColor(ptr);
dcdd144598 2011-02-23        kinaba: 				break;
dcdd144598 2011-02-23        kinaba: 			case 0x0063006E: // cn: COLOR-CONTROL
dcdd144598 2011-02-23        kinaba: 				dt->vc.color[CTL] = GetColor(ptr);
dcdd144598 2011-02-23        kinaba: 				break;
dcdd144598 2011-02-23        kinaba: 			case 0x0063006C: // cl: COLOR-LINE
dcdd144598 2011-02-23        kinaba: 				clfound = true;
dcdd144598 2011-02-23        kinaba: 				dt->vc.color[LN] = GetColor(ptr);
dcdd144598 2011-02-23        kinaba: 				break;
dcdd144598 2011-02-23        kinaba: 			case 0x00660074: // ft: FONT
dcdd144598 2011-02-23        kinaba: 				fontname = ptr;
dcdd144598 2011-02-23        kinaba: 				break;
dcdd144598 2011-02-23        kinaba: 			case 0x0073007A: // sz: SIZE
dcdd144598 2011-02-23        kinaba: 				fontsize = GetInt(ptr);
dcdd144598 2011-02-23        kinaba: 				break;
dcdd144598 2011-02-23        kinaba: 			case 0x00740062: // tb: TAB
dcdd144598 2011-02-23        kinaba: 				dt->vc.SetTabStep( GetInt(ptr) );
dcdd144598 2011-02-23        kinaba: 				break;
dcdd144598 2011-02-23        kinaba: 			case 0x00730063: // sc: SPECIAL-CHAR
dcdd144598 2011-02-23        kinaba: 				x = GetInt(ptr);
dcdd144598 2011-02-23        kinaba: 				dt->vc.sc[scZSP] = (0!=x%10); x/=10;
dcdd144598 2011-02-23        kinaba: 				dt->vc.sc[scHSP] = (0!=x%10); x/=10;
dcdd144598 2011-02-23        kinaba: 				dt->vc.sc[scTAB] = (0!=x%10); x/=10;
dcdd144598 2011-02-23        kinaba: 				dt->vc.sc[scEOL] = (0!=x%10); x/=10;
dcdd144598 2011-02-23        kinaba: 				dt->vc.sc[scEOF] = (0!=x%10);
dcdd144598 2011-02-23        kinaba: 				break;
dcdd144598 2011-02-23        kinaba: 			case 0x00770070: // wp: WRAP-TYPE
dcdd144598 2011-02-23        kinaba: 				dt->wrapType = GetInt(ptr);
dcdd144598 2011-02-23        kinaba: 				break;
dcdd144598 2011-02-23        kinaba: 			case 0x00770077: // ww: WRAP-WIDTH
dcdd144598 2011-02-23        kinaba: 				dt->wrapWidth = GetInt(ptr);
dcdd144598 2011-02-23        kinaba: 				break;
dcdd144598 2011-02-23        kinaba: 			case 0x006C006E: // ln: LINE-NO
dcdd144598 2011-02-23        kinaba: 				dt->showLN = (0!=GetInt(ptr));
dcdd144598 2011-02-23        kinaba: 				break;
dcdd144598 2011-02-23        kinaba: 			}
dcdd144598 2011-02-23        kinaba: 		}
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 		if( !clfound )
dcdd144598 2011-02-23        kinaba: 			dt->vc.color[LN] = dt->vc.color[TXT];
dcdd144598 2011-02-23        kinaba: 		if( fontname.len()!=0 && fontsize!=0 )
dcdd144598 2011-02-23        kinaba: 			dt->vc.SetFont( fontname.c_str(), fontsize );
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: // *.ini ファイルからの読み込み/書き込み処理
dcdd144598 2011-02-23        kinaba: //-------------------------------------------------------------------------
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: static const TCHAR s_sharedConfigSection[] = TEXT("SharedConfig");
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: void ConfigManager::LoadIni()
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		FileW fp;
dcdd144598 2011-02-23        kinaba: 		Path inipath(Path::Exe);
dcdd144598 2011-02-23        kinaba: 		inipath+=Path(Path::ExeName).body();
dcdd144598 2011-02-23        kinaba: 		inipath+=TEXT(".ini");
dcdd144598 2011-02-23        kinaba: 		if( !inipath.exist() && fp.Open(inipath.c_str()) )
dcdd144598 2011-02-23        kinaba: 		{
dcdd144598 2011-02-23        kinaba: 			static const char s_defaultIni[] =
dcdd144598 2011-02-23        kinaba: 			"[DocType]\r\n"
dcdd144598 2011-02-23        kinaba: 			"1=C/C++\r\n"
dcdd144598 2011-02-23        kinaba: 			"2=C#\r\n"
dcdd144598 2011-02-23        kinaba: 			"3=D\r\n"
dcdd144598 2011-02-23        kinaba: 			"4=Java\r\n"
dcdd144598 2011-02-23        kinaba: 			"5=HTML\r\n"
dcdd144598 2011-02-23        kinaba: 			"6=CSS\r\n"
dcdd144598 2011-02-23        kinaba: 			"7=Perl\r\n"
dcdd144598 2011-02-23        kinaba: 			"8=Ruby\r\n"
dcdd144598 2011-02-23        kinaba: 			"9=PHP\r\n"
dcdd144598 2011-02-23        kinaba: 			"10=Python\r\n"
dcdd144598 2011-02-23        kinaba: 			"11=Haskell\r\n"
dcdd144598 2011-02-23        kinaba: 			"12=OCaml\r\n"
dcdd144598 2011-02-23        kinaba: 			"13=INI\r\n"
dcdd144598 2011-02-23        kinaba: 			"14=UnicodeText\r\n"
dcdd144598 2011-02-23        kinaba: 			"\r\n"
dcdd144598 2011-02-23        kinaba: 			"[C/C++]\r\n"
dcdd144598 2011-02-23        kinaba: 			"Pattern=.*(\\.(c|cpp|cxx|cc|h|hpp)|include\\\\[^\\.]+)$\r\n"
dcdd144598 2011-02-23        kinaba: 			"Keyword=C.kwd\r\n"
dcdd144598 2011-02-23        kinaba: 			"Layout=program.lay\r\n"
dcdd144598 2011-02-23        kinaba: 			"\r\n"
dcdd144598 2011-02-23        kinaba: 			"[Java]\r\n"
dcdd144598 2011-02-23        kinaba: 			"Pattern=.*\\.java$\r\n"
dcdd144598 2011-02-23        kinaba: 			"Keyword=Java.kwd\r\n"
dcdd144598 2011-02-23        kinaba: 			"Layout=program.lay\r\n"
dcdd144598 2011-02-23        kinaba: 			"\r\n"
dcdd144598 2011-02-23        kinaba: 			"[HTML]\r\n"
dcdd144598 2011-02-23        kinaba: 			"Pattern=.*(\\.html|\\.htm|temporary internet files\\\\.+)$\r\n"
dcdd144598 2011-02-23        kinaba: 			"Keyword=HTML.kwd\r\n"
dcdd144598 2011-02-23        kinaba: 			"Layout=html.lay\r\n"
dcdd144598 2011-02-23        kinaba: 			"\r\n"
dcdd144598 2011-02-23        kinaba: 			"[CSS]\r\n"
dcdd144598 2011-02-23        kinaba: 			"Pattern=.*\\.css$\r\n"
dcdd144598 2011-02-23        kinaba: 			"Keyword=CSS.kwd\r\n"
dcdd144598 2011-02-23        kinaba: 			"Layout=program.lay\r\n"
dcdd144598 2011-02-23        kinaba: 			"\r\n"
dcdd144598 2011-02-23        kinaba: 			"[PHP]\r\n"
dcdd144598 2011-02-23        kinaba: 			"Pattern=.*\\.(php|php3|php4)$\r\n"
dcdd144598 2011-02-23        kinaba: 			"Keyword=PHP.kwd\r\n"
dcdd144598 2011-02-23        kinaba: 			"Layout=program.lay\r\n"
dcdd144598 2011-02-23        kinaba: 			"\r\n"
dcdd144598 2011-02-23        kinaba: 			"[Python]\r\n"
dcdd144598 2011-02-23        kinaba: 			"Pattern=.*\\.py$\r\n"
dcdd144598 2011-02-23        kinaba: 			"Keyword=Python.kwd\r\n"
dcdd144598 2011-02-23        kinaba: 			"Layout=program.lay\r\n"
dcdd144598 2011-02-23        kinaba: 			"\r\n"
dcdd144598 2011-02-23        kinaba: 			"[Ruby]\r\n"
dcdd144598 2011-02-23        kinaba: 			"Pattern=.*\\.rb$\r\n"
dcdd144598 2011-02-23        kinaba: 			"Keyword=Ruby.kwd\r\n"
dcdd144598 2011-02-23        kinaba: 			"Layout=program.lay\r\n"
dcdd144598 2011-02-23        kinaba: 			"\r\n"
dcdd144598 2011-02-23        kinaba: 			"[D]\r\n"
dcdd144598 2011-02-23        kinaba: 			"Pattern=.*\\.d$\r\n"
dcdd144598 2011-02-23        kinaba: 			"Keyword=D.kwd\r\n"
dcdd144598 2011-02-23        kinaba: 			"Layout=program.lay\r\n"
dcdd144598 2011-02-23        kinaba: 			"\r\n"
dcdd144598 2011-02-23        kinaba: 			"[Haskell]\r\n"
dcdd144598 2011-02-23        kinaba: 			"Pattern=.*\\.l?hs$\r\n"
dcdd144598 2011-02-23        kinaba: 			"Keyword=Haskell.kwd\r\n"
dcdd144598 2011-02-23        kinaba: 			"Layout=program.lay\r\n"
dcdd144598 2011-02-23        kinaba: 			"\r\n"
dcdd144598 2011-02-23        kinaba: 			"[OCaml]\r\n"
dcdd144598 2011-02-23        kinaba: 			"Pattern=.*\\.mli?$\r\n"
dcdd144598 2011-02-23        kinaba: 			"Keyword=OCaml.kwd\r\n"
dcdd144598 2011-02-23        kinaba: 			"Layout=program.lay\r\n"
dcdd144598 2011-02-23        kinaba: 			"\r\n"
dcdd144598 2011-02-23        kinaba: 			"[C#]\r\n"
dcdd144598 2011-02-23        kinaba: 			"Pattern=.*\\.cs$\r\n"
dcdd144598 2011-02-23        kinaba: 			"Keyword=C#.kwd\r\n"
dcdd144598 2011-02-23        kinaba: 			"Layout=program.lay\r\n"
dcdd144598 2011-02-23        kinaba: 			"\r\n"
dcdd144598 2011-02-23        kinaba: 			"[INI]\r\n"
dcdd144598 2011-02-23        kinaba: 			"Pattern=.*\\.ini$\r\n"
dcdd144598 2011-02-23        kinaba: 			"Keyword=ini.kwd\r\n"
dcdd144598 2011-02-23        kinaba: 			"\r\n"
dcdd144598 2011-02-23        kinaba: 			"[Perl]\r\n"
dcdd144598 2011-02-23        kinaba: 			"Pattern=.*\\.(pl|pm|cgi)$\r\n"
dcdd144598 2011-02-23        kinaba: 			"Keyword=perl.kwd\r\n"
dcdd144598 2011-02-23        kinaba: 			"Layout=program.lay\r\n"
dcdd144598 2011-02-23        kinaba: 			"\r\n"
dcdd144598 2011-02-23        kinaba: 			"[UnicodeText]\r\n"
dcdd144598 2011-02-23        kinaba: 			"Layout=unitext.lay\r\n"
dcdd144598 2011-02-23        kinaba: 			"\r\n";
dcdd144598 2011-02-23        kinaba: 			fp.Write( s_defaultIni, sizeof(s_defaultIni)-1 );
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: 	sharedConfigMode_ = ini_.HasSectionEnabled( s_sharedConfigSection );
dcdd144598 2011-02-23        kinaba: 	if( sharedConfigMode_ )
dcdd144598 2011-02-23        kinaba: 		ini_.SetSection( s_sharedConfigSection );
dcdd144598 2011-02-23        kinaba: 	else
dcdd144598 2011-02-23        kinaba: 		ini_.SetSectionAsUserName();
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// 共通の設定
dcdd144598 2011-02-23        kinaba: 	undoLimit_ = ini_.GetInt( TEXT("UndoLimit"), -1 );
dcdd144598 2011-02-23        kinaba: 	txtFilter_ = ini_.GetStr( TEXT("TxtFilter"),
dcdd144598 2011-02-23        kinaba: 		TEXT("*.txt;*.htm;*.html;*.css;*.js;*.d;*.c;*.cpp;*.cc;*.cxx;*.h;*.hpp;*.php;*.php3;*.ini") );
dcdd144598 2011-02-23        kinaba: 	grepExe_   = ini_.GetStr( TEXT("GrepExe"), TEXT("") );
dcdd144598 2011-02-23        kinaba: 	openSame_  = ini_.GetBool( TEXT("OpenSame"), false );
dcdd144598 2011-02-23        kinaba: 	countbyunicode_ = ini_.GetBool( TEXT("CountUni"), false );
dcdd144598 2011-02-23        kinaba: 	showStatusBar_ = ini_.GetBool( TEXT("StatusBar"), true );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// wnd
dcdd144598 2011-02-23        kinaba: 	rememberWindowSize_  = ini_.GetBool( TEXT("RememberWindowSize"), false );
dcdd144598 2011-02-23        kinaba: 	rememberWindowPlace_ = ini_.GetBool( TEXT("RememberWindowPos"), false );
dcdd144598 2011-02-23        kinaba: 	wndX_ = ini_.GetInt( TEXT("WndX"), CW_USEDEFAULT );
dcdd144598 2011-02-23        kinaba: 	wndY_ = ini_.GetInt( TEXT("WndY"), CW_USEDEFAULT );
dcdd144598 2011-02-23        kinaba: 	wndW_ = ini_.GetInt( TEXT("WndW"), CW_USEDEFAULT );
dcdd144598 2011-02-23        kinaba: 	wndH_ = ini_.GetInt( TEXT("WndH"), CW_USEDEFAULT );
dcdd144598 2011-02-23        kinaba: 	wndM_ = ini_.GetBool( TEXT("WndM"), false );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// TODO: MRU
dcdd144598 2011-02-23        kinaba: 	mrus_ = ini_.GetInt( TEXT("MRU"), 4 );
dcdd144598 2011-02-23        kinaba: 	mrus_ = Min(Max(0, mrus_), 20);
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// 新規ファイル関係
dcdd144598 2011-02-23        kinaba: 	newfileCharset_ = ini_.GetInt( TEXT("NewfileCharset"), charSets_.defaultCs() );
dcdd144598 2011-02-23        kinaba: 	if(newfileCharset_ == -1) newfileCharset_ = 1252; // 1.07.4 bugfix
dcdd144598 2011-02-23        kinaba: 	newfileDoctype_ = ini_.GetStr( TEXT("NewfileDoctype"), String() );
dcdd144598 2011-02-23        kinaba: 	newfileLB_      = (lbcode) ini_.GetInt( TEXT("NewfileLB"), CRLF );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// 文書タイプリストの0番以外のクリア
dcdd144598 2011-02-23        kinaba: 	dtList_.DelAfter( ++dtList_.begin() );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	String s, r;
dcdd144598 2011-02-23        kinaba: 	for( int i=1; true; ++i )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		// 文書タイプ名を読み込み
dcdd144598 2011-02-23        kinaba: 		ini_.SetSection( TEXT("DocType") );
dcdd144598 2011-02-23        kinaba: 		s.SetInt(i);
dcdd144598 2011-02-23        kinaba: 		r = ini_.GetStr( s.c_str(), String() );
dcdd144598 2011-02-23        kinaba: 		if( r.len() == 0 )
dcdd144598 2011-02-23        kinaba: 			break;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 		// その文書タイプを実際に読み込み
dcdd144598 2011-02-23        kinaba: 		ini_.SetSection( r.c_str() );
dcdd144598 2011-02-23        kinaba: 		{
dcdd144598 2011-02-23        kinaba: 			DocType d;
dcdd144598 2011-02-23        kinaba: 			d.name      = r;
dcdd144598 2011-02-23        kinaba: 			d.layfile   = ini_.GetStr( TEXT("Layout"),TEXT("default.lay"));
dcdd144598 2011-02-23        kinaba: 			d.kwdfile   = ini_.GetStr( TEXT("Keyword"), String() );
dcdd144598 2011-02-23        kinaba: 			d.pattern   = ini_.GetStr( TEXT("Pattern"), String() );
dcdd144598 2011-02-23        kinaba: 			dtList_.Add( d );
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: void ConfigManager::SaveIni()
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		Path inipath(Path::Exe);
dcdd144598 2011-02-23        kinaba: 		inipath+=Path(Path::ExeName).body();
dcdd144598 2011-02-23        kinaba: 		inipath+=TEXT(".ini");
dcdd144598 2011-02-23        kinaba: 		if( inipath.isReadOnly() )
dcdd144598 2011-02-23        kinaba: 			return;
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// 共通の設定の書き込みセクション
dcdd144598 2011-02-23        kinaba: 	if( sharedConfigMode_ )
dcdd144598 2011-02-23        kinaba: 		ini_.SetSection( s_sharedConfigSection );
dcdd144598 2011-02-23        kinaba: 	else
dcdd144598 2011-02-23        kinaba: 		ini_.SetSectionAsUserName();
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// 共通の設定
dcdd144598 2011-02-23        kinaba: 	ini_.PutInt( TEXT("UndoLimit"), undoLimit_ );
dcdd144598 2011-02-23        kinaba: 	ini_.PutStr( TEXT("TxtFilter"), txtFilter_.c_str() );
dcdd144598 2011-02-23        kinaba: 	ini_.PutStr( TEXT("GrepExe"), grepExe_.c_str() );
dcdd144598 2011-02-23        kinaba: 	ini_.PutBool( TEXT("OpenSame"), openSame_ );
dcdd144598 2011-02-23        kinaba: 	ini_.PutBool( TEXT("CountUni"), countbyunicode_ );
dcdd144598 2011-02-23        kinaba: 	ini_.PutBool( TEXT("StatusBar"), showStatusBar_ );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// Wnd
dcdd144598 2011-02-23        kinaba: 	ini_.PutBool( TEXT("RememberWindowSize"), rememberWindowSize_ );
dcdd144598 2011-02-23        kinaba: 	ini_.PutBool( TEXT("RememberWindowPos"), rememberWindowPlace_ );
dcdd144598 2011-02-23        kinaba: 	ini_.PutInt( TEXT("WndX"), wndX_ );
dcdd144598 2011-02-23        kinaba: 	ini_.PutInt( TEXT("WndY"), wndY_ );
dcdd144598 2011-02-23        kinaba: 	ini_.PutInt( TEXT("WndW"), wndW_ );
dcdd144598 2011-02-23        kinaba: 	ini_.PutInt( TEXT("WndH"), wndH_ );
dcdd144598 2011-02-23        kinaba: 	ini_.PutBool( TEXT("WndM"), wndM_ );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// 新規ファイル関係
dcdd144598 2011-02-23        kinaba: 	ini_.PutInt( TEXT("NewfileCharset"), newfileCharset_ );
dcdd144598 2011-02-23        kinaba: 	ini_.PutStr( TEXT("NewfileDoctype"), newfileDoctype_.c_str() );
dcdd144598 2011-02-23        kinaba: 	ini_.PutInt( TEXT("NewfileLB"),      newfileLB_      );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// MRU
dcdd144598 2011-02-23        kinaba: 	ini_.PutInt( TEXT("MRU"), mrus_ );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// DocType
dcdd144598 2011-02-23        kinaba: 	for(DtList::iterator i=++dtList_.begin(); i!=dtList_.end(); ++i )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		ini_.SetSection( i->name.c_str() );
dcdd144598 2011-02-23        kinaba: 		ini_.PutStr( TEXT("Pattern"), i->pattern.c_str() );
dcdd144598 2011-02-23        kinaba: 		ini_.PutStr( TEXT("Keyword"), i->kwdfile.c_str() );
dcdd144598 2011-02-23        kinaba: 		ini_.PutStr( TEXT("Layout"), i->layfile.c_str() );
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	ulong ct=1;
dcdd144598 2011-02-23        kinaba: 	ini_.SetSection( TEXT("DocType") );
dcdd144598 2011-02-23        kinaba: 	for(DtList::iterator i=++dtList_.begin(); i!=dtList_.end(); ++i,++ct)
dcdd144598 2011-02-23        kinaba: 		ini_.PutStr( String().SetInt(ct).c_str(), i->name.c_str() );
dcdd144598 2011-02-23        kinaba: 	ini_.PutStr( String().SetInt(ct).c_str(), TEXT("") );
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: //-------------------------------------------------------------------------
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: namespace {
dcdd144598 2011-02-23        kinaba: 	static const TCHAR* const s_mrulock = TEXT("GreenPad_MRUMutex");
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: void ConfigManager::AddMRU( const ki::Path& fname )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	Mutex mx(s_mrulock);
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// メモリ内のMRUリストを更新
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		int i;
dcdd144598 2011-02-23        kinaba: 		for( i=0; i<countof(mru_); ++i )
dcdd144598 2011-02-23        kinaba: 			if( mru_[i] == fname )
dcdd144598 2011-02-23        kinaba: 			{++i; break;}
dcdd144598 2011-02-23        kinaba: 		for( --i; i>0; --i )
dcdd144598 2011-02-23        kinaba: 			mru_[i] = mru_[i-1];
dcdd144598 2011-02-23        kinaba: 		mru_[0] = fname;
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// iniへ保存
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		ini_.SetSectionAsUserName();
dcdd144598 2011-02-23        kinaba: 		const String key = TEXT("MRU");
dcdd144598 2011-02-23        kinaba: 		for( int i=0; i<countof(mru_); ++i )
dcdd144598 2011-02-23        kinaba: 			ini_.PutPath(
dcdd144598 2011-02-23        kinaba: 				(key+String().SetInt(i+1)).c_str(), mru_[i] );
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: void ConfigManager::SetUpMRUMenu( HMENU m, UINT id )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	Mutex mx(s_mrulock);
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// iniから読み込み
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		ini_.SetSectionAsUserName();
dcdd144598 2011-02-23        kinaba: 		const String key = TEXT("MRU");
dcdd144598 2011-02-23        kinaba: 		for( int i=0; i<countof(mru_); ++i )
dcdd144598 2011-02-23        kinaba: 			mru_[i] = ini_.GetPath(
dcdd144598 2011-02-23        kinaba: 				(key+String().SetInt(i+1)).c_str(), Path() );
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// 全項目を削除
dcdd144598 2011-02-23        kinaba: 	while( ::DeleteMenu( m, 0, MF_BYPOSITION ) );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// メニュー構築
dcdd144598 2011-02-23        kinaba: 	MENUITEMINFO mi = { sizeof(MENUITEMINFO) };
dcdd144598 2011-02-23        kinaba: 	mi.fMask = MIIM_ID | MIIM_TYPE;
dcdd144598 2011-02-23        kinaba: 	mi.fType = MFT_STRING;
dcdd144598 2011-02-23        kinaba: 	for( int i=0; i<countof(mru_); ++i )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		if( i>=mrus_ || mru_[i].len()==0 )
dcdd144598 2011-02-23        kinaba: 		{
dcdd144598 2011-02-23        kinaba: 			if( i==0 )
dcdd144598 2011-02-23        kinaba: 			{
dcdd144598 2011-02-23        kinaba: 				mi.fMask     |= MIIM_STATE;
dcdd144598 2011-02-23        kinaba: 				mi.wID        = id;
dcdd144598 2011-02-23        kinaba: 				mi.fState     = MFS_DISABLED;
dcdd144598 2011-02-23        kinaba: 				mi.dwTypeData = TEXT("no files");
dcdd144598 2011-02-23        kinaba: 				mi.cch        = 0;
dcdd144598 2011-02-23        kinaba: 				::InsertMenuItem( m, 0, MF_BYPOSITION, &mi );
dcdd144598 2011-02-23        kinaba: 			}
dcdd144598 2011-02-23        kinaba: 			break;
dcdd144598 2011-02-23        kinaba: 		}
dcdd144598 2011-02-23        kinaba: 		String cpt = mru_[i].CompactIfPossible(60);
dcdd144598 2011-02-23        kinaba: 		mi.wID        = id + i;
dcdd144598 2011-02-23        kinaba: 		mi.dwTypeData = const_cast<TCHAR*>(cpt.c_str());
dcdd144598 2011-02-23        kinaba: 		mi.cch        = cpt.len();
dcdd144598 2011-02-23        kinaba: 		::InsertMenuItem( m, i, MF_BYPOSITION, &mi );
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: Path ConfigManager::GetMRU( int no ) const
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	return (0<=no && no<mrus_ ? mru_[no] : Path());
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: 
dcdd144598 2011-02-23        kinaba: void ConfigManager::RememberWnd( ki::Window* wnd )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	RECT rc;
dcdd144598 2011-02-23        kinaba: 	wnd->getPos(&rc);
dcdd144598 2011-02-23        kinaba: 	WINDOWPLACEMENT wp = {sizeof(wp)};
dcdd144598 2011-02-23        kinaba: 	::GetWindowPlacement( wnd->hwnd(), &wp );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	if( wp.showCmd==SW_SHOWNORMAL || wp.showCmd == SW_MAXIMIZE )
dcdd144598 2011-02-23        kinaba: 		wndM_ = (wp.showCmd == SW_MAXIMIZE);
dcdd144598 2011-02-23        kinaba: 	if( wp.showCmd==SW_SHOWNORMAL )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		wndX_ = rc.left;
dcdd144598 2011-02-23        kinaba: 		wndY_ = rc.top;
dcdd144598 2011-02-23        kinaba: 		wndW_ = rc.right- rc.left;
dcdd144598 2011-02-23        kinaba: 		wndH_ = rc.bottom - rc.top;
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: 	//if( this->rememberWindowPlace_ || this->rememberWindowSize_ )
dcdd144598 2011-02-23        kinaba: 	//	SaveIni();
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: void ConfigManager::SetDocTypeMenu( HMENU m, UINT idstart )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	// 全項目を削除
dcdd144598 2011-02-23        kinaba: 	while( ::DeleteMenu( m, 0, MF_BYPOSITION ) );
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	// 順に追加
dcdd144598 2011-02-23        kinaba: 	MENUITEMINFO mi = { sizeof(MENUITEMINFO) };
dcdd144598 2011-02-23        kinaba: 	mi.fMask = MIIM_ID | MIIM_STATE | MIIM_TYPE;
dcdd144598 2011-02-23        kinaba: 	mi.fType = MFT_STRING | MFT_RADIOCHECK;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	DtList::iterator i=dtList_.begin(), e=dtList_.end();
dcdd144598 2011-02-23        kinaba: 	for( int ct=0; i!=e; ++i, ++ct )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		mi.wID        = idstart + ct;
dcdd144598 2011-02-23        kinaba: 		mi.fState     = (i==curDt_ ? MFS_CHECKED : MFS_UNCHECKED);
dcdd144598 2011-02-23        kinaba: 		mi.dwTypeData = const_cast<TCHAR*>(i->name.c_str());
dcdd144598 2011-02-23        kinaba: 		mi.cch        = i->name.len();
dcdd144598 2011-02-23        kinaba: 		::InsertMenuItem( m, ct, MF_BYPOSITION, &mi );
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: void ConfigManager::SetDocTypeByMenu( int pos, HMENU m )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	MENUITEMINFO mi = { sizeof(MENUITEMINFO) };
dcdd144598 2011-02-23        kinaba: 	mi.fMask  = MIIM_STATE;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	DtList::iterator i=dtList_.begin(), e=dtList_.end();
dcdd144598 2011-02-23        kinaba: 	for( int ct=0; i!=e; ++i, ++ct )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		mi.fState     = (ct==pos ? MFS_CHECKED : MFS_UNCHECKED);
dcdd144598 2011-02-23        kinaba: 		::SetMenuItemInfo( m, ct, MF_BYPOSITION, &mi );
dcdd144598 2011-02-23        kinaba: 		if( ct == pos )
dcdd144598 2011-02-23        kinaba: 		{
dcdd144598 2011-02-23        kinaba: 			curDt_ = i;
dcdd144598 2011-02-23        kinaba: 			LoadLayout( &*curDt_ );
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: void ConfigManager::CheckMenu( HMENU m, int pos )
dcdd144598 2011-02-23        kinaba: {
dcdd144598 2011-02-23        kinaba: 	MENUITEMINFO mi = { sizeof(MENUITEMINFO) };
dcdd144598 2011-02-23        kinaba: 	mi.fMask  = MIIM_STATE;
dcdd144598 2011-02-23        kinaba: 
dcdd144598 2011-02-23        kinaba: 	DtList::iterator i=dtList_.begin(), e=dtList_.end();
dcdd144598 2011-02-23        kinaba: 	for( int ct=0; i!=e; ++i, ++ct )
dcdd144598 2011-02-23        kinaba: 	{
dcdd144598 2011-02-23        kinaba: 		mi.fState     = (ct==pos ? MFS_CHECKED : MFS_UNCHECKED);
dcdd144598 2011-02-23        kinaba: 		::SetMenuItemInfo( m, ct, MF_BYPOSITION, &mi );
dcdd144598 2011-02-23        kinaba: 	}
dcdd144598 2011-02-23        kinaba: }
dcdd144598 2011-02-23        kinaba: