13b7203622 2011-02-23 kinaba: #ifndef AFX_ARCVIEWDLG_H__91EDF9F6_142E_4E25_BCE3_448E937E29D9__INCLUDED_ 13b7203622 2011-02-23 kinaba: #define AFX_ARCVIEWDLG_H__91EDF9F6_142E_4E25_BCE3_448E937E29D9__INCLUDED_ 13b7203622 2011-02-23 kinaba: 13b7203622 2011-02-23 kinaba: #include "NoahApp.h" 13b7203622 2011-02-23 kinaba: #include "Archiver.h" 13b7203622 2011-02-23 kinaba: #include "resource.h" 13b7203622 2011-02-23 kinaba: 13b7203622 2011-02-23 kinaba: class CArcViewDlg : public kiDialog, kiDataObject 13b7203622 2011-02-23 kinaba: { 13b7203622 2011-02-23 kinaba: public: 13b7203622 2011-02-23 kinaba: CArcViewDlg( CArchiver* ptr,arcname& fnm,const kiPath& ddir ) 13b7203622 2011-02-23 kinaba: : kiDialog( IDD_ARCVIEW ), m_pArc( ptr ), 13b7203622 2011-02-23 kinaba: m_fname( fnm ), m_ddir( ddir ) 13b7203622 2011-02-23 kinaba: { 13b7203622 2011-02-23 kinaba: AddRef(); 13b7203622 2011-02-23 kinaba: myapp().get_tempdir( m_tdir ); 13b7203622 2011-02-23 kinaba: } 13b7203622 2011-02-23 kinaba: 13b7203622 2011-02-23 kinaba: private: //-- ダイアログとしての処理 13b7203622 2011-02-23 kinaba: 13b7203622 2011-02-23 kinaba: BOOL CALLBACK proc( UINT msg, WPARAM wp, LPARAM lp ); 13b7203622 2011-02-23 kinaba: BOOL onInit(); 13b7203622 2011-02-23 kinaba: bool onOK(); 13b7203622 2011-02-23 kinaba: bool onCancel(); 13b7203622 2011-02-23 kinaba: void setdir() 13b7203622 2011-02-23 kinaba: { 13b7203622 2011-02-23 kinaba: char str[MAX_PATH]; 13b7203622 2011-02-23 kinaba: sendMsgToItem( IDC_DDIR, WM_GETTEXT, MAX_PATH, (LPARAM)str ); 13b7203622 2011-02-23 kinaba: m_ddir = str; 13b7203622 2011-02-23 kinaba: m_ddir.beBackSlash( true ); 13b7203622 2011-02-23 kinaba: m_ddir.mkdir(); 13b7203622 2011-02-23 kinaba: m_ddir.beShortPath(); 13b7203622 2011-02-23 kinaba: } 13b7203622 2011-02-23 kinaba: bool setSelection() 13b7203622 2011-02-23 kinaba: { 13b7203622 2011-02-23 kinaba: bool x=false; 13b7203622 2011-02-23 kinaba: LVITEM it; 13b7203622 2011-02-23 kinaba: it.mask = (LVIF_PARAM | LVIF_STATE); 13b7203622 2011-02-23 kinaba: it.iSubItem = 0; 13b7203622 2011-02-23 kinaba: it.stateMask = LVIS_SELECTED; 13b7203622 2011-02-23 kinaba: for( it.iItem=0; sendMsgToItem( IDC_FILELIST, LVM_GETITEM, 0, (LPARAM)&it ); it.iItem++ ) 13b7203622 2011-02-23 kinaba: if( ((arcfile*)it.lParam)->selected = (0!=(LVIS_SELECTED&it.state)) ) 13b7203622 2011-02-23 kinaba: x = true; 13b7203622 2011-02-23 kinaba: return x; 13b7203622 2011-02-23 kinaba: } 13b7203622 2011-02-23 kinaba: int hlp_cnt_check(); 13b7203622 2011-02-23 kinaba: bool m_bAble; 13b7203622 2011-02-23 kinaba: 13b7203622 2011-02-23 kinaba: private: //-- ドラッグ&ドロップ処理 13b7203622 2011-02-23 kinaba: 13b7203622 2011-02-23 kinaba: bool giveData( const FORMATETC& fmt, STGMEDIUM* stg, bool firstcall ); 13b7203622 2011-02-23 kinaba: 13b7203622 2011-02-23 kinaba: private: //-- ソート処理 13b7203622 2011-02-23 kinaba: 13b7203622 2011-02-23 kinaba: void DoSort( int col ); 13b7203622 2011-02-23 kinaba: static int CALLBACK lv_compare( LPARAM p1, LPARAM p2, LPARAM type ); 13b7203622 2011-02-23 kinaba: bool m_bSmallFirst[6]; 13b7203622 2011-02-23 kinaba: 13b7203622 2011-02-23 kinaba: private: //-- 右クリック 13b7203622 2011-02-23 kinaba: 13b7203622 2011-02-23 kinaba: void DoRMenu(); 13b7203622 2011-02-23 kinaba: void GenerateDirMenu( HMENU m, int& id, StrArray* sx, const kiPath& pth ); 13b7203622 2011-02-23 kinaba: 13b7203622 2011-02-23 kinaba: private: //-- 解凍作業 13b7203622 2011-02-23 kinaba: 13b7203622 2011-02-23 kinaba: CArchiver* m_pArc; 13b7203622 2011-02-23 kinaba: arcname m_fname; 13b7203622 2011-02-23 kinaba: kiPath m_ddir, m_tdir; 13b7203622 2011-02-23 kinaba: aflArray m_files; 13b7203622 2011-02-23 kinaba: 13b7203622 2011-02-23 kinaba: //-- 存在しているウインドウ数管理。 13b7203622 2011-02-23 kinaba: public: static void clear() { st_nLife=0; } 13b7203622 2011-02-23 kinaba: private:static void hello() { st_nLife++; } 13b7203622 2011-02-23 kinaba: static void byebye() { if(--st_nLife==0) kiWindow::loopbreak(); } 13b7203622 2011-02-23 kinaba: static int st_nLife; 13b7203622 2011-02-23 kinaba: }; 13b7203622 2011-02-23 kinaba: 13b7203622 2011-02-23 kinaba: 13b7203622 2011-02-23 kinaba: class CArcPwdDlg : public kiDialog 13b7203622 2011-02-23 kinaba: { 13b7203622 2011-02-23 kinaba: char *buf; 13b7203622 2011-02-23 kinaba: const char *nam; 13b7203622 2011-02-23 kinaba: int siz; 13b7203622 2011-02-23 kinaba: public: 13b7203622 2011-02-23 kinaba: CArcPwdDlg( HWND h, char* x, int s, const char* n ) : kiDialog( IDD_PASSWORD ), buf(x), siz(s), nam(n) 13b7203622 2011-02-23 kinaba: { 13b7203622 2011-02-23 kinaba: doModal( h ); 13b7203622 2011-02-23 kinaba: } 13b7203622 2011-02-23 kinaba: BOOL onInit() 13b7203622 2011-02-23 kinaba: { 13b7203622 2011-02-23 kinaba: sendMsgToItem( IDC_MASK, BM_SETCHECK, BST_CHECKED ); 13b7203622 2011-02-23 kinaba: sendMsgToItem( IDC_EDIT, EM_SETLIMITTEXT, siz ); 13b7203622 2011-02-23 kinaba: sendMsgToItem( IDC_EDIT, EM_SETPASSWORDCHAR, '*' ); 13b7203622 2011-02-23 kinaba: sendMsg( WM_SETTEXT, 0, (LPARAM)nam ); 13b7203622 2011-02-23 kinaba: ::SetFocus( item(IDC_EDIT) ); 13b7203622 2011-02-23 kinaba: return TRUE; 13b7203622 2011-02-23 kinaba: } 13b7203622 2011-02-23 kinaba: BOOL CALLBACK proc( UINT msg, WPARAM wp, LPARAM lp ) 13b7203622 2011-02-23 kinaba: { 13b7203622 2011-02-23 kinaba: if( msg==WM_COMMAND && LOWORD(wp)==IDC_MASK ) 13b7203622 2011-02-23 kinaba: { 13b7203622 2011-02-23 kinaba: if( BST_CHECKED==sendMsgToItem( IDC_MASK, BM_GETCHECK ) ) 13b7203622 2011-02-23 kinaba: sendMsgToItem( IDC_EDIT, EM_SETPASSWORDCHAR, '*' ); 13b7203622 2011-02-23 kinaba: else 13b7203622 2011-02-23 kinaba: sendMsgToItem( IDC_EDIT, EM_SETPASSWORDCHAR ); 13b7203622 2011-02-23 kinaba: ::InvalidateRect( item(IDC_EDIT), NULL, TRUE ); 13b7203622 2011-02-23 kinaba: } 13b7203622 2011-02-23 kinaba: return FALSE; 13b7203622 2011-02-23 kinaba: } 13b7203622 2011-02-23 kinaba: bool onOK() 13b7203622 2011-02-23 kinaba: { 13b7203622 2011-02-23 kinaba: sendMsgToItem( IDC_EDIT, WM_GETTEXT, siz, (LPARAM)buf ); 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: class CArcProgressDlg : public kiDialog 13b7203622 2011-02-23 kinaba: { 13b7203622 2011-02-23 kinaba: unsigned int bl; 13b7203622 2011-02-23 kinaba: public: 13b7203622 2011-02-23 kinaba: CArcProgressDlg( unsigned int barlimit, bool packing=false ) 13b7203622 2011-02-23 kinaba: : kiDialog( IDD_PROGRESS ), bl( barlimit ) 13b7203622 2011-02-23 kinaba: { 13b7203622 2011-02-23 kinaba: createModeless(); 13b7203622 2011-02-23 kinaba: if( bl<0x10000 ) 13b7203622 2011-02-23 kinaba: sendMsgToItem( IDC_BAR, PBM_SETRANGE, 0, MAKELPARAM(0,bl) ); 13b7203622 2011-02-23 kinaba: if( packing ) 13b7203622 2011-02-23 kinaba: sendMsg( WM_SETTEXT, 0, (LPARAM)"Compressing..." ); 13b7203622 2011-02-23 kinaba: kiWindow::setFront( hwnd() ); 13b7203622 2011-02-23 kinaba: msgloop(); 13b7203622 2011-02-23 kinaba: } 13b7203622 2011-02-23 kinaba: ~CArcProgressDlg() 13b7203622 2011-02-23 kinaba: { 13b7203622 2011-02-23 kinaba: if( isAlive() ) 13b7203622 2011-02-23 kinaba: end( IDCANCEL ); 13b7203622 2011-02-23 kinaba: } 13b7203622 2011-02-23 kinaba: bool msgloop() 13b7203622 2011-02-23 kinaba: { 13b7203622 2011-02-23 kinaba: kiWindow::msg(); 13b7203622 2011-02-23 kinaba: return isAlive(); 13b7203622 2011-02-23 kinaba: } 13b7203622 2011-02-23 kinaba: void change( const char* name=NULL, unsigned int pos=0xffffffff ) 13b7203622 2011-02-23 kinaba: { 13b7203622 2011-02-23 kinaba: if( name ) sendMsgToItem( IDC_FNAME, WM_SETTEXT, 0, (LPARAM)name ); 13b7203622 2011-02-23 kinaba: if( pos!=0xffffffff ) 13b7203622 2011-02-23 kinaba: if( bl<0x10000 )sendMsgToItem( IDC_BAR, PBM_SETPOS, pos ); 13b7203622 2011-02-23 kinaba: else sendMsgToItem( IDC_BAR, PBM_SETPOS, pos*100/bl ); 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: class CArcPathCheckDlg 13b7203622 2011-02-23 kinaba: { 13b7203622 2011-02-23 kinaba: private: 13b7203622 2011-02-23 kinaba: class TheDlg : public kiDialog 13b7203622 2011-02-23 kinaba: { 13b7203622 2011-02-23 kinaba: public: 13b7203622 2011-02-23 kinaba: TheDlg( const char* path, HWND h ) 13b7203622 2011-02-23 kinaba: : kiDialog(IDD_PATHCHECK), result(CANCEL), path(path) { doModal(h); } 13b7203622 2011-02-23 kinaba: enum { YES, ALL_YES, CANCEL } result; 13b7203622 2011-02-23 kinaba: private: 13b7203622 2011-02-23 kinaba: const char* path; 13b7203622 2011-02-23 kinaba: BOOL onInit() 13b7203622 2011-02-23 kinaba: { 13b7203622 2011-02-23 kinaba: sendMsgToItem( IDC_PATHNAME, WM_SETTEXT, 0, (LPARAM)path ); 13b7203622 2011-02-23 kinaba: return TRUE; 13b7203622 2011-02-23 kinaba: } 13b7203622 2011-02-23 kinaba: BOOL CALLBACK 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: switch( LOWORD(wp) ) 13b7203622 2011-02-23 kinaba: { 13b7203622 2011-02-23 kinaba: case IDYES: result = YES; end(IDOK); return TRUE; 13b7203622 2011-02-23 kinaba: case ID_ALLYES: result = ALL_YES; end(IDOK); return TRUE; 13b7203622 2011-02-23 kinaba: case ID_ALLNO: result = CANCEL; end(IDCANCEL); 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: private: 13b7203622 2011-02-23 kinaba: bool all_yes; 13b7203622 2011-02-23 kinaba: 13b7203622 2011-02-23 kinaba: public: 13b7203622 2011-02-23 kinaba: CArcPathCheckDlg() : all_yes(false) {} 13b7203622 2011-02-23 kinaba: 13b7203622 2011-02-23 kinaba: bool is_ok_to_extract( const char* path, kiWindow* wnd ) 13b7203622 2011-02-23 kinaba: { 13b7203622 2011-02-23 kinaba: if( all_yes ) 13b7203622 2011-02-23 kinaba: return true; 13b7203622 2011-02-23 kinaba: switch( TheDlg(path,wnd?wnd->hwnd():NULL).result ) 13b7203622 2011-02-23 kinaba: { 13b7203622 2011-02-23 kinaba: case TheDlg::ALL_YES: all_yes = true; 13b7203622 2011-02-23 kinaba: case TheDlg::YES: 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: #endif