00001
00002
00003
00004
00005
00006 #include "stdafx.h"
00007 #include "FdmApp.h"
00008 #include "Dlg_UnpackProgress.h"
00009 #include "vmsArchiveMgr.h"
00010 #include "Dlg_Unpack_AskOverwrite.h"
00011 #include "Dlg_Unpack_InstAddPack.h"
00012
00013 #ifdef _DEBUG
00014 #define new DEBUG_NEW
00015 #undef THIS_FILE
00016 static char THIS_FILE[] = __FILE__;
00017 #endif
00018
00019 CDlg_UnpackProgress::CDlg_UnpackProgress(CWnd* pParent )
00020 : CDialog(CDlg_UnpackProgress::IDD, pParent)
00021 {
00022
00023
00024
00025 m_bNeedStop = false;
00026 m_bDone = false;
00027 }
00028
00029 void CDlg_UnpackProgress::DoDataExchange(CDataExchange* pDX)
00030 {
00031 CDialog::DoDataExchange(pDX);
00032
00033 DDX_Control(pDX, IDC_PROGRESS, m_wndProgress);
00034
00035 }
00036
00037 BEGIN_MESSAGE_MAP(CDlg_UnpackProgress, CDialog)
00038
00039 ON_BN_CLICKED(IDC_OPENFOLDER, OnOpenfolder)
00040
00041 END_MESSAGE_MAP()
00042
00043 bool CDlg_UnpackProgress::BeforeExtract(LPCSTR pszFile)
00044 {
00045 CString str;
00046 str.Format ("Extracting: %s...", pszFile);
00047 SetDlgItemText (IDC__EXTRACTING, str);
00048 return m_bNeedStop == false;
00049 }
00050
00051 bool CDlg_UnpackProgress::AfterExtract(LPCSTR pszFile, vmsAC_ExtractResult res)
00052 {
00053 return true;
00054 }
00055
00056 bool CDlg_UnpackProgress::SetProgress(int nProgress)
00057 {
00058 m_wndProgress.SetPos (nProgress);
00059 return m_bNeedStop == false;
00060 }
00061
00062 BOOL CDlg_UnpackProgress::OnInitDialog()
00063 {
00064 CDialog::OnInitDialog();
00065
00066 ApplyLanguage ();
00067
00068 GetDlgItem (IDC_OPENFOLDER)->EnableWindow (FALSE);
00069
00070 DWORD dw;
00071 CloseHandle (
00072 CreateThread (NULL, 0, _threadExtract, this, 0, &dw));
00073
00074 return TRUE;
00075 }
00076
00077 DWORD WINAPI CDlg_UnpackProgress::_threadExtract(LPVOID lp)
00078 {
00079 CDlg_UnpackProgress* pthis = (CDlg_UnpackProgress*)lp;
00080
00081 vmsArchiveMgr ar;
00082 ar.set_ArchiveCallback (pthis);
00083 if (false == ar.Extract (pthis->m_strArchive, pthis->m_strDstFolder)) {
00084 if (ar.get_LastExtractError () != AEE_ABORTED_BY_USER) {
00085 if (_App.IsArchivePackInstalled () == FALSE &&
00086 _App.DontShowInstallAP () == FALSE) {
00087 CDlg_Unpack_InstAddPack dlg;
00088 _DlgMgr.DoModal (&dlg);
00089 }
00090 else {
00091 pthis->MessageBox (LS (L_UNSUPPARCFMT), LS (L_ERR), MB_ICONERROR);
00092 }
00093 }
00094 pthis->m_bNeedStop = true;
00095 }
00096
00097 if (pthis->m_bNeedStop == false)
00098 {
00099 pthis->m_bDone = true;
00100 pthis->SetDlgItemText (IDCANCEL, "OK");
00101 pthis->GetDlgItem (IDC_OPENFOLDER)->EnableWindow (TRUE);
00102 pthis->m_wndProgress.SetPos (100);
00103 pthis->SetDlgItemText (IDC__EXTRACTING, LS (L_DONE));
00104 }
00105 else
00106 {
00107 pthis->PostMessage (WM_COMMAND, IDCANCEL);
00108 }
00109
00110 return 0;
00111 }
00112
00113 void CDlg_UnpackProgress::OnCancel()
00114 {
00115 if (m_bNeedStop)
00116 EndDialog (IDCANCEL);
00117 else
00118 {
00119 if (m_bDone == false)
00120 {
00121 GetDlgItem (IDCANCEL)->EnableWindow (FALSE);
00122 m_bNeedStop = true;
00123 }
00124 else
00125 {
00126 EndDialog (IDOK);
00127 }
00128 }
00129 }
00130
00131 void CDlg_UnpackProgress::OnOpenfolder()
00132 {
00133 ShellExecute (NULL, "explore", m_strDstFolder, NULL, NULL, SW_SHOW);
00134 EndDialog (IDOK);
00135 }
00136
00137 void CDlg_UnpackProgress::ApplyLanguage()
00138 {
00139 fsDlgLngInfo lnginfo [] = {
00140 fsDlgLngInfo (IDC_OPENFOLDER, L_OPENFOLDER),
00141 fsDlgLngInfo (IDCANCEL, L_CANCEL),
00142 };
00143
00144 _LngMgr.ApplyLanguage (this, lnginfo, sizeof (lnginfo) / sizeof (fsDlgLngInfo), L_EXTRACTION);
00145 }
00146
00147 void CDlg_UnpackProgress::AskOverwrite(vmsOverwriteFileInfo &ofi, vmsAC_OverwriteMode &enOM, bool &bForAll)
00148 {
00149 CDlg_Unpack_AskOverwrite dlg;
00150 dlg.m_strFile = ofi.pszFile;
00151 dlg.m_ptimeNewLastModified = ofi.ptimeNewLastWrite;
00152 dlg.m_puNewSize = ofi.puNewSize;
00153 _DlgMgr.DoModal (&dlg);
00154 enOM = dlg.m_enOM;
00155 bForAll = dlg.m_bForAll;
00156 }