/*
** Command & Conquer Renegade(tm)
** Copyright 2025 Electronic Arts Inc.
**
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program. If not, see .
*/
#if !defined(AFX_DATATREEVIEW_H__2BB39E40_5D3A_11D2_9FC6_00104B791122__INCLUDED_)
#define AFX_DATATREEVIEW_H__2BB39E40_5D3A_11D2_9FC6_00104B791122__INCLUDED_
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
// DataTreeView.h : header file
//
#include "AfxCView.H"
#include "AssetTypes.H"
#include "Vector.H"
// Forward declarations
class RenderObjClass;
class AssetInfoClass;
/////////////////////////////////////////////////////////////////////////////
//
// CDataTreeView view
//
class CDataTreeView : public CTreeView
{
protected:
CDataTreeView(); // protected constructor used by dynamic creation
DECLARE_DYNCREATE(CDataTreeView)
// Attributes
public:
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CDataTreeView)
public:
virtual void OnInitialUpdate();
protected:
virtual void OnDraw(CDC* pDC); // overridden to draw this view
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
//}}AFX_VIRTUAL
// Implementation
protected:
virtual ~CDataTreeView();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
// Generated message map functions
protected:
//{{AFX_MSG(CDataTreeView)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnSelChanged(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnDeleteItem(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnDblclk(NMHDR* pNMHDR, LRESULT* pResult);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
public:
/////////////////////////////////////////////////////////////////////
// Public methods
/////////////////////////////////////////////////////////////////////
//
// Asset insertion methods
//
bool Add_Asset_To_Tree (LPCTSTR name, ASSET_TYPE type, bool bselect);
void LoadAssetsIntoTree (void);
void Refresh_Asset (LPCTSTR new_name, LPCTSTR old_name, ASSET_TYPE type);
//
// Animation insertion methods
//
void LoadAnimationsIntoTree (void);
void LoadAnimationsIntoTree (HTREEITEM hItem);
bool Are_Anims_Restricted (void) const { return m_RestrictAnims; }
void Restrict_Anims (bool onoff);
//
// Texture insertion methods
//
void Load_Materials_Into_Tree (void);
//
// Display methods
//
void Display_Asset (HTREEITEM htree_item = NULL);
void Select_Next (void);
void Select_Prev (void);
void Reload_Lightmap_Models (void);
//
// Information methods
//
RenderObjClass * Get_Current_Render_Obj (void) const;
AssetInfoClass * Get_Current_Asset_Info (void) const;
LPCTSTR GetCurrentSelectionName (void);
ASSET_TYPE GetCurrentSelectionType (void);
HTREEITEM FindChildItem (HTREEITEM hParentItem, LPCTSTR pszChildItemName);
HTREEITEM FindChildItem (HTREEITEM hParentItem, RenderObjClass *prender_obj);
HTREEITEM FindFirstChildItemBasedOnHierarchyName (HTREEITEM hParentItem, LPCTSTR pszHierarchyName);
HTREEITEM FindSiblingItemBasedOnHierarchyName (HTREEITEM hCurrentItem, LPCTSTR pszHierarchyName);
void Build_Render_Object_List (DynamicVectorClass &asset_list, HTREEITEM hparent = TVI_ROOT);
//
// Initialization methods
//
void CreateRootNodes (void);
protected:
///////////////////////////////////////////////////////////////////////
// Protected methods
///////////////////////////////////////////////////////////////////////
ASSET_TYPE Determine_Tree_Location (RenderObjClass &render_obj, HTREEITEM &hroot, int &icon_index);
void Determine_Tree_Location (ASSET_TYPE type, HTREEITEM &hroot, int &icon_index);
RenderObjClass * Create_Render_Obj_To_Display (HTREEITEM htree_item);
void Add_Emitters_To_Menu (HMENU hmenu, RenderObjClass &render_obj);
void Free_Child_Models (HTREEITEM parent_item);
private:
///////////////////////////////////////////////////////
//
// Private member data
//
HTREEITEM m_hMaterialsRoot;
HTREEITEM m_hMeshRoot;
HTREEITEM m_hAggregateRoot;
HTREEITEM m_hLODRoot;
HTREEITEM m_hMeshCollectionRoot;
HTREEITEM m_hEmitterRoot;
HTREEITEM m_hPrimitivesRoot;
HTREEITEM m_hHierarchyRoot;
HTREEITEM m_hSoundRoot;
int m_iAnimationIcon;
int m_iTCAnimationIcon;
int m_iADAnimationIcon;
int m_iMeshIcon;
int m_iMaterialIcon;
int m_iLODIcon;
int m_iEmitterIcon;
int m_iPrimitivesIcon;
int m_iAggregateIcon;
int m_iHierarchyIcon;
int m_iSoundIcon;
bool m_RestrictAnims;
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_DATATREEVIEW_H__2BB39E40_5D3A_11D2_9FC6_00104B791122__INCLUDED_)