File Annotation

Not logged in
13b7203622 2011-02-23        kinaba: // NoahCM.cpp
13b7203622 2011-02-23        kinaba: //-- CNoahConfigManager -- save / load / modify the setting of 'Noah' --
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: #include "stdafx.h"
13b7203622 2011-02-23        kinaba: #include "resource.h"
13b7203622 2011-02-23        kinaba: #include "NoahApp.h"
13b7203622 2011-02-23        kinaba: #include "NoahCM.h"
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: //----------------------------------------------//
13b7203622 2011-02-23        kinaba: //---------- INIファイル名の設定など -----------//
13b7203622 2011-02-23        kinaba: //----------------------------------------------//
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: void CNoahConfigManager::init()
13b7203622 2011-02-23        kinaba: {
13b7203622 2011-02-23        kinaba: 	//-- caldix.iniがもしあればDLLインストール先を読み込み。環境変数に追加
13b7203622 2011-02-23        kinaba: 	{
13b7203622 2011-02-23        kinaba: 		kiIniFile caldini;
13b7203622 2011-02-23        kinaba: 		caldini.setFileName( "caldix.ini" );
13b7203622 2011-02-23        kinaba: 		caldini.setSection(  "conf" );
13b7203622 2011-02-23        kinaba: 		kiStr dll_to = caldini.getStr( "dll", "" );
13b7203622 2011-02-23        kinaba: 		if( dll_to.len() != 0 )
13b7203622 2011-02-23        kinaba: 		{
13b7203622 2011-02-23        kinaba: 			int siz = ::GetEnvironmentVariable( "PATH", NULL, 0 );
13b7203622 2011-02-23        kinaba: 			char* buf = new char[siz+1];
13b7203622 2011-02-23        kinaba: 			::GetEnvironmentVariable( "PATH", buf, siz+1 );
13b7203622 2011-02-23        kinaba: 			::SetEnvironmentVariable( "PATH", (kiStr(buf)+=";")+=dll_to );
13b7203622 2011-02-23        kinaba: 			delete [] buf;
13b7203622 2011-02-23        kinaba: 		}
13b7203622 2011-02-23        kinaba: 	}
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 	//-- 設定読み込み済みフラグをクリア
13b7203622 2011-02-23        kinaba: 	m_Loaded = 0;
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 	//-- iniファイル名設定
13b7203622 2011-02-23        kinaba: 	char usr[256];
13b7203622 2011-02-23        kinaba: 	DWORD siz=sizeof(usr);
13b7203622 2011-02-23        kinaba: 	if( !::GetUserName( usr, &siz ) )
13b7203622 2011-02-23        kinaba: 		ki_strcpy( usr, "Default" );
13b7203622 2011-02-23        kinaba: 	m_Ini.setFileName( "Noah.ini" );
13b7203622 2011-02-23        kinaba: 	m_Ini.setSection( usr );
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 	//-- 解凍用設定は全部ロードしておく
13b7203622 2011-02-23        kinaba: 	load( Melt );
13b7203622 2011-02-23        kinaba: }
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: //----------------------------------------------//
13b7203622 2011-02-23        kinaba: //------------ 設定の load & save --------------//
13b7203622 2011-02-23        kinaba: //----------------------------------------------//
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: typedef bool (WINAPI * XT_IA)();
13b7203622 2011-02-23        kinaba: typedef void (WINAPI * XT_LS)(bool*,bool*);
13b7203622 2011-02-23        kinaba: typedef void (WINAPI * XT_SS)(bool,bool);
13b7203622 2011-02-23        kinaba: typedef void (WINAPI * XT_AS)(bool*);
13b7203622 2011-02-23        kinaba: typedef void (WINAPI * XT_LSEX)(const char*,bool*);
13b7203622 2011-02-23        kinaba: typedef void (WINAPI * XT_SSEX)(const char*,bool);
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: void CNoahConfigManager::load( loading_flag what )
13b7203622 2011-02-23        kinaba: {
13b7203622 2011-02-23        kinaba: 	if( (what & Mode) && !(m_Loaded & Mode) ) //----------- モード
13b7203622 2011-02-23        kinaba: 	{
13b7203622 2011-02-23        kinaba: 		m_Mode     = m_Ini.getInt( "Mode", 2 ) & 3;
13b7203622 2011-02-23        kinaba: 		m_MiniBoot = m_Ini.getBool( "MiniBoot", false );
13b7203622 2011-02-23        kinaba: 		m_OneExt   = m_Ini.getBool( "OneExt", false );
13b7203622 2011-02-23        kinaba: 		m_ZeroExt  = m_Ini.getBool( "NoExt", false );
13b7203622 2011-02-23        kinaba: 		m_MbLim    = max( 1, m_Ini.getInt( "MultiBootLimit", 4 ) );
13b7203622 2011-02-23        kinaba: 	}
13b7203622 2011-02-23        kinaba: 	if( (what & Melt) && !(m_Loaded & Melt) ) //----------- 解凍
13b7203622 2011-02-23        kinaba: 	{
13b7203622 2011-02-23        kinaba: 		const char* x = m_Ini.getStr( "MDir", kiPath( kiPath::Dsk ) );
13b7203622 2011-02-23        kinaba: 		m_MDirSm = (*x=='@');
13b7203622 2011-02-23        kinaba: 		m_MDir   = (*x=='@') ? x+1 : x;
13b7203622 2011-02-23        kinaba: 		const int m = m_Ini.getInt( "MkDir", 2 );
13b7203622 2011-02-23        kinaba: 		m_MNoNum = ( m>=16 );
13b7203622 2011-02-23        kinaba: 		m_MkDir  = ( m&3 );
13b7203622 2011-02-23        kinaba: 		m_Kill   = m_Ini.getStr( "Kill", "" );
13b7203622 2011-02-23        kinaba: 	}
13b7203622 2011-02-23        kinaba: 	if( (what & Compress) && !(m_Loaded & Compress) ) //--- 圧縮
13b7203622 2011-02-23        kinaba: 	{
13b7203622 2011-02-23        kinaba: 		const char* x = m_Ini.getStr( "CDir", kiPath( kiPath::Dsk ) );
13b7203622 2011-02-23        kinaba: 		m_CDirSm = (*x=='@');
13b7203622 2011-02-23        kinaba: 		m_CDir   = (*x=='@') ? x+1 : x;
13b7203622 2011-02-23        kinaba: 		m_CExt = m_Ini.getStr( "CExt", "zip" );
13b7203622 2011-02-23        kinaba: 		m_CMhd = m_Ini.getStr( "CMhd", "7-zip" );
13b7203622 2011-02-23        kinaba: 	}
13b7203622 2011-02-23        kinaba: 	if( (what & Shell) && !(m_Loaded & Shell) )	//---------- ショートカット
13b7203622 2011-02-23        kinaba: 												//---------- 関連づけ
13b7203622 2011-02-23        kinaba: 												//---------- シェルエクステンション
13b7203622 2011-02-23        kinaba: 	{
13b7203622 2011-02-23        kinaba: 		m_OldVer = m_Ini.getBool( "OldAbout", false );
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 		kiPath SndLink(kiPath::Snd),DskLink(kiPath::Dsk);
13b7203622 2011-02-23        kinaba: 		SndLink += "Noah.lnk", DskLink += "Noah.lnk";
13b7203622 2011-02-23        kinaba: 		m_SCSendTo = kiSUtil::exist(SndLink);
13b7203622 2011-02-23        kinaba: 		m_SCDesktop= kiSUtil::exist(DskLink);
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 		m_bShlOK = NOSHL;
13b7203622 2011-02-23        kinaba: 		m_hNoahXtDLL = kiSUtil::loadLibrary( "NoahXt" );
13b7203622 2011-02-23        kinaba: 		if( m_hNoahXtDLL )
13b7203622 2011-02-23        kinaba: 		{
13b7203622 2011-02-23        kinaba: 			XT_IA Init = (XT_IA)getProc( "Init" );
13b7203622 2011-02-23        kinaba: 			m_bShlOK = ( Init() ? SHLOK : NOADMIN );
13b7203622 2011-02-23        kinaba: 			XT_LS LoadSE = (XT_LS)getProc( "LoadSE" );
13b7203622 2011-02-23        kinaba: 			XT_AS LoadAssoc = (XT_AS)getProc( "LoadAS" );
13b7203622 2011-02-23        kinaba: 			XT_LSEX LoadASEx = (XT_LSEX)getProc( "LoadASEx" );
13b7203622 2011-02-23        kinaba: 			LoadSE( &m_SECmp, &m_SEExt );
13b7203622 2011-02-23        kinaba: 			LoadAssoc( m_bAsso );
13b7203622 2011-02-23        kinaba: 			LoadASEx( "7z\0", &m_bAsso[12] );
13b7203622 2011-02-23        kinaba: 		}
13b7203622 2011-02-23        kinaba: 	}
13b7203622 2011-02-23        kinaba: 	if( (what & OpenDir) && !(m_Loaded & OpenDir) ) //------ フォルダオープン
13b7203622 2011-02-23        kinaba: 	{
13b7203622 2011-02-23        kinaba: 		m_MODir = m_Ini.getBool( "MODir", true );
13b7203622 2011-02-23        kinaba: 		m_CODir = m_Ini.getBool( "CODir", true );
13b7203622 2011-02-23        kinaba: 		m_OpenBy = m_Ini.getStr( "OpenBy", kiPath(kiPath::Win)+"explorer.exe \"%s\"" );
13b7203622 2011-02-23        kinaba: 	}
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 	m_Loaded |= what;
13b7203622 2011-02-23        kinaba: }
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: void CNoahConfigManager::save()
13b7203622 2011-02-23        kinaba: {
13b7203622 2011-02-23        kinaba: 	kiStr tmp;
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 	//-- モード
13b7203622 2011-02-23        kinaba: 	m_Ini.putInt( "Mode", m_Mode );
13b7203622 2011-02-23        kinaba: 	//-- 解凍
13b7203622 2011-02-23        kinaba: 	tmp = m_MDirSm ? "@" : "", tmp+= m_MDir;
13b7203622 2011-02-23        kinaba: 	m_Ini.putStr( "MDir", tmp );
13b7203622 2011-02-23        kinaba: 	m_Ini.putInt( "MkDir", m_MkDir+(m_MNoNum?16:0) );
13b7203622 2011-02-23        kinaba: 	//-- 圧縮
13b7203622 2011-02-23        kinaba: 	tmp = m_CDirSm ? "@" : "", tmp+= m_CDir;
13b7203622 2011-02-23        kinaba: 	m_Ini.putStr( "CDir", tmp );
13b7203622 2011-02-23        kinaba: 	m_Ini.putStr( "CExt", m_CExt );
13b7203622 2011-02-23        kinaba: 	m_Ini.putStr( "CMhd", m_CMhd );
13b7203622 2011-02-23        kinaba: 	//-- ショートカット
13b7203622 2011-02-23        kinaba: 	kiPath SndLink(kiPath::Snd); SndLink += "Noah.lnk";
13b7203622 2011-02-23        kinaba: 	kiPath DskLink(kiPath::Dsk); DskLink += "Noah.lnk";
13b7203622 2011-02-23        kinaba: 	if( m_SCSendTo )
13b7203622 2011-02-23        kinaba: 	{
13b7203622 2011-02-23        kinaba: 		if( !kiSUtil::exist(SndLink) )
13b7203622 2011-02-23        kinaba: 			kiSUtil::createShortCut( kiPath(kiPath::Snd), "Noah" );
13b7203622 2011-02-23        kinaba: 	}
13b7203622 2011-02-23        kinaba: 	else
13b7203622 2011-02-23        kinaba: 		::DeleteFile(SndLink);
13b7203622 2011-02-23        kinaba: 	if( m_SCDesktop )
13b7203622 2011-02-23        kinaba: 	{
13b7203622 2011-02-23        kinaba: 		if( !kiSUtil::exist(DskLink) )
13b7203622 2011-02-23        kinaba: 			kiSUtil::createShortCut( kiPath(kiPath::Dsk), "Noah" );
13b7203622 2011-02-23        kinaba: 	}
13b7203622 2011-02-23        kinaba: 	else
13b7203622 2011-02-23        kinaba: 		::DeleteFile(DskLink);
13b7203622 2011-02-23        kinaba: 	//-- 関連づけ・シェルエクステンション
13b7203622 2011-02-23        kinaba: 	if( m_bShlOK )
13b7203622 2011-02-23        kinaba: 	{
13b7203622 2011-02-23        kinaba: 		XT_SS SaveSE = (XT_SS)getProc( "SaveSE" );
13b7203622 2011-02-23        kinaba: 		XT_AS SaveAssoc = (XT_AS)getProc( "SaveAS" );
13b7203622 2011-02-23        kinaba: 		XT_SSEX SaveASEx = (XT_SSEX)getProc( "SaveASEx" );
13b7203622 2011-02-23        kinaba: 		SaveSE( m_SECmp, m_SEExt );
13b7203622 2011-02-23        kinaba: 		SaveAssoc( m_bAsso );
13b7203622 2011-02-23        kinaba: 		SaveASEx( "7z\0", m_bAsso[12] );
13b7203622 2011-02-23        kinaba: 	}
13b7203622 2011-02-23        kinaba: 	//-- フォルダオープン
13b7203622 2011-02-23        kinaba: 	m_Ini.putBool("MODir", m_MODir );
13b7203622 2011-02-23        kinaba: 	m_Ini.putBool("CODir", m_CODir );
13b7203622 2011-02-23        kinaba: }
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: void CNoahConfigManager::dialog()
13b7203622 2011-02-23        kinaba: {
13b7203622 2011-02-23        kinaba: 	CNoahConfigDialog dlg;
13b7203622 2011-02-23        kinaba: 	dlg.createModeless( NULL );
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 	app()->setMainWnd( &dlg );
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 	if( dlg.isAlive() )
13b7203622 2011-02-23        kinaba: 		kiWindow::msgLoop();
13b7203622 2011-02-23        kinaba: }
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: FARPROC CNoahConfigManager::getProc( const char* name )
13b7203622 2011-02-23        kinaba: {
13b7203622 2011-02-23        kinaba: 	return ::GetProcAddress( m_hNoahXtDLL, name );
13b7203622 2011-02-23        kinaba: }
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: //----------------------------------------------//
13b7203622 2011-02-23        kinaba: //--------------- ダイアログ関係 ---------------//
13b7203622 2011-02-23        kinaba: //----------------------------------------------//
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: ///////// 初期化 /////////////
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: #define IDI_LZH 101
13b7203622 2011-02-23        kinaba: #define IDI_ZIP 102
13b7203622 2011-02-23        kinaba: #define IDI_CAB 103
13b7203622 2011-02-23        kinaba: #define IDI_RAR 104
13b7203622 2011-02-23        kinaba: #define IDI_TAR 105
13b7203622 2011-02-23        kinaba: #define IDI_YZ1 106
13b7203622 2011-02-23        kinaba: #define IDI_GCA 107
13b7203622 2011-02-23        kinaba: #define IDI_ARJ 108
13b7203622 2011-02-23        kinaba: #define IDI_BGA 109
13b7203622 2011-02-23        kinaba: #define IDI_ACE 110
13b7203622 2011-02-23        kinaba: #define IDI_OTH 111
13b7203622 2011-02-23        kinaba: #define IDI_JAK 112
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: #define icon_is(_x) { if( mycnf().m_hNoahXtDLL ) setIcon( ::LoadIcon( mycnf().m_hNoahXtDLL, MAKEINTRESOURCE(_x) ) ); }
13b7203622 2011-02-23        kinaba: 	CNoahConfigDialog::CCmprPage::CCmprPage() : kiPropSheetPage( IDD_CMPCFG ) icon_is( IDI_ACE )
13b7203622 2011-02-23        kinaba: 	CNoahConfigDialog::CMeltPage::CMeltPage() : kiPropSheetPage( IDD_MLTCFG ) icon_is( IDI_LZH )
13b7203622 2011-02-23        kinaba: 	CNoahConfigDialog::CWinXPage::CWinXPage() : kiPropSheetPage( IDD_WINCFG ) icon_is( IDI_YZ1 )
13b7203622 2011-02-23        kinaba: 	CNoahConfigDialog::CInfoPage::CInfoPage() : kiPropSheetPage( IDD_INFCFG ) icon_is( IDI_GCA )
13b7203622 2011-02-23        kinaba: #undef icon_is
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: CNoahConfigDialog::CNoahConfigDialog()
13b7203622 2011-02-23        kinaba: {
13b7203622 2011-02-23        kinaba: 	//-- [icon] Noahのプロパティ
13b7203622 2011-02-23        kinaba: 	m_Header.dwFlags |= PSH_PROPTITLE | PSH_USEICONID;
13b7203622 2011-02-23        kinaba: 	m_Header.pszIcon = MAKEINTRESOURCE( IDI_MAIN );
13b7203622 2011-02-23        kinaba: 	m_Header.pszCaption = "Noah";
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 	//-- アクセラレータをセット
13b7203622 2011-02-23        kinaba: 	loadAccel( IDR_ACCEL );
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 	//-- ページをどかどかと追加
13b7203622 2011-02-23        kinaba: 	m_Pages.add( new CCmprPage );
13b7203622 2011-02-23        kinaba: 	m_Pages.add( new CMeltPage );
13b7203622 2011-02-23        kinaba: 	m_Pages.add( new CWinXPage );
13b7203622 2011-02-23        kinaba: 	m_Pages.add( new CInfoPage );
13b7203622 2011-02-23        kinaba: }
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: BOOL CNoahConfigDialog::onInit()
13b7203622 2011-02-23        kinaba: {
13b7203622 2011-02-23        kinaba: 	//-- DnD ON, 前面へ
13b7203622 2011-02-23        kinaba: 	::DragAcceptFiles( hwnd(), TRUE );
13b7203622 2011-02-23        kinaba: 	setFront( hwnd() );
13b7203622 2011-02-23        kinaba: 	return FALSE;
13b7203622 2011-02-23        kinaba: }
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: ///////// 各種コマンド /////////////
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: void CNoahConfigDialog::onCommand( UINT id )
13b7203622 2011-02-23        kinaba: {
13b7203622 2011-02-23        kinaba: 	//-- アクセラレータトラップ
13b7203622 2011-02-23        kinaba: 	if( id == IDA_HELP )		onHelp();
13b7203622 2011-02-23        kinaba: 	else if( id == IDA_MYDIR )	myapp().open_folder( kiPath( kiPath::Exe ) );
13b7203622 2011-02-23        kinaba: }
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: void CNoahConfigDialog::onHelp()
13b7203622 2011-02-23        kinaba: {
13b7203622 2011-02-23        kinaba: 	kiPath exepos( kiPath::Exe );
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 	//-- exeと同じ箇所にあるmanual.htmを起動
13b7203622 2011-02-23        kinaba: 	kiPath hlp(exepos); hlp+="manual.htm";
13b7203622 2011-02-23        kinaba: 	if( kiSUtil::exist(hlp) )
13b7203622 2011-02-23        kinaba: 		::ShellExecute( hwnd(), NULL, hlp, NULL, NULL, SW_MAXIMIZE );
13b7203622 2011-02-23        kinaba: 	else
13b7203622 2011-02-23        kinaba: 	{
13b7203622 2011-02-23        kinaba: 		//-- 無ければreadme.txtを
13b7203622 2011-02-23        kinaba: 		hlp=exepos; hlp+="readme.txt";
13b7203622 2011-02-23        kinaba: 		if( kiSUtil::exist(hlp) )
13b7203622 2011-02-23        kinaba: 			::ShellExecute( hwnd(), NULL, hlp, NULL, NULL, SW_SHOWDEFAULT );
13b7203622 2011-02-23        kinaba: 	}
13b7203622 2011-02-23        kinaba: }
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: void CNoahConfigDialog::onDrop( HDROP hdrop )
13b7203622 2011-02-23        kinaba: {
13b7203622 2011-02-23        kinaba: 	//-- ダイアログへのドラッグ&ドロップ
13b7203622 2011-02-23        kinaba: 	sendOK2All();
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 	//-- 途中で邪魔にならないように、消える
13b7203622 2011-02-23        kinaba: 	::ShowWindow( hwnd(), SW_HIDE );
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 	char str[MAX_PATH];
13b7203622 2011-02-23        kinaba: 	StrArray reallist;
13b7203622 2011-02-23        kinaba: 	cCharArray dummy;
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 	unsigned long max = ::DragQueryFile( hdrop, 0xffffffff, NULL, 0 );
13b7203622 2011-02-23        kinaba: 	for( unsigned int i=0; i!=max; i++ )
13b7203622 2011-02-23        kinaba: 	{
13b7203622 2011-02-23        kinaba: 		::DragQueryFile( hdrop, i, str, MAX_PATH );
13b7203622 2011-02-23        kinaba: 		reallist.add( kiStr(str) );
13b7203622 2011-02-23        kinaba: 	}
13b7203622 2011-02-23        kinaba: 	for( i=0; i!=max; i++ )
13b7203622 2011-02-23        kinaba: 		dummy.add( (const char*)reallist[i] );
13b7203622 2011-02-23        kinaba: 	myapp().do_files( dummy, NULL );
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 	// 復帰
13b7203622 2011-02-23        kinaba: 	::DragFinish( hdrop );
13b7203622 2011-02-23        kinaba: 	::ShowWindow( hwnd(), SW_SHOW );
13b7203622 2011-02-23        kinaba: }
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: ///////// 終了時処理など /////////////
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: void CNoahConfigDialog::shift_and_button()
13b7203622 2011-02-23        kinaba: {
13b7203622 2011-02-23        kinaba: 	if( app()->keyPushed( VK_SHIFT ) )
13b7203622 2011-02-23        kinaba: 	{
13b7203622 2011-02-23        kinaba: 		app()->setMainWnd( NULL );
13b7203622 2011-02-23        kinaba: 		myapp().do_cmdline();
13b7203622 2011-02-23        kinaba: 	}
13b7203622 2011-02-23        kinaba: }
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: bool CNoahConfigDialog::onOK()
13b7203622 2011-02-23        kinaba: {
13b7203622 2011-02-23        kinaba: 	onApply();
13b7203622 2011-02-23        kinaba: 	::PostQuitMessage( 0 );
13b7203622 2011-02-23        kinaba: 	return true;
13b7203622 2011-02-23        kinaba: }
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: void CNoahConfigDialog::onApply()
13b7203622 2011-02-23        kinaba: {
13b7203622 2011-02-23        kinaba: 	mycnf().save();
13b7203622 2011-02-23        kinaba: 	shift_and_button();
13b7203622 2011-02-23        kinaba: }
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: bool CNoahConfigDialog::onCancel()
13b7203622 2011-02-23        kinaba: {
13b7203622 2011-02-23        kinaba: 	sendOK2All();
13b7203622 2011-02-23        kinaba: 	::ShowWindow( hwnd(), SW_HIDE );
13b7203622 2011-02-23        kinaba: 	shift_and_button();
13b7203622 2011-02-23        kinaba: 	::PostQuitMessage( 0 );
13b7203622 2011-02-23        kinaba: 	return true;
13b7203622 2011-02-23        kinaba: }
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: ///////// 圧縮設定・解凍設定の共通部分 /////////////
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: static void dirinit( kiDialog* dlg, bool same, bool open, const char* dir )
13b7203622 2011-02-23        kinaba: {
13b7203622 2011-02-23        kinaba: 	dlg->sendMsgToItem( same ? IDC_DDIR1 : IDC_DDIR2 , BM_SETCHECK, TRUE );
13b7203622 2011-02-23        kinaba: 	if( open )
13b7203622 2011-02-23        kinaba: 		dlg->sendMsgToItem( IDC_ODIR , BM_SETCHECK, TRUE );
13b7203622 2011-02-23        kinaba: 	dlg->sendMsgToItem( IDC_DDIR , WM_SETTEXT , 0, (LPARAM)dir );
13b7203622 2011-02-23        kinaba: }
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: static void dirok( kiDialog* dlg, bool& same, bool& open, kiPath& dir )
13b7203622 2011-02-23        kinaba: {
13b7203622 2011-02-23        kinaba: 	same = ( BST_CHECKED==dlg->sendMsgToItem( IDC_DDIR1, BM_GETCHECK ) );
13b7203622 2011-02-23        kinaba: 	open = ( BST_CHECKED==dlg->sendMsgToItem( IDC_ODIR, BM_GETCHECK ) );
13b7203622 2011-02-23        kinaba: 	static char str[MAX_PATH];
13b7203622 2011-02-23        kinaba: 	dlg->sendMsgToItem( IDC_DDIR, WM_GETTEXT, MAX_PATH, (LPARAM)str );
13b7203622 2011-02-23        kinaba: 	dir = str;
13b7203622 2011-02-23        kinaba: }
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: static bool dirdlg( kiDialog* dlg, UINT msg, WPARAM wp )
13b7203622 2011-02-23        kinaba: {
13b7203622 2011-02-23        kinaba: 	if( msg==WM_COMMAND && LOWORD(wp)==IDC_REF )
13b7203622 2011-02-23        kinaba: 	{
13b7203622 2011-02-23        kinaba: 		kiSUtil::getFolderDlgOfEditBox(
13b7203622 2011-02-23        kinaba: 			dlg->item(IDC_DDIR), dlg->hwnd(), kiStr().loadRsrc(IDS_CHOOSEDIR) );
13b7203622 2011-02-23        kinaba: 		return true;
13b7203622 2011-02-23        kinaba: 	}
13b7203622 2011-02-23        kinaba: 	return false;
13b7203622 2011-02-23        kinaba: }
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: ///////// 圧縮設定 /////////////
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: BOOL CNoahConfigDialog::CCmprPage::onInit()
13b7203622 2011-02-23        kinaba: {
13b7203622 2011-02-23        kinaba: 	// 圧縮先フォルダ
13b7203622 2011-02-23        kinaba: 	dirinit( this, mycnf().cdirsm(), mycnf().codir(), mycnf().cdir() );
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 	// 動作モード
13b7203622 2011-02-23        kinaba: 	sendMsgToItem( IDC_MODE1 + mycnf().mode(), BM_SETCHECK, TRUE );
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 	// 圧縮形式
13b7203622 2011-02-23        kinaba: 	correct( mycnf().cext(), true );
13b7203622 2011-02-23        kinaba: 	int ind=sendMsgToItem( IDC_CMPMHD, CB_FINDSTRINGEXACT, -1, (LPARAM)(const char*)mycnf().cmhd() );
13b7203622 2011-02-23        kinaba: 	if( ind!=CB_ERR )
13b7203622 2011-02-23        kinaba: 		sendMsgToItem( IDC_CMPMHD, CB_SETCURSEL, ind );
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 	// ツールチップ
13b7203622 2011-02-23        kinaba: 	m_tooltip = ::CreateWindowEx(
13b7203622 2011-02-23        kinaba: 		0, TOOLTIPS_CLASS, NULL, TTS_ALWAYSTIP,
13b7203622 2011-02-23        kinaba: 		CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
13b7203622 2011-02-23        kinaba: 		hwnd(), NULL, app()->inst(), NULL );
13b7203622 2011-02-23        kinaba: 	SetUpToolTip();
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 	::SetFocus(hwnd());
13b7203622 2011-02-23        kinaba: 	return TRUE;
13b7203622 2011-02-23        kinaba: }
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: bool CNoahConfigDialog::CCmprPage::onOK()
13b7203622 2011-02-23        kinaba: {
13b7203622 2011-02-23        kinaba: 	// 圧縮先フォルダ
13b7203622 2011-02-23        kinaba: 	dirok( this, mycnf().m_CDirSm, mycnf().m_CODir, mycnf().m_CDir );
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 	// 動作モード
13b7203622 2011-02-23        kinaba: 	for( int i=0; i!=4; i++ )
13b7203622 2011-02-23        kinaba: 		if( BST_CHECKED==sendMsgToItem( IDC_MODE1 + i, BM_GETCHECK ) )
13b7203622 2011-02-23        kinaba: 			{ mycnf().m_Mode = i; break; }
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 	// 圧縮形式
13b7203622 2011-02-23        kinaba: 	char str[200]="";
13b7203622 2011-02-23        kinaba: 	sendMsgToItem( IDC_CMPEXT, CB_GETLBTEXT, sendMsgToItem( IDC_CMPEXT, CB_GETCURSEL ), (LPARAM)str );
13b7203622 2011-02-23        kinaba: 	if( *str )
13b7203622 2011-02-23        kinaba: 	{
13b7203622 2011-02-23        kinaba: 		mycnf().m_CExt = str;
13b7203622 2011-02-23        kinaba: 		sendMsgToItem( IDC_CMPMHD, CB_GETLBTEXT, sendMsgToItem( IDC_CMPMHD, CB_GETCURSEL ), (LPARAM)str );
13b7203622 2011-02-23        kinaba: 		mycnf().m_CMhd = str;
13b7203622 2011-02-23        kinaba: 	}
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 	onCancel(); // 終了処理
13b7203622 2011-02-23        kinaba: 	return true;
13b7203622 2011-02-23        kinaba: }
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: bool CNoahConfigDialog::CCmprPage::onCancel()
13b7203622 2011-02-23        kinaba: {
13b7203622 2011-02-23        kinaba: 	// 終了処理
13b7203622 2011-02-23        kinaba: 	::DestroyWindow( m_tooltip );
13b7203622 2011-02-23        kinaba: 	return true;
13b7203622 2011-02-23        kinaba: }
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: void CNoahConfigDialog::CCmprPage::SetUpToolTip()
13b7203622 2011-02-23        kinaba: {
13b7203622 2011-02-23        kinaba: 	char ext[200]="";
13b7203622 2011-02-23        kinaba: 	sendMsgToItem( IDC_CMPEXT, CB_GETLBTEXT, sendMsgToItem( IDC_CMPEXT, CB_GETCURSEL ), (LPARAM)ext );
13b7203622 2011-02-23        kinaba: 	char mhd[200]="";
13b7203622 2011-02-23        kinaba: 	sendMsgToItem( IDC_CMPMHD, CB_GETLBTEXT, sendMsgToItem( IDC_CMPMHD, CB_GETCURSEL ), (LPARAM)mhd );
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 	TOOLINFO ti = {sizeof(TOOLINFO)};
13b7203622 2011-02-23        kinaba: 	ti.uFlags   = TTF_SUBCLASS;
13b7203622 2011-02-23        kinaba: 	{
13b7203622 2011-02-23        kinaba: 		ti.uId      = 0;
13b7203622 2011-02-23        kinaba: 		ti.hwnd     = item(IDC_CMPEXT);
13b7203622 2011-02-23        kinaba: 		::GetClientRect( item(IDC_CMPEXT), &ti.rect );
13b7203622 2011-02-23        kinaba: 		SendMessage( m_tooltip, TTM_DELTOOL, 0, (LPARAM)&ti );
13b7203622 2011-02-23        kinaba: 		if( *ext )
13b7203622 2011-02-23        kinaba: 		{
13b7203622 2011-02-23        kinaba: 			ti.lpszText = ext;
13b7203622 2011-02-23        kinaba: 			SendMessage( m_tooltip, TTM_ADDTOOL, 0, (LPARAM)&ti );
13b7203622 2011-02-23        kinaba: 		}
13b7203622 2011-02-23        kinaba: 	}
13b7203622 2011-02-23        kinaba: 	{
13b7203622 2011-02-23        kinaba: 		ti.uId      = 1;
13b7203622 2011-02-23        kinaba: 		ti.hwnd     = item(IDC_CMPMHD);
13b7203622 2011-02-23        kinaba: 		::GetClientRect( item(IDC_CMPMHD), &ti.rect );
13b7203622 2011-02-23        kinaba: 		SendMessage( m_tooltip, TTM_DELTOOL, 0, (LPARAM)&ti );
13b7203622 2011-02-23        kinaba: 		if( *mhd )
13b7203622 2011-02-23        kinaba: 		{
13b7203622 2011-02-23        kinaba: 			ti.lpszText = mhd;
13b7203622 2011-02-23        kinaba: 			SendMessage( m_tooltip, TTM_ADDTOOL, 0, (LPARAM)&ti );
13b7203622 2011-02-23        kinaba: 		}
13b7203622 2011-02-23        kinaba: 	}
13b7203622 2011-02-23        kinaba: }
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: BOOL CALLBACK CNoahConfigDialog::CCmprPage::proc( UINT msg, WPARAM wp, LPARAM lp )
13b7203622 2011-02-23        kinaba: {
13b7203622 2011-02-23        kinaba: 	if( dirdlg( this, msg, wp ) )
13b7203622 2011-02-23        kinaba: 		return TRUE;
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 	if( msg==WM_COMMAND && HIWORD(wp)==CBN_SELCHANGE && LOWORD(wp)==IDC_CMPEXT )
13b7203622 2011-02-23        kinaba: 	{
13b7203622 2011-02-23        kinaba: 		char str[200]="";
13b7203622 2011-02-23        kinaba: 		sendMsgToItem( IDC_CMPEXT, CB_GETLBTEXT, sendMsgToItem( IDC_CMPEXT, CB_GETCURSEL ), (LPARAM)str );
13b7203622 2011-02-23        kinaba: 		if( *str )
13b7203622 2011-02-23        kinaba: 			correct( str, false );
13b7203622 2011-02-23        kinaba: 		SetUpToolTip();
13b7203622 2011-02-23        kinaba: 		return TRUE;
13b7203622 2011-02-23        kinaba: 	}
13b7203622 2011-02-23        kinaba: 	else if( msg==WM_COMMAND && HIWORD(wp)==CBN_SELCHANGE && LOWORD(wp)==IDC_CMPMHD )
13b7203622 2011-02-23        kinaba: 	{
13b7203622 2011-02-23        kinaba: 		SetUpToolTip();
13b7203622 2011-02-23        kinaba: 	}
13b7203622 2011-02-23        kinaba: 	return FALSE;
13b7203622 2011-02-23        kinaba: }
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: void CNoahConfigDialog::CCmprPage::correct( const char* ext, bool first )
13b7203622 2011-02-23        kinaba: {
13b7203622 2011-02-23        kinaba: 	cCharArray extl;
13b7203622 2011-02-23        kinaba: 	StrArray mhdl;
13b7203622 2011-02-23        kinaba: 	int mhdef;
13b7203622 2011-02-23        kinaba: 	myarc().get_cmpmethod( ext, mhdef, mhdl, first, &extl );
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 	if( first )
13b7203622 2011-02-23        kinaba: 		for( unsigned int i=0; i!=extl.len(); i++ )
13b7203622 2011-02-23        kinaba: 			sendMsgToItem( IDC_CMPEXT, CB_ADDSTRING, 0, (LPARAM)extl[i] );
13b7203622 2011-02-23        kinaba: 	sendMsgToItem( IDC_CMPEXT, CB_SELECTSTRING, 0, (LPARAM)ext );
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 	sendMsgToItem( IDC_CMPMHD, CB_RESETCONTENT );
13b7203622 2011-02-23        kinaba: 	for( unsigned int j=0; j!=mhdl.len(); j++ )
13b7203622 2011-02-23        kinaba: 		sendMsgToItem( IDC_CMPMHD, CB_ADDSTRING, 0, (LPARAM)(const char*)mhdl[j] );
13b7203622 2011-02-23        kinaba: 	sendMsgToItem( IDC_CMPMHD, CB_SETCURSEL, mhdef );
13b7203622 2011-02-23        kinaba: }
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: ///////// 解凍設定 /////////////
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: BOOL CNoahConfigDialog::CMeltPage::onInit()
13b7203622 2011-02-23        kinaba: {
13b7203622 2011-02-23        kinaba: 	// 解凍先フォルダ
13b7203622 2011-02-23        kinaba: 	dirinit( this, mycnf().mdirsm(), mycnf().modir(), mycnf().mdir() );
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 	// フォルダ自動生成
13b7203622 2011-02-23        kinaba: 	if( mycnf().mkdir()!=0 )
13b7203622 2011-02-23        kinaba: 		sendMsgToItem( IDC_MKDIR ,BM_SETCHECK, TRUE );
13b7203622 2011-02-23        kinaba: 	if( mycnf().mkdir()==1 )
13b7203622 2011-02-23        kinaba: 		sendMsgToItem( IDC_MKDIR1,BM_SETCHECK, TRUE );
13b7203622 2011-02-23        kinaba: 	if( mycnf().mkdir()==2 )
13b7203622 2011-02-23        kinaba: 		sendMsgToItem( IDC_MKDIR2,BM_SETCHECK, TRUE );
13b7203622 2011-02-23        kinaba: 	if( mycnf().mnonum() )
13b7203622 2011-02-23        kinaba: 		sendMsgToItem( IDC_MKDIR3,BM_SETCHECK, TRUE );
13b7203622 2011-02-23        kinaba: 	correct();
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 	return FALSE;
13b7203622 2011-02-23        kinaba: }
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: bool CNoahConfigDialog::CMeltPage::onOK()
13b7203622 2011-02-23        kinaba: {
13b7203622 2011-02-23        kinaba: 	// 解凍先フォルダ
13b7203622 2011-02-23        kinaba: 	dirok( this, mycnf().m_MDirSm, mycnf().m_MODir, mycnf().m_MDir );
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 	// フォルダ自動生成
13b7203622 2011-02-23        kinaba: 	mycnf().m_MNoNum = ( BST_CHECKED==sendMsgToItem( IDC_MKDIR3, BM_GETCHECK ) );
13b7203622 2011-02-23        kinaba: 	if( BST_CHECKED!=sendMsgToItem( IDC_MKDIR ,BM_GETCHECK ) )
13b7203622 2011-02-23        kinaba: 		mycnf().m_MkDir = 0;
13b7203622 2011-02-23        kinaba: 	else
13b7203622 2011-02-23        kinaba: 	{
13b7203622 2011-02-23        kinaba: 		if( BST_CHECKED==sendMsgToItem( IDC_MKDIR1 ,BM_GETCHECK ) )
13b7203622 2011-02-23        kinaba: 			mycnf().m_MkDir = 1;
13b7203622 2011-02-23        kinaba: 		else if( BST_CHECKED==sendMsgToItem( IDC_MKDIR2 ,BM_GETCHECK ) )
13b7203622 2011-02-23        kinaba: 			mycnf().m_MkDir = 2;
13b7203622 2011-02-23        kinaba: 		else
13b7203622 2011-02-23        kinaba: 			mycnf().m_MkDir = 3;
13b7203622 2011-02-23        kinaba: 	}
13b7203622 2011-02-23        kinaba: 	return true;
13b7203622 2011-02-23        kinaba: }
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: BOOL CALLBACK CNoahConfigDialog::CMeltPage::proc( UINT msg, WPARAM wp, LPARAM lp )
13b7203622 2011-02-23        kinaba: {
13b7203622 2011-02-23        kinaba: 	if( dirdlg( this, msg, wp ) )
13b7203622 2011-02-23        kinaba: 		return TRUE;
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 	if( msg==WM_COMMAND )
13b7203622 2011-02-23        kinaba: 		if( LOWORD(wp)==IDC_MKDIR || LOWORD(wp)==IDC_MKDIR1 )
13b7203622 2011-02-23        kinaba: 		{
13b7203622 2011-02-23        kinaba: 			correct();
13b7203622 2011-02-23        kinaba: 			return TRUE;
13b7203622 2011-02-23        kinaba: 		}
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 	return FALSE;
13b7203622 2011-02-23        kinaba: }
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: void CNoahConfigDialog::CMeltPage::correct()
13b7203622 2011-02-23        kinaba: {
13b7203622 2011-02-23        kinaba: 	BOOL _mk = ( BST_CHECKED==sendMsgToItem( IDC_MKDIR ,BM_GETCHECK ) );
13b7203622 2011-02-23        kinaba: 	BOOL _1f = ( BST_CHECKED==sendMsgToItem( IDC_MKDIR1,BM_GETCHECK ) );
13b7203622 2011-02-23        kinaba: 	::EnableWindow( ::GetDlgItem(hwnd(),IDC_MKDIR1), _mk );
13b7203622 2011-02-23        kinaba: 	::EnableWindow( ::GetDlgItem(hwnd(),IDC_MKDIR2), _mk && !_1f );
13b7203622 2011-02-23        kinaba: 	::EnableWindow( ::GetDlgItem(hwnd(),IDC_MKDIR3), _mk );
13b7203622 2011-02-23        kinaba: 	if( _1f )
13b7203622 2011-02-23        kinaba: 		sendMsgToItem( IDC_MKDIR2, BM_SETCHECK, TRUE );
13b7203622 2011-02-23        kinaba: }
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: ///////// Windows拡張設定 /////////////
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: BOOL CNoahConfigDialog::CWinXPage::onInit()
13b7203622 2011-02-23        kinaba: {
13b7203622 2011-02-23        kinaba: 	if( !mycnf().m_bShlOK )
13b7203622 2011-02-23        kinaba: 		for( UINT i=IDC_LZH; i<=IDC_MLT; i++ )
13b7203622 2011-02-23        kinaba: 			::EnableWindow( item(i), FALSE );
13b7203622 2011-02-23        kinaba: 	else
13b7203622 2011-02-23        kinaba: 	{
13b7203622 2011-02-23        kinaba: 		for( UINT i=IDC_LZH; i<=IDC_7Z; i++ )
13b7203622 2011-02-23        kinaba: 			if( mycnf().m_bAsso[i-IDC_LZH] )
13b7203622 2011-02-23        kinaba: 				sendMsgToItem( i, BM_SETCHECK, TRUE );
13b7203622 2011-02-23        kinaba: 		if( mycnf().m_SECmp )
13b7203622 2011-02-23        kinaba: 			sendMsgToItem( IDC_CMP ,BM_SETCHECK, TRUE );
13b7203622 2011-02-23        kinaba: 		if( mycnf().m_SEExt )
13b7203622 2011-02-23        kinaba: 			sendMsgToItem( IDC_MLT ,BM_SETCHECK, TRUE );
13b7203622 2011-02-23        kinaba: 	}
13b7203622 2011-02-23        kinaba: 	if( !mycnf().m_bShlOK || !myarc().b2e_enabled() )
13b7203622 2011-02-23        kinaba: 	{
13b7203622 2011-02-23        kinaba: 		::ShowWindow( item(IDC_ASS), SW_HIDE );
13b7203622 2011-02-23        kinaba: 		::EnableWindow( item(IDC_ASS), FALSE );
13b7203622 2011-02-23        kinaba: 	}
13b7203622 2011-02-23        kinaba: 	if( mycnf().m_bShlOK!=1 )
13b7203622 2011-02-23        kinaba: 		::ShowWindow( item(IDC_NOADMIN), SW_HIDE );
13b7203622 2011-02-23        kinaba: 	if( mycnf().m_SCSendTo )
13b7203622 2011-02-23        kinaba: 		sendMsgToItem( IDC_SND, BM_SETCHECK, TRUE );
13b7203622 2011-02-23        kinaba: 	if( mycnf().m_SCDesktop )
13b7203622 2011-02-23        kinaba: 		sendMsgToItem( IDC_DSK, BM_SETCHECK, TRUE );
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 	return FALSE;
13b7203622 2011-02-23        kinaba: }
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: bool CNoahConfigDialog::CWinXPage::onOK()
13b7203622 2011-02-23        kinaba: {
13b7203622 2011-02-23        kinaba: 	mycnf().m_SCSendTo = ( BST_CHECKED==sendMsgToItem( IDC_SND ,BM_GETCHECK ) );
13b7203622 2011-02-23        kinaba: 	mycnf().m_SCDesktop= ( BST_CHECKED==sendMsgToItem( IDC_DSK ,BM_GETCHECK ) );
13b7203622 2011-02-23        kinaba: 	for( UINT i=IDC_LZH; i<=IDC_7Z; i++ )
13b7203622 2011-02-23        kinaba: 		mycnf().m_bAsso[i-IDC_LZH] = ( BST_CHECKED==sendMsgToItem( i, BM_GETCHECK ) );
13b7203622 2011-02-23        kinaba: 	mycnf().m_SECmp = ( BST_CHECKED==sendMsgToItem( IDC_CMP ,BM_GETCHECK ) );
13b7203622 2011-02-23        kinaba: 	mycnf().m_SEExt = ( BST_CHECKED==sendMsgToItem( IDC_MLT ,BM_GETCHECK ) );
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 	return true;
13b7203622 2011-02-23        kinaba: }
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: BOOL CALLBACK CNoahConfigDialog::CWinXPage::proc( UINT msg, WPARAM wp, LPARAM lp )
13b7203622 2011-02-23        kinaba: {
13b7203622 2011-02-23        kinaba: 	if( msg==WM_COMMAND )
13b7203622 2011-02-23        kinaba: 		if( LOWORD(wp)==IDC_ASS )
13b7203622 2011-02-23        kinaba: 		{
13b7203622 2011-02-23        kinaba: 			CAssPage x( hwnd() );
13b7203622 2011-02-23        kinaba: 			return TRUE;
13b7203622 2011-02-23        kinaba: 		}
13b7203622 2011-02-23        kinaba: 	return FALSE;
13b7203622 2011-02-23        kinaba: }
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: CNoahConfigDialog::CAssPage::CAssPage( HWND parent ) : kiDialog( IDD_ANYASS )
13b7203622 2011-02-23        kinaba: {
13b7203622 2011-02-23        kinaba: 	doModal( parent );
13b7203622 2011-02-23        kinaba: }
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: BOOL CNoahConfigDialog::CAssPage::onInit()
13b7203622 2011-02-23        kinaba: {
13b7203622 2011-02-23        kinaba: 	typedef void (WINAPI * XT_LAX)(const char*,bool*);
13b7203622 2011-02-23        kinaba: 	XT_LAX LoadASEx = (XT_LAX)mycnf().getProc( "LoadASEx" );
13b7203622 2011-02-23        kinaba: 	static const char* const ext_list[] =
13b7203622 2011-02-23        kinaba: 		{ "lzh","zip","cab","rar","tar","yz1","gca","arj","gza","ace","cpt","jak","7z" };
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 	// b2e検索
13b7203622 2011-02-23        kinaba: 	kiPath wild( kiPath::Exe );
13b7203622 2011-02-23        kinaba: 	wild += "b2e\\*.b2e";
13b7203622 2011-02-23        kinaba: 	kiFindFile find;
13b7203622 2011-02-23        kinaba: 	find.begin( wild );
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 	char* first_dot;
13b7203622 2011-02-23        kinaba: 	bool state;
13b7203622 2011-02-23        kinaba: 	HWND lst[] = { item(IDC_NASSOC), item(IDC_ASSOC) };
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 	for( WIN32_FIND_DATA fd; find.next(&fd); )
13b7203622 2011-02-23        kinaba: 	{
13b7203622 2011-02-23        kinaba: 		// # 付きは圧縮専用
13b7203622 2011-02-23        kinaba: 		if( fd.cFileName[0] == '#' )
13b7203622 2011-02-23        kinaba: 			continue;
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 		// 拡張子を切り出し
13b7203622 2011-02-23        kinaba: 		::CharLower( fd.cFileName );
13b7203622 2011-02-23        kinaba: 		first_dot = const_cast<char*>(kiPath::ext_all(fd.cFileName)-1);
13b7203622 2011-02-23        kinaba: 		*first_dot = '\0';
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 		// 基本形式ならここではねる
13b7203622 2011-02-23        kinaba: 		for( int i=0; i<sizeof(ext_list)/sizeof(const char*); i++ )
13b7203622 2011-02-23        kinaba: 			if( 0==ki_strcmp( ext_list[i], fd.cFileName ) )
13b7203622 2011-02-23        kinaba: 				break;
13b7203622 2011-02-23        kinaba: 		if( i != sizeof(ext_list)/sizeof(const char*) )
13b7203622 2011-02-23        kinaba: 			continue;
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 		// 関連づけ済みかどうかチェック
13b7203622 2011-02-23        kinaba: 		LoadASEx( fd.cFileName, &state );
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 		// 適切な方のリストへ追加
13b7203622 2011-02-23        kinaba: 		*first_dot = '.';
13b7203622 2011-02-23        kinaba: 		*const_cast<char*>(kiPath::ext(fd.cFileName)-1) = '\0';
13b7203622 2011-02-23        kinaba: 		::SendMessage( lst[state?1:0], LB_SETITEMDATA,
13b7203622 2011-02-23        kinaba: 					   ::SendMessage( lst[state?1:0], LB_ADDSTRING, 0, (LPARAM)fd.cFileName ),
13b7203622 2011-02-23        kinaba: 					   state?1:0 );
13b7203622 2011-02-23        kinaba: 	}
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 	return FALSE;
13b7203622 2011-02-23        kinaba: }
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: BOOL CALLBACK CNoahConfigDialog::CAssPage::proc( UINT msg, WPARAM wp, LPARAM lp )
13b7203622 2011-02-23        kinaba: {
13b7203622 2011-02-23        kinaba: 	if( msg==WM_COMMAND )
13b7203622 2011-02-23        kinaba: 	{
13b7203622 2011-02-23        kinaba: 		char str[300];
13b7203622 2011-02-23        kinaba: 		DWORD dat;
13b7203622 2011-02-23        kinaba: 		HWND from=item(IDC_NASSOC), to=item(IDC_ASSOC);
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 		switch( LOWORD(wp) )
13b7203622 2011-02-23        kinaba: 		{
13b7203622 2011-02-23        kinaba: 		case IDC_DEL:
13b7203622 2011-02-23        kinaba: 			from=item(IDC_ASSOC), to=item(IDC_NASSOC);
13b7203622 2011-02-23        kinaba: 		case IDC_ADD:{
13b7203622 2011-02-23        kinaba: 			int end = ::SendMessage( from, LB_GETCOUNT, 0, 0 );
13b7203622 2011-02-23        kinaba: 			for( int i=0; i<end; i++ )
13b7203622 2011-02-23        kinaba: 				if( ::SendMessage( from, LB_GETSEL, i, 0 ) )
13b7203622 2011-02-23        kinaba: 				{
13b7203622 2011-02-23        kinaba: 					// 取得
13b7203622 2011-02-23        kinaba: 					::SendMessage( from, LB_GETTEXT, i, (LPARAM)str );
13b7203622 2011-02-23        kinaba: 					dat = ::SendMessage( from, LB_GETITEMDATA, i, 0 );
13b7203622 2011-02-23        kinaba: 					// コピー
13b7203622 2011-02-23        kinaba: 					::SendMessage( to, LB_SETITEMDATA,
13b7203622 2011-02-23        kinaba: 								   ::SendMessage( to, LB_ADDSTRING, 0, (LPARAM)str ),
13b7203622 2011-02-23        kinaba: 								   dat );
13b7203622 2011-02-23        kinaba: 					// 削除
13b7203622 2011-02-23        kinaba: 					::SendMessage( from, LB_DELETESTRING, i, 0 );
13b7203622 2011-02-23        kinaba: 					i--, end--;
13b7203622 2011-02-23        kinaba: 				}
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 			}return TRUE;
13b7203622 2011-02-23        kinaba: 		}
13b7203622 2011-02-23        kinaba: 	}
13b7203622 2011-02-23        kinaba: 	return FALSE;
13b7203622 2011-02-23        kinaba: }
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: static void crack_str( char* p )
13b7203622 2011-02-23        kinaba: {
13b7203622 2011-02-23        kinaba: 	for( ; *p; p=kiStr::next(p) )
13b7203622 2011-02-23        kinaba: 		if( *p=='.' )
13b7203622 2011-02-23        kinaba: 			*p++ = '\0';
13b7203622 2011-02-23        kinaba: 	*++p = '\0';
13b7203622 2011-02-23        kinaba: }
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: bool CNoahConfigDialog::CAssPage::onOK()
13b7203622 2011-02-23        kinaba: {
13b7203622 2011-02-23        kinaba: 	typedef void (WINAPI * XT_SAX)(const char*,bool);
13b7203622 2011-02-23        kinaba: 	XT_SAX SaveASEx = (XT_SAX)mycnf().getProc( "SaveASEx" );
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 	char str[301];
13b7203622 2011-02-23        kinaba: 	int i, nc = sendMsgToItem( IDC_NASSOC, LB_GETCOUNT ),
13b7203622 2011-02-23        kinaba: 	       ac = sendMsgToItem(  IDC_ASSOC, LB_GETCOUNT );
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 	// 解除
13b7203622 2011-02-23        kinaba: 	for( i=0; i<nc; i++ )
13b7203622 2011-02-23        kinaba: 		if( sendMsgToItem( IDC_NASSOC, LB_GETITEMDATA, i ) )
13b7203622 2011-02-23        kinaba: 		{
13b7203622 2011-02-23        kinaba: 			sendMsgToItem( IDC_NASSOC, LB_GETTEXT, i, (LPARAM)str );
13b7203622 2011-02-23        kinaba: 			crack_str( str );
13b7203622 2011-02-23        kinaba: 			SaveASEx( str, false );
13b7203622 2011-02-23        kinaba: 		}
13b7203622 2011-02-23        kinaba: 	// 設定
13b7203622 2011-02-23        kinaba: 	for( i=0; i<ac; i++ )
13b7203622 2011-02-23        kinaba: 		if( !sendMsgToItem( IDC_ASSOC, LB_GETITEMDATA, i ) )
13b7203622 2011-02-23        kinaba: 		{
13b7203622 2011-02-23        kinaba: 			sendMsgToItem(  IDC_ASSOC, LB_GETTEXT, i, (LPARAM)str );
13b7203622 2011-02-23        kinaba: 			crack_str( str );
13b7203622 2011-02-23        kinaba: 			SaveASEx( str, true );
13b7203622 2011-02-23        kinaba: 		}
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: 	return true;
13b7203622 2011-02-23        kinaba: }
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: ///////// その他設定 /////////////
13b7203622 2011-02-23        kinaba: 
13b7203622 2011-02-23        kinaba: BOOL CNoahConfigDialog::CInfoPage::onInit()
13b7203622 2011-02-23        kinaba: {
13b7203622 2011-02-23        kinaba: 	kiStr ver;
13b7203622 2011-02-23        kinaba: 	myarc().get_version( ver );
13b7203622 2011-02-23        kinaba: 	sendMsgToItem( IDC_VERSION, WM_SETTEXT, 0, (LPARAM)(const char*)ver );
13b7203622 2011-02-23        kinaba: 	return FALSE;
13b7203622 2011-02-23        kinaba: }