Files
firestorm/Gameleap/code/mw4/Code/MW4GameEd2/ObjTreeView.cpp
T
Cyd 2b8ca921cb Initial full mirror of c:\VWE (source + assets + toolchain + outputs) via Git LFS
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.
2026-06-24 21:28:16 -05:00

246 lines
4.8 KiB
C++

// ObjTreeView.cpp : implementation file
//
#include "stdafx.h"
#include "mw4gameed2.h"
#include "ObjTreeView.h"
#include "ObjListView.h"
#include "GUIObjectList.h"
#include "ObjectManager.h"
#include "Refresher.h"
/////////////////////////////////////////////////////////////////////////////
// CObjTreeView
IMPLEMENT_DYNCREATE(CObjTreeView, CView)
CObjTreeView::CObjTreeView():DropTarget(this)
{
ObjMan=NULL;
}
CObjTreeView::~CObjTreeView()
{
}
BEGIN_MESSAGE_MAP(CObjTreeView, CView)
//{{AFX_MSG_MAP(CObjTreeView)
ON_WM_CREATE()
ON_WM_SIZE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CObjTreeView drawing
void CObjTreeView::OnDraw(CDC* pDC)
{
CDocument* pDoc = GetDocument();
// TODO: add draw code here
}
/////////////////////////////////////////////////////////////////////////////
// CObjTreeView diagnostics
#ifdef _DEBUG
void CObjTreeView::AssertValid() const
{
CView::AssertValid();
}
void CObjTreeView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CObjTreeView message handlers
void CObjTreeView::Refresh(GUIObjectList *objman,bool expandlist)
{
m_Tree.DeleteAllItems();
objman->SortChildren();
HTREEITEM itm=objman->AddToBranch(&m_Tree,TVI_ROOT);
if(expandlist)
{
m_Tree.SelectItem(itm);
ExpandAll();
}
}
void CObjTreeView::ExpandAll(HTREEITEM itm)
{
if(itm==NULL) return;
m_Tree.Expand(itm,TVE_EXPAND);
HTREEITEM nitm=m_Tree.GetChildItem(itm);
while(nitm!=NULL)
{
ExpandAll(nitm);
nitm=m_Tree.GetNextSiblingItem(nitm);
}
}
GUIObjectList *CObjTreeView::GetSelList()
{
HTREEITEM itm;
itm=m_Tree.GetSelectedItem();
if(itm==NULL) return NULL;
else return (GUIObjectList *)m_Tree.GetItemData(itm);
}
int CObjTreeView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
m_Tree.Create(TVS_EDITLABELS|TVS_HASBUTTONS|TVS_HASLINES|TVS_SHOWSELALWAYS|TVS_LINESATROOT,CRect(0,0,200,200),this,NULL);
// m_Tree.SetItemHeight(20);
m_Tree.ShowWindow(SW_SHOW);
DropTarget.Register(&m_Tree);
return 0;
}
void CObjTreeView::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
if(GetSafeHwnd()!=NULL)
{
m_Tree.SetWindowPos(NULL,0,0,cx,cy,SWP_NOZORDER);
}
}
void CObjTreeView::SetImageList(CImageList *ilist)
{
m_Tree.SetImageList(ilist,LVSIL_NORMAL);
}
BOOL CObjTreeView::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
HRESULT res=CView::OnNotify(wParam, lParam, pResult);
NMHDR *hdr=(NMHDR *)lParam;
switch(hdr->code)
{
case TVN_ENDLABELEDIT:
{
NMTVDISPINFO* pTVDispInfo = (NMTVDISPINFO*)hdr;
EdGUIObject *gobj=(EdGUIObject *)pTVDispInfo->item.lParam;
CString newname=CString(pTVDispInfo->item.pszText);
if(newname!="")
ObjMan->SetObjectName(gobj,newname);
m_Tree.SetItemText(pTVDispInfo->item.hItem,gobj->GetName());
Refresher::Instance->OverviewRefresh();
}
break;
case TVN_SELCHANGED:
{
MyList->Refresh(GetSelList());
}
break;
case NM_DBLCLK:
{
HTREEITEM selitm=m_Tree.GetSelectedItem();
if(selitm!=NULL)
{
EdGUIObject *gobj=(EdGUIObject *)m_Tree.GetItemData(selitm);
ObjMan->SetProperties(gobj,this);
m_Tree.SetItemText(selitm,gobj->GetName());
Refresher::Instance->WorldRefresh();
}
}
break;
case TVN_BEGINDRAG:
{
}
break;
}
return res;
}
HTREEITEM CObjTreeView::FindItem(EdGUIObject *gobj,HTREEITEM itm)
{
if(itm==NULL) return NULL;
if(itm!=TVI_ROOT)
{
GUIObjectList *slst=(GUIObjectList *)gobj,*dlst=(GUIObjectList *)m_Tree.GetItemData(itm);
if(dlst==slst)
return itm;
}
HTREEITEM ritm,nitm=m_Tree.GetChildItem(itm);
while(nitm!=NULL)
{
ritm=FindItem(gobj,nitm);
if(ritm!=NULL) return ritm;
nitm=m_Tree.GetNextSiblingItem(nitm);
}
return NULL;
}
bool CObjTreeView::InTree(EdGUIObject *gobj)
{
return (FindItem(gobj)!=NULL);
}
bool CObjTreeView::DrillDownTo(EdGUIObject *gobj)
{
HTREEITEM itm;
itm=FindItem(gobj);
if(itm==NULL) return false;
m_Tree.EnsureVisible(itm);
m_Tree.Select(itm,TVGN_CARET);
return true;
}
void CObjTreeView::ListDropAt(CPoint &pnt)
{
GUIObjectList *sobj=ObjectAtPoint(pnt);
if(sobj && sobj->CanTakeChildren())
{
MyList->AddSelectedToGroup(sobj);
}
}
GUIObjectList *CObjTreeView::ObjectAtPoint(CPoint &pnt)
{
UINT flags;
HTREEITEM taritem;
taritem=m_Tree.HitTest(pnt,&flags);
if(taritem!=NULL)
{
return (GUIObjectList *)m_Tree.GetItemData(taritem);
}
return NULL;
}
bool CObjTreeView::CanListDropAt(CPoint &pnt)
{
GUIObjectList *olist=ObjectAtPoint(pnt);
if(olist!=NULL && olist->CanTakeChildren()) return true;
else return false;
}