ChunkTreeView.cpp 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. /*
  2. ** Command & Conquer Renegade(tm)
  3. ** Copyright 2025 Electronic Arts Inc.
  4. **
  5. ** This program is free software: you can redistribute it and/or modify
  6. ** it under the terms of the GNU General Public License as published by
  7. ** the Free Software Foundation, either version 3 of the License, or
  8. ** (at your option) any later version.
  9. **
  10. ** This program is distributed in the hope that it will be useful,
  11. ** but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. ** GNU General Public License for more details.
  14. **
  15. ** You should have received a copy of the GNU General Public License
  16. ** along with this program. If not, see <http://www.gnu.org/licenses/>.
  17. */
  18. /***********************************************************************************************
  19. *** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S ***
  20. ***********************************************************************************************
  21. * *
  22. * Project Name : ChunkView *
  23. * *
  24. * $Archive:: /Commando/Code/Tools/ChunkView/ChunkTreeView.cpp $*
  25. * *
  26. * Author:: Greg Hjelstrom *
  27. * *
  28. * $Modtime:: 9/28/99 9:48a $*
  29. * *
  30. * $Revision:: 2 $*
  31. * *
  32. *---------------------------------------------------------------------------------------------*
  33. * Functions: *
  34. * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
  35. // ChunkTreeView.cpp : implementation file
  36. //
  37. #include "stdafx.h"
  38. #include "ChunkView.h"
  39. #include "ChunkTreeView.h"
  40. #include "ChunkViewDoc.h"
  41. #ifdef _DEBUG
  42. #define new DEBUG_NEW
  43. #undef THIS_FILE
  44. static char THIS_FILE[] = __FILE__;
  45. #endif
  46. /////////////////////////////////////////////////////////////////////////////
  47. // CChunkTreeView
  48. IMPLEMENT_DYNCREATE(CChunkTreeView, CTreeView)
  49. CChunkTreeView::CChunkTreeView()
  50. {
  51. }
  52. CChunkTreeView::~CChunkTreeView()
  53. {
  54. }
  55. BEGIN_MESSAGE_MAP(CChunkTreeView, CTreeView)
  56. //{{AFX_MSG_MAP(CChunkTreeView)
  57. ON_NOTIFY_REFLECT(TVN_SELCHANGED, OnSelchanged)
  58. //}}AFX_MSG_MAP
  59. END_MESSAGE_MAP()
  60. /////////////////////////////////////////////////////////////////////////////
  61. // CChunkTreeView drawing
  62. void CChunkTreeView::OnDraw(CDC* pDC)
  63. {
  64. CDocument* pDoc = GetDocument();
  65. // TODO: add draw code here
  66. }
  67. /////////////////////////////////////////////////////////////////////////////
  68. // CChunkTreeView diagnostics
  69. #ifdef _DEBUG
  70. void CChunkTreeView::AssertValid() const
  71. {
  72. CTreeView::AssertValid();
  73. }
  74. void CChunkTreeView::Dump(CDumpContext& dc) const
  75. {
  76. CTreeView::Dump(dc);
  77. }
  78. #endif //_DEBUG
  79. /////////////////////////////////////////////////////////////////////////////
  80. // CChunkTreeView message handlers
  81. void CChunkTreeView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
  82. {
  83. // Reset the entire tree view
  84. CTreeCtrl &tree = GetTreeCtrl();
  85. tree.DeleteAllItems();
  86. // Set the style attributes
  87. long flags = tree.GetStyle();
  88. flags |= TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS | TVS_SHOWSELALWAYS | TVS_DISABLEDRAGDROP;
  89. SetWindowLong(tree.GetSafeHwnd(), GWL_STYLE, flags);
  90. // Get the chunk tree
  91. CChunkViewDoc * doc = (CChunkViewDoc *)GetDocument();
  92. const ChunkImageClass * chunk = doc->Get_File_Image().Get_Root();
  93. // Build the tree control to reflect the chunk tree
  94. for (int i=0; i<chunk->Get_Sibling_Count(); i++) {
  95. Insert_Chunk(chunk->Get_Sibling(i));
  96. }
  97. }
  98. void CChunkTreeView::Insert_Chunk(const ChunkImageClass * chunk, HTREEITEM Parent)
  99. {
  100. char name[256];
  101. sprintf(name,"Chunk ID: 0x%08X Length: %d",chunk->Get_ID(),chunk->Get_Length());
  102. CTreeCtrl &tree = GetTreeCtrl();
  103. HTREEITEM tree_item = tree.InsertItem(name, Parent);
  104. tree.SetItem(tree_item, TVIF_PARAM,0,0,0,0,0, (long) chunk);
  105. for (int i=0; i<chunk->Get_Child_Count(); i++) {
  106. Insert_Chunk(chunk->Get_Child(i),tree_item);
  107. }
  108. }
  109. void CChunkTreeView::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult)
  110. {
  111. NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
  112. CChunkViewDoc * doc = (CChunkViewDoc *)GetDocument();
  113. doc->Set_Cur_Chunk((ChunkImageClass *) pNMTreeView->itemNew.lParam);
  114. doc->UpdateAllViews(this); // update all of the other views
  115. *pResult = 0;
  116. }