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: }