00001
00002
00003
00004
00005
00006 #include "stdafx.h"
00007 #include "FdmApp.h"
00008 #include "Dlg_Download.h"
00009 #include "Downloads_Tasks.h"
00010 #include "DownloadsWnd.h"
00011 #include "Dlg_Download_OnHide.h"
00012
00013 extern CDownloadsWnd* _pwndDownloads;
00014
00015 #ifdef _DEBUG
00016 #define new DEBUG_NEW
00017 #undef THIS_FILE
00018 static char THIS_FILE[] = __FILE__;
00019 #endif
00020
00021 CDlg_Download::CDlg_Download(CWnd* pParent )
00022 : CDialog(CDlg_Download::IDD, pParent)
00023 {
00024
00025
00026
00027 m_iOldProgress = -1;
00028 }
00029
00030 void CDlg_Download::DoDataExchange(CDataExchange* pDX)
00031 {
00032 CDialog::DoDataExchange(pDX);
00033
00034
00035
00036 }
00037
00038 BEGIN_MESSAGE_MAP(CDlg_Download, CDialog)
00039
00040 ON_WM_TIMER()
00041 ON_WM_CTLCOLOR()
00042 ON_BN_CLICKED(IDC_HIDE, OnHide)
00043 ON_BN_CLICKED(IDC_AUTOCLOSE, OnAutoclose)
00044 ON_BN_CLICKED(IDC_STOP, OnStop)
00045 ON_BN_CLICKED(IDC_OPENFILE, OnOpenfile)
00046 ON_BN_CLICKED(IDC_OPENFOLDER, OnOpenfolder)
00047 ON_BN_CLICKED(IDC_AUTOLAUNCH, OnAutolaunch)
00048
00049 END_MESSAGE_MAP()
00050
00051 void CDlg_Download::Create(vmsDownloadSmartPtr dld)
00052 {
00053 m_dld = dld;
00054
00055 m_wndProgress.m_dld = dld;
00056
00057 CWnd wnd;
00058 wnd.m_hWnd = NULL;
00059 CDialog::Create (IDD_DOWNLOAD, &wnd);
00060 }
00061
00062 CDlg_Download::~CDlg_Download()
00063 {
00064 }
00065
00066 BOOL CDlg_Download::OnInitDialog()
00067 {
00068 CDialog::OnInitDialog();
00069
00070 m_wndProgress.Create (this);
00071 CRect rc;
00072 GetDlgItem (IDC__PROGRESS)->GetWindowRect (&rc);
00073 ScreenToClient (&rc);
00074 m_wndProgress.MoveWindow (&rc);
00075
00076 LOGFONT lf;
00077 GetFont ()->GetLogFont (&lf);
00078 lf.lfWeight = FW_BOLD;
00079 m_fntBold.CreateFontIndirect (&lf);
00080
00081 if (m_dld->pMgr->IsBittorrent ())
00082 SetDlgItemText (IDC__URL_, LS (L_NAME));
00083
00084 ApplyLanguage ();
00085 SetTimer (1, 1000, NULL);
00086
00087 CheckDlgButton (IDC_AUTOCLOSE, _App.DownloadDialog_AutoClose () ? BST_CHECKED : BST_UNCHECKED);
00088 CheckDlgButton (IDC_AUTOLAUNCH, m_dld->pMgr->IsLaunchWhenDone () ? BST_CHECKED : BST_UNCHECKED);
00089
00090 NeedUpdate ();
00091
00092 return TRUE;
00093 }
00094
00095 void CDlg_Download::ApplyLanguage()
00096 {
00097 fsDlgLngInfo lnginfo [] = {
00098 fsDlgLngInfo (IDC__SAVEDIN_, L_SAVEDINFILE, TRUE),
00099 fsDlgLngInfo (IDC__FILESIZE_, L_FILESIZE, TRUE),
00100 fsDlgLngInfo (IDC__RESUMESUPPORT_, m_dld->pMgr->IsBittorrent () == FALSE ? L_RESUMESUPPORT : L_STATE, TRUE),
00101 fsDlgLngInfo (IDC__DOWNLOADED_, L_DOWNLOADED, TRUE),
00102 fsDlgLngInfo (IDC_SPEED_, L_SPEED, TRUE),
00103 fsDlgLngInfo (IDC_TIMELEFT_, L_TIMELEFT, TRUE),
00104 fsDlgLngInfo (IDC_AUTOCLOSE, L_CLOSEWINDOWWHENDONE),
00105 fsDlgLngInfo (IDC_OPENFOLDER, L_OPENFOLDER),
00106 fsDlgLngInfo (IDC_OPENFILE, L_LAUNCH),
00107 fsDlgLngInfo (IDC_STOP, L_STOP),
00108 fsDlgLngInfo (IDC_HIDE, L_HIDE),
00109 fsDlgLngInfo (IDC_AUTOLAUNCH, L_LAUNCHWHENDONE),
00110 };
00111
00112 _LngMgr.ApplyLanguage (this, lnginfo, sizeof (lnginfo) / sizeof (fsDlgLngInfo), L_DOWNLOAD);
00113 }
00114
00115 void CDlg_Download::OnTimer(UINT nIDEvent)
00116 {
00117 Update ();
00118
00119 CDialog::OnTimer(nIDEvent);
00120 }
00121
00122 void CDlg_Download::Update()
00123 {
00124 SetDlgItemText2 (IDC_URL, m_dld->pMgr->IsBittorrent () == FALSE ? m_dld->pMgr->get_URL () :
00125 m_dld->pMgr->GetBtDownloadMgr ()->get_TorrentName ());
00126
00127 SetDlgItemText2 (IDC__SAVEDIN, m_dld->pMgr->get_OutputFilePathName ());
00128
00129 SetDlgItemText2 (IDC__FILESIZE, CDownloads_Tasks::GetDownloadText (m_dld, 1));
00130
00131 if (m_dld->pMgr->IsBittorrent ())
00132 {
00133 switch (m_dld->pMgr->GetBtDownloadMgr ()->get_State ())
00134 {
00135 case BTDS_CHECKING_FILES:
00136 case BTDS_ALLOCATING:
00137 SetDlgItemText2 (IDC__RST, LS (L_PREP_FILES_ONDISK_SHORT));
00138 break;
00139
00140 case BTDS_CONNECTING_TRACKER:
00141 SetDlgItemText2 (IDC__RST, LS (L_BT_TRACKER_ANNOUNCE));
00142 break;
00143
00144 case BTDS_DOWNLOADING:
00145 SetDlgItemText2 (IDC__RESUMESUPPORT_, LS (L_RESUMESUPPORT));
00146 SetDlgItemText2 (IDC__RST, LS (L_YES));
00147 break;
00148 }
00149 }
00150 else
00151 {
00152 switch (m_dld->pMgr->IsResumeSupported ())
00153 {
00154 case RST_PRESENT:
00155 SetDlgItemText2 (IDC__RST, LS (L_YES));
00156 break;
00157
00158 case RST_NONE:
00159 SetDlgItemText2 (IDC__RST, LS (L_NO));
00160 break;
00161
00162 case RST_UNKNOWN:
00163 SetDlgItemText2 (IDC__RST, LS (L_UNKNOWN));
00164 break;
00165 }
00166 }
00167
00168 SetDlgItemText2 (IDC__DOWNLOADED, CDownloads_Tasks::GetDownloadText (m_dld, 2));
00169
00170 SetDlgItemText2 (IDC__SPEED, CDownloads_Tasks::GetDownloadText (m_dld, 5));
00171
00172 SetDlgItemText2 (IDC__TIMELEFT, CDownloads_Tasks::GetDownloadText (m_dld, 3));
00173
00174 int nProgress = (int)m_dld->pMgr->GetPercentDone ();
00175 char szName [10000] = "";
00176 CDownloads_Tasks::GetFileName (m_dld, szName);
00177 CString str;
00178
00179 if (nProgress != 100)
00180 str.Format ("[%d%%] - %s", nProgress, szName);
00181 else
00182 str.Format ("%s - %s", szName, LS (L_DONE));
00183 SetWindowText (str);
00184
00185 if (m_iOldProgress != nProgress)
00186 m_wndProgress.Invalidate (FALSE);
00187
00188 m_iOldProgress = nProgress;
00189 }
00190
00191 void CDlg_Download::SetDlgItemText2(UINT nID, LPCSTR pszText)
00192 {
00193 CString str;
00194 GetDlgItemText (nID, str);
00195 if (str != pszText)
00196 SetDlgItemText (nID, pszText);
00197 }
00198
00199 HBRUSH CDlg_Download::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
00200 {
00201 HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
00202
00203 pDC->SetBkMode (TRANSPARENT);
00204 if (GetDlgItem (IDC__RST)->m_hWnd == pWnd->m_hWnd)
00205 {
00206 SelectObject (pDC->m_hDC, m_fntBold);
00207
00208 if (m_dld->pMgr->IsBittorrent () == FALSE ||
00209 m_dld->pMgr->GetBtDownloadMgr ()->get_State () == BTDS_DOWNLOADING)
00210 {
00211 switch (m_dld->pMgr->IsResumeSupported ())
00212 {
00213 case RST_PRESENT:
00214 pDC->SetTextColor (RGB (0, 100, 0));
00215 break;
00216
00217 case RST_NONE:
00218 pDC->SetTextColor (RGB (150, 0, 0));
00219 break;
00220
00221 case RST_UNKNOWN:
00222 pDC->SetTextColor (RGB (150, 150, 0));
00223 break;
00224 }
00225 }
00226 }
00227
00228 if (GetDlgItem (IDC_URL)->m_hWnd == pWnd->m_hWnd)
00229 SelectObject (pDC->m_hDC, m_fntBold);
00230
00231 return hbr;
00232 }
00233
00234 void CDlg_Download::OnHide()
00235 {
00236 if (_App.DownloadDialog_DontAskOnHide () == FALSE && m_dld->pMgr->IsDone () == FALSE &&
00237 m_dld->pMgr->IsRunning ())
00238 {
00239 CDlg_Download_OnHide dlg (this);
00240
00241 if (_DlgMgr.DoModal (&dlg) == IDCANCEL)
00242 return;
00243
00244 switch (dlg.m_enResult)
00245 {
00246 case DDOR_SHOW:
00247 if (dlg.m_bDontAskAgain)
00248 _App.DownloadDialog_DontAskOnHide (TRUE);
00249 break;
00250
00251 case DDOR_DONTSHOW:
00252 _App.DownloadDialog_Use (FALSE);
00253 _App.DownloadDialog_DontAskOnHide (TRUE);
00254 break;
00255
00256 case DDOR_DONTSHOWFORTHISDLD:
00257 m_dld->dwFlags |= DLD_DONTSHOWDIALOG;
00258 break;
00259 }
00260 }
00261
00262 m_dld->AddRef ();
00263 _pwndDownloads->PostMessage (WM_DW_CLOSEDLDDIALOG, 0, (LPARAM)(fsDownload*) m_dld);
00264 }
00265
00266 void CDlg_Download::OnAutoclose()
00267 {
00268 _App.DownloadDialog_AutoClose (IsDlgButtonChecked (IDC_AUTOCLOSE) == BST_CHECKED);
00269 }
00270
00271 void CDlg_Download::NeedUpdate()
00272 {
00273 if (m_dld->pMgr->IsRunning ())
00274 SetDlgItemText (IDC_STOP, LS (L_STOP));
00275 else
00276 SetDlgItemText (IDC_STOP, LS (L_START));
00277
00278 BOOL bDone = m_dld->pMgr->IsDone ();
00279 GetDlgItem (IDC_STOP)->EnableWindow (bDone == FALSE);
00280 GetDlgItem (IDC_OPENFILE)->EnableWindow (bDone);
00281
00282 Update ();
00283 }
00284
00285 void CDlg_Download::OnCancel()
00286 {
00287 OnHide ();
00288 }
00289
00290 void CDlg_Download::OnStop()
00291 {
00292 DLDS_LIST vDlds;
00293
00294 vDlds.push_back (m_dld);
00295
00296 if (m_dld->pMgr->IsRunning ())
00297 _DldsMgr.StopDownloads (vDlds, TRUE);
00298 else
00299 _DldsMgr.StartDownloads (vDlds, TRUE);
00300 }
00301
00302 void CDlg_Download::OnOpenfile()
00303 {
00304 _DldsMgr.LaunchDownload (m_dld);
00305 OnHide ();
00306 }
00307
00308 void CDlg_Download::OnOpenfolder()
00309 {
00310 m_dld->pMgr->Do_OpenFolder ();
00311 if (m_dld->pMgr->IsDone ())
00312 OnHide ();
00313 }
00314
00315 void CDlg_Download::OnAutolaunch()
00316 {
00317 m_dld->pMgr->set_LaunchWhenDone (IsDlgButtonChecked (IDC_AUTOLAUNCH) == BST_CHECKED);
00318 }