Complete disaster-recovery snapshot: engine/game source, game data assets, VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive. Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false, no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
154 lines
3.5 KiB
C++
154 lines
3.5 KiB
C++
// FindView.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "contenttrack.h"
|
|
#include "mainfrm.h"
|
|
|
|
#include "FindView.h"
|
|
#include "finddlg.h"
|
|
#include "NodeDataValueFileDoc.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CFindView
|
|
|
|
IMPLEMENT_DYNCREATE(CFindView, CListView)
|
|
|
|
CFindView::CFindView()
|
|
{
|
|
}
|
|
|
|
CFindView::~CFindView()
|
|
{
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CFindView, CListView)
|
|
//{{AFX_MSG_MAP(CFindView)
|
|
ON_NOTIFY_REFLECT(LVN_ITEMCHANGED, OnItemchanged)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CFindView drawing
|
|
|
|
void CFindView::OnDraw(CDC* pDC)
|
|
{
|
|
CDocument* pDoc = GetDocument();
|
|
// TODO: add draw code here
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CFindView diagnostics
|
|
|
|
#ifdef _DEBUG
|
|
void CFindView::AssertValid() const
|
|
{
|
|
CListView::AssertValid();
|
|
}
|
|
|
|
void CFindView::Dump(CDumpContext& dc) const
|
|
{
|
|
CListView::Dump(dc);
|
|
}
|
|
#endif //_DEBUG
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CFindView message handlers
|
|
|
|
void CFindView::OnInitialUpdate()
|
|
{
|
|
CFindDlg dlg;
|
|
if (IDOK == dlg.DoModal())
|
|
{
|
|
m_listKeyType.AddHead(&dlg.m_listKeyType);
|
|
}
|
|
|
|
CListCtrl *pCtrl = &GetListCtrl();
|
|
|
|
pCtrl->InsertColumn(0,"Find Items...",LVCFMT_LEFT,300);
|
|
|
|
CListView::OnInitialUpdate();
|
|
}
|
|
|
|
BOOL CFindView::PreCreateWindow(CREATESTRUCT& cs)
|
|
{
|
|
cs.style |= LVS_REPORT | LVS_SHOWSELALWAYS | LVS_SINGLESEL;
|
|
return CListView::PreCreateWindow(cs);
|
|
}
|
|
|
|
void CFindView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
|
|
{
|
|
if (pHint)
|
|
// For now... something was wrong, and this is updating itself
|
|
return;
|
|
CListCtrl *pCtrl = &GetListCtrl();
|
|
pCtrl->DeleteAllItems();
|
|
if (GetDocument()->IsKindOf(RUNTIME_CLASS(CNodeDataValueFileDoc)))
|
|
{
|
|
CNodeDataValueFileDoc *pDoc = (CNodeDataValueFileDoc *)GetDocument();
|
|
if (pDoc->m_pActiveChild)
|
|
{
|
|
CMainFrame *pFrame = (CMainFrame*)AfxGetMainWnd();
|
|
pFrame->SetMessageText("Searching...");
|
|
CNodeObject *pNode = pDoc->m_pActiveChild;
|
|
FindNodes(pNode);
|
|
}
|
|
}
|
|
}
|
|
|
|
int CFindView::FindNodes(CNodeObject *pNode)
|
|
{
|
|
int count = 0;
|
|
if (pNode->IsDataValue())
|
|
{
|
|
// Check if it matches the search
|
|
CNodeDataValue *pData = (CNodeDataValue *)pNode;
|
|
int value = pData->GetKeyType();
|
|
bool bMatchClass = this->m_listKeyType.Find((void *)value,NULL);
|
|
if (bMatchClass)
|
|
{
|
|
CListCtrl *pCtrl = &GetListCtrl();
|
|
CString str;
|
|
CNodeObject *pChild = pNode;
|
|
|
|
pChild->GetName(str);
|
|
//str = pChild->GetName();
|
|
/* while (pChild)
|
|
{
|
|
str = pChild->GetName()+":"+str;
|
|
pChild = pChild->GetParentNode();
|
|
}*/
|
|
int index = pCtrl->InsertItem(pCtrl->GetItemCount(),str);
|
|
pCtrl->SetItemData(index,(DWORD)pNode);
|
|
}
|
|
}
|
|
POSITION pos = pNode->GetFirstChild();
|
|
while (pos)
|
|
{
|
|
CNodeObject *pChild = pNode->GetNextChild(pos);
|
|
count += FindNodes(pChild);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
void CFindView::OnItemchanged(NMHDR* pNMHDR, LRESULT* pResult)
|
|
{
|
|
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
|
|
|
|
if (pNMListView->uNewState & LVIS_SELECTED)
|
|
{
|
|
CListCtrl *pCtrl = &GetListCtrl();
|
|
CNodeObject *pNode = (CNodeObject *)pCtrl->GetItemData(pNMListView->iItem);
|
|
if (pNode)
|
|
GetDocument()->UpdateAllViews(this,(DWORD)pNode,NULL);
|
|
}
|
|
*pResult = 0;
|
|
}
|