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.
221 lines
5.3 KiB
221 lines
5.3 KiB
//========= 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; |
|
|
|
}
|
|
|