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

📄 dlggraphlist.cpp

📁 著名的下载软件核心Shareaza
💻 CPP
字号:
//
// DlgGraphList.cpp
//
// Copyright (c) Shareaza Development Team, 2002-2004.
// This file is part of SHAREAZA (www.shareaza.com)
//
// Shareaza is free software; you can redistribute it
// and/or modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2 of
// the License, or (at your option) any later version.
//
// Shareaza is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Shareaza; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
//

#include "StdAfx.h"
#include "Shareaza.h"
#include "GraphLine.h"
#include "GraphItem.h"
#include "DlgGraphList.h"
#include "DlgGraphItem.h"
#include "LiveList.h"
#include "Skin.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

BEGIN_MESSAGE_MAP(CGraphListDlg, CSkinDialog)
	//{{AFX_MSG_MAP(CGraphListDlg)
	ON_NOTIFY(LVN_ITEMCHANGED, IDC_GRAPH_ITEMS, OnItemChangedGraphItems)
	ON_BN_CLICKED(IDC_GRAPH_ADD, OnGraphAdd)
	ON_BN_CLICKED(IDC_GRAPH_EDIT, OnGraphEdit)
	ON_BN_CLICKED(IDC_GRAPH_REMOVE, OnGraphRemove)
	ON_NOTIFY(NM_DBLCLK, IDC_GRAPH_ITEMS, OnDblClkGraphItems)
	ON_NOTIFY(NM_CUSTOMDRAW, IDC_GRAPH_ITEMS, OnCustomDrawItems)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

#define LIST_COLUMNS	1


/////////////////////////////////////////////////////////////////////////////
// CGraphListDlg dialog

CGraphListDlg::CGraphListDlg(CWnd* pParent, CLineGraph* pGraph) : CSkinDialog(CGraphListDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CGraphListDlg)
	m_nSpeed = 0;
	m_bShowGrid = FALSE;
	m_bShowAxis = FALSE;
	m_bShowLegend = FALSE;
	m_sName = _T("");
	//}}AFX_DATA_INIT
	m_pGraph = pGraph;
}

void CGraphListDlg::DoDataExchange(CDataExchange* pDX)
{
	CSkinDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CGraphListDlg)
	DDX_Control(pDX, IDCANCEL, m_wndCancel);
	DDX_Control(pDX, IDOK, m_wndOK);
	DDX_Control(pDX, IDC_GRAPH_SPEED_SPIN, m_wndSpeed);
	DDX_Control(pDX, IDC_GRAPH_REMOVE, m_wndRemove);
	DDX_Control(pDX, IDC_GRAPH_EDIT, m_wndEdit);
	DDX_Control(pDX, IDC_GRAPH_ITEMS, m_wndList);
	DDX_Text(pDX, IDC_GRAPH_SPEED, m_nSpeed);
	DDX_Check(pDX, IDC_GRAPH_GRID, m_bShowGrid);
	DDX_Check(pDX, IDC_GRAPH_AXIS, m_bShowAxis);
	DDX_Check(pDX, IDC_GRAPH_LEGEND, m_bShowLegend);
	DDX_Text(pDX, IDC_NAME, m_sName);
	//}}AFX_DATA_MAP
}

/////////////////////////////////////////////////////////////////////////////
// CGraphListDlg message handlers

BOOL CGraphListDlg::OnInitDialog() 
{
	CSkinDialog::OnInitDialog();
	
	SkinMe( _T("CGraphListDlg"), IDR_TRAFFICFRAME );

	m_gdiImageList.Create( IDB_COLOURDOT, 16, 0, RGB(0,255,0) );
	m_wndList.SetImageList( &m_gdiImageList, LVSIL_SMALL );

	m_wndSpeed.SendMessage( WM_USER+111, 10, 120000 );

	m_bShowAxis		= m_pGraph->m_bShowAxis;
	m_bShowGrid		= m_pGraph->m_bShowGrid;
	m_bShowLegend	= m_pGraph->m_bShowLegend;
	m_nSpeed		= m_pGraph->m_nSpeed;

	UpdateData( FALSE );
	
	for ( POSITION pos = m_pGraph->GetItemIterator() ; pos ; )
	{
		CGraphItem* pItem = m_pGraph->GetNextItem( pos );
		CLiveItem* pLive = PrepareItem( pItem );
		pLive->Add( &m_wndList, -1, LIST_COLUMNS );
		delete pLive;
	}

	OnItemChangedGraphItems( NULL, NULL );

	return TRUE;
}

CLiveItem* CGraphListDlg::PrepareItem(CGraphItem* pItem)
{
	CLiveItem* pLive = new CLiveItem( LIST_COLUMNS, (DWORD)pItem );
	pLive->m_nImage = -1;

	pLive->Set( 0, pItem->m_sName );

	return pLive;
}

void CGraphListDlg::OnCustomDrawItems(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NMLVCUSTOMDRAW* pDraw = (NMLVCUSTOMDRAW*)pNMHDR;

	if ( pDraw->nmcd.dwDrawStage == CDDS_PREPAINT )
	{
		*pResult = CDRF_NOTIFYITEMDRAW;
	}
	else if ( pDraw->nmcd.dwDrawStage == (CDDS_ITEM|CDDS_PREPAINT) )
	{
		CGraphItem* pItem = (CGraphItem*)pDraw->nmcd.lItemlParam;
		CDC* pDC = CDC::FromHandle( pDraw->nmcd.hdc );
		
		CRect rc;
		m_wndList.GetItemRect( pDraw->nmcd.dwItemSpec, &rc, LVIR_ICON );

		pDC->SetTextColor( pItem->m_nColour );
		m_gdiImageList.Draw( pDC, 1, rc.TopLeft(), ILD_NORMAL );
		m_gdiImageList.Draw( pDC, 0, rc.TopLeft(), ILD_MASK|ILD_TRANSPARENT );
		
		*pResult = CDRF_DODEFAULT;
	}
}

void CGraphListDlg::OnItemChangedGraphItems(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	if ( pResult ) *pResult = 0;
	int nSelected = m_wndList.GetSelectedCount();
	m_wndEdit.EnableWindow( nSelected == 1 );
	m_wndRemove.EnableWindow( nSelected > 0 );
}

void CGraphListDlg::OnDblClkGraphItems(NMHDR* pNMHDR, LRESULT* pResult) 
{
	OnGraphEdit();	
	*pResult = 0;
}

void CGraphListDlg::OnGraphAdd() 
{
	CGraphItemDlg dlg( this, new CGraphItem() );
	
	if ( dlg.DoModal() == IDOK )
	{
		m_pGraph->AddItem( dlg.m_pItem );
		CLiveItem* pLive = PrepareItem( dlg.m_pItem );
		pLive->Add( &m_wndList, -1, LIST_COLUMNS );
		delete pLive;
		SetModified();
	}
	else
	{
		delete dlg.m_pItem;
	}
}

void CGraphListDlg::OnGraphEdit() 
{
	int nItem = m_wndList.GetNextItem( -1, LVNI_SELECTED );
	if ( nItem < 0 ) return;

	CGraphItemDlg dlg( this, (CGraphItem*)m_wndList.GetItemData( nItem ) );

	if ( dlg.DoModal() == IDOK )
	{
		CLiveItem* pLive = PrepareItem( dlg.m_pItem );
		pLive->Update( &m_wndList, nItem, LIST_COLUMNS );
		delete pLive;
		SetModified();
	}
}

void CGraphListDlg::OnGraphRemove() 
{
	for ( int nItem = m_wndList.GetItemCount() - 1 ; nItem >= 0 ; nItem -- )
	{
		if ( m_wndList.GetItemState( nItem, LVIS_SELECTED ) )
		{
			CGraphItem* pItem = (CGraphItem*)m_wndList.GetItemData( nItem );
			m_wndList.DeleteItem( nItem );
			m_pGraph->RemoveItem( pItem );
			m_pGraph->ResetMaximum();
			SetModified();
		}
	}
}

void CGraphListDlg::SetModified()
{
	if ( m_wndCancel.IsWindowEnabled() )
	{
		m_wndCancel.EnableWindow( FALSE );
		m_wndOK.SetWindowText( _T("Close") );
	}
}

void CGraphListDlg::OnOK() 
{
	UpdateData();

	m_pGraph->m_bShowAxis		= m_bShowAxis;
	m_pGraph->m_bShowGrid		= m_bShowGrid;
	m_pGraph->m_bShowLegend		= m_bShowLegend;
	m_pGraph->m_nSpeed			= m_nSpeed;

	m_pGraph->ResetMaximum();
	
	CSkinDialog::OnOK();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -