hl2_src-leak-2017/src/utils/vkeyedit/vkeyeditView.cpp

222 lines
5.3 KiB
C++

//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//
//=============================================================================//
// vkeyeditView.cpp : implementation of the CVkeyeditView class
//
#include "stdafx.h"
#include "vkeyedit.h"
#include "vkeyeditDoc.h"
#include "vkeyeditView.h"
#include <COMMCTRL.H>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CVkeyeditView
IMPLEMENT_DYNCREATE(CVkeyeditView, CTreeView)
BEGIN_MESSAGE_MAP(CVkeyeditView, CTreeView)
//{{AFX_MSG_MAP(CVkeyeditView)
ON_NOTIFY_REFLECT(TVN_SELCHANGED, OnSelchanged)
//}}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()
/////////////////////////////////////////////////////////////////////////////
// CVkeyeditView construction/destruction
CVkeyeditView::CVkeyeditView()
{
// TODO: add construction code here
}
CVkeyeditView::~CVkeyeditView()
{
}
BOOL CVkeyeditView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
cs.style |= TVS_HASLINES|TVS_EDITLABELS|TVS_HASBUTTONS|TVS_LINESATROOT;
return CTreeView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CVkeyeditView drawing
void CVkeyeditView::OnDraw(CDC* pDC)
{
CVkeyeditDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}
//DEL void CVkeyeditView::OnInitialUpdate()
//DEL {
//DEL CTreeView::OnInitialUpdate();
//DEL
//DEL CTreeCtrl &tree = GetTreeCtrl();
//DEL
//DEL // tree.InsertItem( _T("Test") );
//DEL
//DEL
//DEL // TODO: You may populate your TreeView with items by directly accessing
//DEL // its tree control through a call to GetTreeCtrl().
//DEL }
/////////////////////////////////////////////////////////////////////////////
// CVkeyeditView printing
BOOL CVkeyeditView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CVkeyeditView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CVkeyeditView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CVkeyeditView diagnostics
#ifdef _DEBUG
void CVkeyeditView::AssertValid() const
{
CTreeView::AssertValid();
}
void CVkeyeditView::Dump(CDumpContext& dc) const
{
CTreeView::Dump(dc);
}
CVkeyeditDoc* CVkeyeditView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CVkeyeditDoc)));
return (CVkeyeditDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CVkeyeditView message handlers
void CVkeyeditView::CalcWindowRect(LPRECT lpClientRect, UINT nAdjustType)
{
// TODO: Add your specialized code here and/or call the base class
CTreeView::CalcWindowRect(lpClientRect, nAdjustType);
}
// Sort the item in reverse alphabetical order.
static int CALLBACK MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
return strcmp( ((KeyValues*)(lParam1))->GetName(), ((KeyValues*)(lParam2))->GetName() );
}
void CVkeyeditView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
{
// TODO: Add your specialized code here and/or call the base class
CTreeCtrl &theTree = GetTreeCtrl();
KeyValues *kv = (KeyValues *)pHint;
if ( !kv || lHint != 1 )
return;
theTree.DeleteAllItems();
while ( kv )
{
InsertKeyValues( kv, TVI_ROOT );
kv = kv->GetNextKey();
}
// The pointer to my tree control.
TVSORTCB tvs;
// Sort the tree control's items using my
// callback procedure.
tvs.hParent = TVI_ROOT;
tvs.lpfnCompare = MyCompareProc;
tvs.lParam = (LPARAM) &theTree;
theTree.SortChildrenCB(&tvs);
}
bool CVkeyeditView::InsertKeyValues(KeyValues *kv, HTREEITEM hParent)
{
CTreeCtrl &theTree = GetTreeCtrl();
TVINSERTSTRUCT tvInsert;
tvInsert.hParent = hParent;
tvInsert.hInsertAfter = TVI_LAST;
tvInsert.item.mask = TVIF_TEXT;
tvInsert.item.lParam = (LPARAM)kv;
tvInsert.item.pszText = (char*)kv->GetName();
HTREEITEM hItem = theTree.InsertItem( &tvInsert );
theTree.SetItemData(hItem, (DWORD) kv );
KeyValues * subkey = kv->GetFirstTrueSubKey();
while ( subkey )
{
InsertKeyValues( subkey, hItem );
subkey = subkey->GetNextKey();
}
// The pointer to my tree control.
TVSORTCB tvs;
// Sort the tree control's items using my
// callback procedure.
tvs.hParent = hParent;
tvs.lpfnCompare = MyCompareProc;
tvs.lParam = (LPARAM) &theTree;
theTree.SortChildrenCB(&tvs);
return true;
}
void CVkeyeditView::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW *pNMTreeView = (NM_TREEVIEW*) pNMHDR;
CTreeCtrl &tTree = this->GetTreeCtrl ();
CTreeCtrl &theTree = this->GetTreeCtrl ();
HTREEITEM hItem = pNMTreeView->itemNew.hItem;
GetDocument()->UpdateAllViews ( this, 2, (CObject*)theTree.GetItemData(hItem) );
*pResult = 0;
}