📄 dlgdownloadmonitor.cpp
字号:
Update( &m_wndSources, strText );
}
else if ( m_pDownload->IsPaused() )
{
LoadString( strText, IDS_DLM_PAUSED );
Update( &m_wndStatus, strText );
Update( &m_wndTime, strNA );
Update( &m_wndSpeed, strNA );
strText.Format( _T("%i"), nSourceCount );
Update( &m_wndSources, strText );
}
else if ( m_pDownload->GetProgress() == 1.0f && m_pDownload->IsStarted() )
{
LoadString( strText, IDS_DLM_VERIFY );
Update( &m_wndStatus, strText );
Update( &m_wndTime, strNA );
Update( &m_wndSpeed, strNA );
}
else if ( nTransferCount > 0 )
{
LoadString( strText, IDS_DLM_DOWNLOADING );
Update( &m_wndStatus, strText );
DWORD nTime = m_pDownload->GetTimeRemaining();
strText.Empty();
if ( nTime != 0xFFFFFFFF )
{
if ( nTime > 3600 )
{
LoadString( strFormat, IDS_DLM_TIME_HAM );
strText.Format( strFormat, nTime / 3600, ( nTime % 3600 ) / 60 );
}
else if ( nTime > 60 )
{
LoadString( strFormat, IDS_DLM_TIME_MAS );
strText.Format( strFormat, nTime / 60, nTime % 60 );
}
else
{
LoadString( strFormat, IDS_DLM_TIME_S );
strText.Format( strFormat, nTime % 60 );
}
}
Update( &m_wndTime, strText );
strText = Settings.SmartVolume( m_pDownload->GetAverageSpeed() * 8, FALSE, TRUE );
Update( &m_wndSpeed, strText );
strText.Format( _T("%i of %i"), nTransferCount, nSourceCount );
Update( &m_wndSources, strText );
}
else if ( nSourceCount )
{
LoadString( strText, IDS_DLM_DOWNLOADING );
Update( &m_wndStatus, strText );
Update( &m_wndTime, strNA );
Update( &m_wndSpeed, strNA );
strText.Format( _T("%i"), nSourceCount );
Update( &m_wndSources, strText );
}
else
{
LoadString( strText, IDS_DLM_SOURCING );
Update( &m_wndStatus, strText );
Update( &m_wndTime, strNA );
Update( &m_wndSpeed, strNA );
LoadString( strText, IDS_DLM_NO_SOURCES );
Update( &m_wndSources, strText );
}
if ( m_pDownload->IsStarted() )
{
LoadString( strFormat, IDS_DLM_VOLUME );
strText.Format( strFormat,
(LPCTSTR)Settings.SmartVolume( m_pDownload->GetVolumeComplete(), FALSE ),
(LPCTSTR)Settings.SmartVolume( m_pDownload->m_nSize, FALSE ),
m_pDownload->GetProgress() * 100.0f );
Update( &m_wndVolume, strText );
}
else
{
LoadString( strText, IDS_TIP_NA );
Update( &m_wndVolume, strText );
}
LoadString( strText, bCompleted ? IDS_DLM_OPEN_OPEN : IDS_DLM_OPEN_PREVIEW );
Update( &m_wndLaunch, strText );
Update( &m_wndLaunch, m_pDownload->IsStarted() );
Update( &m_wndStop, ! bCompleted );
Update( &m_wndClose, ! bCompleted );
CClientDC dc( this );
DoPaint( dc );
}
void CDownloadMonitorDlg::Update(CWnd* pWnd, LPCTSTR pszText)
{
CString strOld;
pWnd->GetWindowText( strOld );
if ( strOld != pszText ) pWnd->SetWindowText( pszText );
}
void CDownloadMonitorDlg::Update(CWnd* pWnd, BOOL bEnabled)
{
if ( pWnd->IsWindowEnabled() == bEnabled ) return;
pWnd->EnableWindow( bEnabled );
}
void CDownloadMonitorDlg::OnPaint()
{
CPaintDC dc( this );
DoPaint( dc );
}
void CDownloadMonitorDlg::DoPaint(CDC& dc)
{
CRect rc;
m_wndProgress.GetWindowRect( &rc );
ScreenToClient( &rc );
DrawProgressBar( &dc, &rc );
m_wndGraph.GetWindowRect( &rc );
ScreenToClient( &rc );
dc.Draw3dRect( &rc, 0, 0 );
rc.DeflateRect( 1, 1 );
m_pGraph->BufferedPaint( &dc, &rc );
}
void CDownloadMonitorDlg::DrawProgressBar(CDC* pDC, CRect* pRect)
{
CRect rcCell( pRect );
pDC->Draw3dRect( &rcCell, 0, 0 );
rcCell.DeflateRect( 1, 1 );
if ( Transfers.m_pSection.Lock( 50 ) )
{
if ( Downloads.Check( m_pDownload ) )
CFragmentBar::DrawDownload( pDC, &rcCell, m_pDownload, Skin.m_crDialog );
Transfers.m_pSection.Unlock();
}
}
void CDownloadMonitorDlg::OnDownloadLaunch()
{
CSingleLock pLock( &Transfers.m_pSection );
if ( ! pLock.Lock( 250 ) || ! Downloads.Check( m_pDownload ) ) return;
CString strName = m_pDownload->m_sLocalName;
BOOL bCompleted = m_pDownload->IsMoving();
CString strType;
CLSID pCLSID;
int nExtPos = strName.ReverseFind( '.' );
if ( nExtPos > 0 ) strType = strName.Mid( nExtPos );
strType.MakeLower();
if ( bCompleted || ! Plugins.LookupCLSID( _T("DownloadPreview"), strType, pCLSID ) )
{
pLock.Unlock();
CFileExecutor::Execute( strName, FALSE ); // , IDS_DOWNLOAD_CONFIRM_EXECUTE );
}
else
{
m_pDownload->Preview( &pLock );
pLock.Unlock();
}
if ( bCompleted ) PostMessage( WM_CLOSE );
}
void CDownloadMonitorDlg::OnDownloadLibrary()
{
CWnd* pMainWnd = AfxGetMainWnd();
if ( ! pMainWnd ) return;
pMainWnd->PostMessage( WM_COMMAND, ID_VIEW_LIBRARY );
pMainWnd->PostMessage( WM_SYSCOMMAND, SC_RESTORE );
}
void CDownloadMonitorDlg::OnDownloadStop()
{
CSingleLock pLock( &Transfers.m_pSection );
if ( ! pLock.Lock( 250 ) || ! Downloads.Check( m_pDownload ) ) return;
if ( m_pDownload->IsStarted() )
{
CString strFormat, strPrompt;
::LoadString( strFormat, IDS_DOWNLOAD_CONFIRM_CLEAR );
strPrompt.Format( strFormat, (LPCTSTR)m_pDownload->m_sRemoteName );
pLock.Unlock();
if ( MessageBox( strPrompt, NULL, MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 ) != IDYES ) return;
pLock.Lock();
}
if ( Downloads.Check( m_pDownload ) )
{
m_pDownload->Remove();
PostMessage( WM_CLOSE );
}
}
void CDownloadMonitorDlg::OnDownloadCancel()
{
PostMessage( WM_CLOSE );
}
void CDownloadMonitorDlg::OnClose()
{
DestroyWindow();
}
void CDownloadMonitorDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
UINT nCommand = nID & 0xFFF0;
BOOL bShift = GetAsyncKeyState( VK_SHIFT ) & 0x8000;
if ( nCommand == SC_MAXIMIZE || ( nCommand == SC_MINIMIZE && bShift ) )
{
if ( ! m_bTray )
{
m_pTray.cbSize = sizeof(m_pTray);
m_pTray.hWnd = GetSafeHwnd();
m_pTray.uID = 0;
m_pTray.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
m_pTray.uCallbackMessage = WM_TRAY;
m_pTray.hIcon = theApp.LoadIcon( IDI_DOWNLOAD_MONITOR );
_tcscpy( m_pTray.szTip, _T("Shareaza Download") );
Shell_NotifyIcon( NIM_ADD, &m_pTray );
ShowWindow( SW_HIDE );
m_bTray = TRUE;
}
return;
}
else if ( nCommand == SC_RESTORE && m_bTray )
{
OnTray( WM_LBUTTONDBLCLK, 0 );
return;
}
else if ( nCommand == SC_NEXTWINDOW )
{
if ( GetExStyle() & WS_EX_TOPMOST )
{
SetWindowPos( &wndNoTopMost, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE );
}
else
{
SetWindowPos( &wndTopMost, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE );
}
return;
}
CSkinDialog::OnSysCommand( nID, lParam );
}
LONG CDownloadMonitorDlg::OnTray(UINT wParam, LONG lParam)
{
if ( LOWORD(lParam) == WM_LBUTTONDBLCLK && m_bTray )
{
Shell_NotifyIcon( NIM_DELETE, &m_pTray );
ShowWindow( SW_SHOWNORMAL );
SetForegroundWindow();
m_bTray = FALSE;
}
return 0;
}
HBRUSH CDownloadMonitorDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CSkinDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if ( pWnd == &m_wndFile )
{
pDC->SelectObject( &theApp.m_gdiFontBold );
}
return hbr;
}
void CDownloadMonitorDlg::OnContextMenu(CWnd* pWnd, CPoint point)
{
CMainWnd* pMainWnd = (CMainWnd*)AfxGetMainWnd();
if ( ! pMainWnd || ! IsWindow( pMainWnd->m_hWnd ) ) return;
CDownloadsWnd* pDownWnd = (CDownloadsWnd*)pMainWnd->m_pWindows.Find( RUNTIME_CLASS(CDownloadsWnd) );
if ( ! pDownWnd ) return;
if ( ! pDownWnd->Select( m_pDownload ) ) return;
CMenu* pPopup = ::Skin.GetMenu( _T("CDownloadsWnd.Download") );
if ( ! pPopup ) return;
MENUITEMINFO pInfo;
pInfo.cbSize = sizeof(pInfo);
pInfo.fMask = MIIM_STATE;
GetMenuItemInfo( pPopup->GetSafeHmenu(), ID_DOWNLOADS_LAUNCH, FALSE, &pInfo );
pInfo.fState |= MFS_DEFAULT;
SetMenuItemInfo( pPopup->GetSafeHmenu(), ID_DOWNLOADS_LAUNCH, FALSE, &pInfo );
CoolMenu.AddMenu( pPopup, TRUE );
UINT nID = pPopup->TrackPopupMenu( TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_RIGHTBUTTON|TPM_RETURNCMD,
point.x, point.y, pDownWnd );
if ( nID && pDownWnd->Select( m_pDownload ) )
{
pDownWnd->SendMessage( WM_COMMAND, nID );
}
}
BOOL CDownloadMonitorDlg::OnNeedText(UINT nID, NMHDR* pTTTH, LRESULT* pResult)
{
if ( pTTTH->idFrom == IDC_DOWNLOAD_FILE )
{
TOOLTIPTEXT* pTTT = (TOOLTIPTEXT*)pTTTH;
pTTT->lpszText = (LPTSTR)(LPCTSTR)m_sName;
}
return TRUE;
}
void CDownloadMonitorDlg::OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu)
{
DWORD nCheck = ( GetExStyle() & WS_EX_TOPMOST ) ? MF_CHECKED : MF_UNCHECKED;
pPopupMenu->CheckMenuItem( SC_NEXTWINDOW, MF_BYCOMMAND|nCheck );
CSkinDialog::OnInitMenuPopup( pPopupMenu, nIndex, bSysMenu );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -