File Annotation

Not logged in
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