You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
222 lines
5.3 KiB
222 lines
5.3 KiB
5 years ago
|
//========= 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;
|
||
|
|
||
|
}
|