⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dlgdownloadmonitor.cpp

📁 著名的下载软件核心Shareaza
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		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 + -