|
|
// LeftView.cpp : implementation of the CLeftView class
//
#include "stdafx.h"
#include "ncbrowse.h"
#include "ncbrowseDoc.h"
#include "LeftView.h"
#include "ncbrowseView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__; #endif
/////////////////////////////////////////////////////////////////////////////
// CLeftView
IMPLEMENT_DYNCREATE(CLeftView, CTreeView)
BEGIN_MESSAGE_MAP(CLeftView, CTreeView) //{{AFX_MSG_MAP(CLeftView)
ON_NOTIFY_REFLECT(TVN_SELCHANGED, OnSelchanged) ON_WM_CREATE() //}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CTreeView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, CTreeView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, CTreeView::OnFilePrintPreview) END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CLeftView construction/destruction
const DWORD dwNumIcons = 3; CLeftView::CLeftView() { // TODO: add construction code here
}
CLeftView::~CLeftView() { }
BOOL CLeftView::PreCreateWindow(CREATESTRUCT& cs) { // TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CTreeView::PreCreateWindow(cs); }
/////////////////////////////////////////////////////////////////////////////
// CLeftView drawing
void CLeftView::OnDraw(CDC* pDC) { CNcbrowseDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here
}
/////////////////////////////////////////////////////////////////////////////
// CLeftView printing
BOOL CLeftView::OnPreparePrinting(CPrintInfo* pInfo) { // default preparation
return DoPreparePrinting(pInfo); }
void CLeftView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add extra initialization before printing
}
void CLeftView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: add cleanup after printing
}
void CLeftView::OnInitialUpdate() { CTreeView::OnInitialUpdate(); CTreeCtrl& refTreeCtrl = GetTreeCtrl(); CNcbrowseDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); CNCSpewFile& NCSpewFile = pDoc->GetSpewFile();
if (&NCSpewFile) { HTREEITEM hti = TVI_LAST; DWORD dwLevel = 0; for (CSpewList::const_iterator i = NCSpewFile.m_Spews.begin(); i != NCSpewFile.m_Spews.end(); i++) { dwLevel++; TCHAR szItemName[MAX_PATH]; _stprintf(szItemName, _T("%s"), i->second.szSpewName.c_str()); TVINSERTSTRUCT TvSpew; ZeroMemory(&TvSpew, sizeof(TvSpew)); TvSpew.hParent = TVI_ROOT; TvSpew.hInsertAfter = hti; TvSpew.itemex.mask = TVIF_PARAM | TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE; TvSpew.itemex.pszText = szItemName; TvSpew.itemex.cchTextMax = _tcslen(szItemName); TvSpew.itemex.lParam = dwLevel; TvSpew.itemex.iImage = 0; TvSpew.itemex.iSelectedImage = TvSpew.itemex.iImage + dwNumIcons; hti = refTreeCtrl.InsertItem(&TvSpew); HTREEITEM htsi = TVI_LAST; CNCTagMap::const_iterator iTags; for (iTags = i->second.m_Tags.begin(); iTags != i->second.m_Tags.end(); iTags++) { DWORD dwLineCount = iTags->second; TCHAR szItemName[MAX_PATH]; _stprintf(szItemName, _T("%s (%d)"), iTags->first.c_str(), iTags->second); TVINSERTSTRUCT TvThread; ZeroMemory(&TvThread, sizeof(TvThread)); TvThread.hParent = hti; TvThread.hInsertAfter = htsi; TvThread.itemex.mask = TVIF_PARAM | TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE; TvThread.itemex.pszText = szItemName; TvThread.itemex.cchTextMax = _tcslen(szItemName); TvThread.itemex.lParam = 0; TvThread.itemex.iImage = 2; TvThread.itemex.iSelectedImage = TvThread.itemex.iImage + dwNumIcons; htsi = refTreeCtrl.InsertItem(&TvThread); CNCThreadList::const_iterator iThread; for (iThread = i->second.m_NCThreadList.begin(); iThread != i->second.m_NCThreadList.end(); iThread++) { if (iThread->second.m_Tags.find(iTags->first) != iThread->second.m_Tags.end()) { DWORD dwLineCount = iThread->second.m_lsLines.size(); TCHAR szItemName[MAX_PATH]; _stprintf(szItemName, _T("%03x.%03x"), iThread->second.m_dwProcessId, iThread->second.m_dwThreadID); TVINSERTSTRUCT TvThread; ZeroMemory(&TvThread, sizeof(TvThread)); TvThread.hParent = htsi; TvThread.hInsertAfter = TVI_LAST; TvThread.itemex.mask = TVIF_PARAM | TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE; TvThread.itemex.pszText = szItemName; TvThread.itemex.cchTextMax = _tcslen(szItemName); TvThread.itemex.lParam = iThread->first; TvThread.itemex.iImage = 1; TvThread.itemex.iSelectedImage = TvThread.itemex.iImage + dwNumIcons; refTreeCtrl.InsertItem(&TvThread); } } } htsi = TVI_LAST; DWORD dwTotalLines = 0; CNCThreadList::const_iterator iThread; for (iThread = i->second.m_NCThreadList.begin(); iThread != i->second.m_NCThreadList.end(); iThread++) { DWORD dwLineCount = iThread->second.m_lsLines.size(); dwTotalLines += dwLineCount; TCHAR szItemName[MAX_PATH]; _stprintf(szItemName, _T("%03x.%03x (%d)"), iThread->second.m_dwProcessId, iThread->second.m_dwThreadID, dwLineCount); TVINSERTSTRUCT TvThread; ZeroMemory(&TvThread, sizeof(TvThread)); TvThread.hParent = hti; TvThread.hInsertAfter = htsi; TvThread.itemex.mask = TVIF_PARAM | TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE; TvThread.itemex.pszText = szItemName; TvThread.itemex.cchTextMax = _tcslen(szItemName); TvThread.itemex.lParam = iThread->first; TvThread.itemex.iImage = 1; TvThread.itemex.iSelectedImage = TvThread.itemex.iImage + dwNumIcons; htsi = refTreeCtrl.InsertItem(&TvThread); CNCTagMap::const_iterator iTags; for (iTags = iThread->second.m_Tags.begin(); iTags != iThread->second.m_Tags.end(); iTags++) { DWORD dwLineCount = iTags->second; TCHAR szItemName[MAX_PATH]; _stprintf(szItemName, _T("%s (%d)"), iTags->first.c_str(), iTags->second); TVINSERTSTRUCT TvThread; ZeroMemory(&TvThread, sizeof(TvThread)); TvThread.hParent = htsi; TvThread.hInsertAfter = TVI_LAST; TvThread.itemex.mask = TVIF_PARAM | TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE; TvThread.itemex.pszText = szItemName; TvThread.itemex.cchTextMax = _tcslen(szItemName); TvThread.itemex.lParam = 0; TvThread.itemex.iImage = 2; TvThread.itemex.iSelectedImage = TvThread.itemex.iImage + dwNumIcons; refTreeCtrl.InsertItem(&TvThread); } }
_stprintf(szItemName, _T("%s (%d)"), i->second.szSpewName.c_str(), dwTotalLines); refTreeCtrl.SetItemText(hti, szItemName);
refTreeCtrl.Expand(hti, TVE_EXPAND); } } // TODO: You may populate your TreeView with items by directly accessing
// its tree control through a call to GetTreeCtrl().
}
/////////////////////////////////////////////////////////////////////////////
// CLeftView diagnostics
#ifdef _DEBUG
void CLeftView::AssertValid() const { CTreeView::AssertValid(); }
void CLeftView::Dump(CDumpContext& dc) const { CTreeView::Dump(dc); }
CNcbrowseDoc* CLeftView::GetDocument() // non-debug version is inline
{ ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CNcbrowseDoc))); return (CNcbrowseDoc*)m_pDocument; } #endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CLeftView message handlers
void CLeftView::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult) { NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; // TODO: Add your control notification handler code here
DWORD lParam = pNMTreeView->itemNew.lParam; LPCTSTR szFilter = NULL; CString ItemText; if (!lParam) { CTreeCtrl& refTreeCtrl = GetTreeCtrl(); HTREEITEM hParent = refTreeCtrl.GetParentItem( pNMTreeView->itemNew.hItem); lParam = refTreeCtrl.GetItemData(hParent); ItemText = refTreeCtrl.GetItemText(pNMTreeView->itemNew.hItem); ItemText += _T(' '); DWORD dwSpace = ItemText.Find(_T(' ')); ItemText = ItemText.Left(dwSpace); szFilter = ItemText; } else { CTreeCtrl& refTreeCtrl = GetTreeCtrl(); HTREEITEM hParent = refTreeCtrl.GetParentItem( pNMTreeView->itemNew.hItem); if (hParent) { if (!refTreeCtrl.GetItemData(hParent)) { ItemText = refTreeCtrl.GetItemText(hParent); ItemText += _T(' '); DWORD dwSpace = ItemText.Find(_T(' ')); ItemText = ItemText.Left(dwSpace); szFilter = ItemText; } } }
GetDocument()->m_pListView->UpdateInfo(lParam, szFilter);
*pResult = 0; }
int CLeftView::OnCreate(LPCREATESTRUCT lpCreateStruct) { lpCreateStruct->style |= TVS_SHOWSELALWAYS | TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS; if (CTreeView::OnCreate(lpCreateStruct) == -1) return -1; // Give the document a pointer to this view
GetDocument()->m_pTreeView = this; CImageList *MyImageList = new CImageList; MyImageList->Create(16, 16, ILC_COLOR32, 0, 4); MyImageList->Add(AfxGetApp()->LoadIcon(IDI_SPEW)); MyImageList->Add(AfxGetApp()->LoadIcon(IDI_THREAD)); MyImageList->Add(AfxGetApp()->LoadIcon(IDI_FILTER)); MyImageList->Add(AfxGetApp()->LoadIcon(IDI_SPEW_SEL)); MyImageList->Add(AfxGetApp()->LoadIcon(IDI_THREAD_SEL)); MyImageList->Add(AfxGetApp()->LoadIcon(IDI_FILTER_SEL));
CTreeCtrl& refTreeCtrl = GetTreeCtrl(); refTreeCtrl.SetImageList(MyImageList, TVSIL_NORMAL); refTreeCtrl.SetImageList(MyImageList, TVSIL_STATE); return 0; }
|