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.
216 lines
5.0 KiB
C++
216 lines
5.0 KiB
C++
// PeeperView.cpp : implementation of the CPeeperView class
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "Peeper.h"
|
|
|
|
#include "PeeperDoc.h"
|
|
#include "PeeperView.h"
|
|
#include "SearchDlg.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CPeeperView
|
|
|
|
IMPLEMENT_DYNCREATE(CPeeperView, CTreeView)
|
|
|
|
BEGIN_MESSAGE_MAP(CPeeperView, CTreeView)
|
|
//{{AFX_MSG_MAP(CPeeperView)
|
|
ON_WM_CREATE()
|
|
ON_NOTIFY_REFLECT(TVN_ITEMEXPANDING, OnItemexpanding)
|
|
ON_NOTIFY_REFLECT(TVN_SELCHANGED, OnSelchanged)
|
|
ON_COMMAND(ID_EDIT_SEARCH, OnEditSearch)
|
|
ON_COMMAND(ID_EDIT_FINDNEXT, OnEditFindnext)
|
|
ON_UPDATE_COMMAND_UI(ID_EDIT_FINDNEXT, OnUpdateEditFindnext)
|
|
//}}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()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CPeeperView construction/destruction
|
|
|
|
CPeeperView::CPeeperView()
|
|
{
|
|
LastFind=NULL;
|
|
m_dwDefaultStyle |= TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS;
|
|
}
|
|
|
|
CPeeperView::~CPeeperView()
|
|
{
|
|
}
|
|
|
|
BOOL CPeeperView::PreCreateWindow(CREATESTRUCT& cs)
|
|
{
|
|
// TODO: Modify the Window class or styles here by modifying
|
|
// the CREATESTRUCT cs
|
|
|
|
return CTreeView::PreCreateWindow(cs);
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CPeeperView drawing
|
|
|
|
void CPeeperView::OnDraw(CDC* pDC)
|
|
{
|
|
CPeeperDoc* pDoc = GetDocument();
|
|
ASSERT_VALID(pDoc);
|
|
// TODO: add draw code for native data here
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CPeeperView printing
|
|
|
|
BOOL CPeeperView::OnPreparePrinting(CPrintInfo* pInfo)
|
|
{
|
|
// default preparation
|
|
return DoPreparePrinting(pInfo);
|
|
}
|
|
|
|
void CPeeperView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
|
|
{
|
|
// TODO: add extra initialization before printing
|
|
}
|
|
|
|
void CPeeperView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
|
|
{
|
|
// TODO: add cleanup after printing
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CPeeperView diagnostics
|
|
|
|
#ifdef _DEBUG
|
|
void CPeeperView::AssertValid() const
|
|
{
|
|
CTreeView::AssertValid();
|
|
}
|
|
|
|
void CPeeperView::Dump(CDumpContext& dc) const
|
|
{
|
|
CTreeView::Dump(dc);
|
|
}
|
|
|
|
CPeeperDoc* CPeeperView::GetDocument() // non-debug version is inline
|
|
{
|
|
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CPeeperDoc)));
|
|
return (CPeeperDoc*)m_pDocument;
|
|
}
|
|
#endif //_DEBUG
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CPeeperView message handlers
|
|
|
|
int CPeeperView::OnCreate(LPCREATESTRUCT lpCreateStruct)
|
|
{
|
|
if (CTreeView::OnCreate(lpCreateStruct) == -1)
|
|
return -1;
|
|
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
void CPeeperView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
|
|
{
|
|
CPeeperDoc* pDoc = GetDocument();
|
|
ASSERT_VALID(pDoc);
|
|
|
|
if(pSender!=this)
|
|
{
|
|
GetTreeCtrl().DeleteAllItems();
|
|
HTREEITEM itm=GetTreeCtrl().InsertItem(pDoc->GetDspPath(),TVI_ROOT);
|
|
GetTreeCtrl().SetItemData(itm,(DWORD)&(pDoc->FileTree));
|
|
pDoc->FileTree.FillTree(&GetTreeCtrl(),itm,0,1);
|
|
}
|
|
}
|
|
|
|
void CPeeperView::OnItemexpanding(NMHDR* pNMHDR, LRESULT* pResult)
|
|
{
|
|
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
|
|
// TODO: Add your control notification handler code here
|
|
HTREEITEM itm=pNMTreeView->itemNew.hItem;
|
|
HTREEITEM child;
|
|
|
|
child=GetTreeCtrl().GetChildItem(itm);
|
|
|
|
do
|
|
{
|
|
if(!GetTreeCtrl().ItemHasChildren(child))
|
|
{
|
|
HNode *node=(HNode *)GetTreeCtrl().GetItemData(child);
|
|
ASSERT(node!=NULL);
|
|
node->FillTree(&GetTreeCtrl(),child,0,1);
|
|
}
|
|
}
|
|
while((child=GetTreeCtrl().GetNextSiblingItem(child))!=NULL);
|
|
|
|
|
|
*pResult = 0;
|
|
}
|
|
|
|
void CPeeperView::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult)
|
|
{
|
|
CPeeperDoc* pDoc = GetDocument();
|
|
ASSERT_VALID(pDoc);
|
|
|
|
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
|
|
HTREEITEM itm=pNMTreeView->itemNew.hItem;
|
|
pDoc->UpdateAllViews(this,GetTreeCtrl().GetItemData(itm));
|
|
|
|
*pResult = 0;
|
|
}
|
|
|
|
void CPeeperView::OnEditSearch()
|
|
{
|
|
CPeeperDoc* pDoc = GetDocument();
|
|
ASSERT_VALID(pDoc);
|
|
|
|
CSearchDlg dlg;
|
|
|
|
dlg.m_FileName=SearchString;
|
|
if(dlg.DoModal()==IDOK)
|
|
{
|
|
SearchString=dlg.m_FileName;
|
|
OnEditFindnext();
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
void CPeeperView::OnEditFindnext()
|
|
{
|
|
CPeeperDoc* pDoc = GetDocument();
|
|
ASSERT_VALID(pDoc);
|
|
|
|
|
|
LastFind=pDoc->FileTree.Find(SearchString,LastFind);
|
|
if(LastFind)
|
|
{
|
|
LastFind->DrillDownTo(&GetTreeCtrl());
|
|
GetTreeCtrl().EnsureVisible(LastFind->GetItem());
|
|
GetTreeCtrl().SelectItem(LastFind->GetItem());
|
|
}
|
|
else
|
|
{
|
|
MessageBox("Not Found","No More Results",MB_OK);
|
|
}
|
|
|
|
}
|
|
|
|
void CPeeperView::OnUpdateEditFindnext(CCmdUI* pCmdUI)
|
|
{
|
|
// TODO: Add your command update UI handler code here
|
|
pCmdUI->Enable((SearchString!="")?TRUE:FALSE);
|
|
}
|