| 400 | |
| 401 | |
| 402 | void ChildFrame::RedrawDataList(const mdf::detail::DataListBlock& dg, const wxTreeItemId& root) { |
| 403 | for (const auto& data : dg.DataBlockList()) { |
| 404 | if (!data) { |
| 405 | continue; |
| 406 | } |
| 407 | std::ostringstream block_string; |
| 408 | block_string << data->BlockType(); |
| 409 | |
| 410 | const auto* data_block = dynamic_cast<const DataBlock*>(data.get()); |
| 411 | const auto* data_block_list = dynamic_cast<const DataListBlock*>(data.get()); |
| 412 | uint64_t nof_data_bytes = data_block != nullptr ? data_block->DataSize() : 0; |
| 413 | if (data_block_list != nullptr) { |
| 414 | nof_data_bytes = data_block_list->DataSize(); |
| 415 | } |
| 416 | |
| 417 | if (data->BlockType() == "DT") { |
| 418 | block_string << " (Size {bytes]: " << nof_data_bytes << ")"; |
| 419 | left_->AppendItem(root, wxString::FromUTF8(block_string.str()), |
| 420 | TREE_DT, TREE_DT, |
| 421 | new BlockAddress(data->FilePosition())); |
| 422 | } else if (data->BlockType() == "DV" || data->BlockType() == "DI") { |
| 423 | block_string << " (Size {bytes]: " << nof_data_bytes << ")"; |
| 424 | left_->AppendItem(root,wxString::FromUTF8(block_string.str()), |
| 425 | TREE_DT, TREE_DT, |
| 426 | new BlockAddress(data->FilePosition())); |
| 427 | } else if (data->BlockType() == "DZ") { |
| 428 | const auto* dz4 = dynamic_cast<const Dz4Block*>(data.get()); |
| 429 | if (dz4 != nullptr) { |
| 430 | block_string << "/" << dz4->OrigBlockType() |
| 431 | << " (Size [bytes]: " << dz4->CompressedDataSize() |
| 432 | << "/" << dz4->DataSize() << ")"; |
| 433 | } |
| 434 | left_->AppendItem(root,wxString::FromUTF8(block_string.str()), |
| 435 | TREE_DZ, TREE_DZ, new BlockAddress(data->FilePosition())); |
| 436 | } else if (data->BlockType() == "RD" || data->BlockType() == "RV" || data->BlockType() == "RI") { |
| 437 | block_string << " (Size [bytes]: " << nof_data_bytes << ")"; |
| 438 | left_->AppendItem(root, wxString::FromUTF8(block_string.str()), |
| 439 | TREE_RD, TREE_RD, new BlockAddress(data->FilePosition())); |
| 440 | } else if (data->BlockType() == "SD") { |
| 441 | block_string << " (Size [bytes]: " << nof_data_bytes << ")"; |
| 442 | left_->AppendItem(root, wxString::FromUTF8(block_string.str()), |
| 443 | TREE_SD, TREE_SD, new BlockAddress(data->FilePosition())); |
| 444 | } else if (data->BlockType() == "DL") { |
| 445 | block_string << " (Size [bytes]: " << nof_data_bytes << ")"; |
| 446 | auto dl_root = left_->AppendItem(root, wxString::FromUTF8(block_string.str()), |
| 447 | TREE_DL, TREE_DL, new BlockAddress(data->FilePosition())); |
| 448 | const auto* dl = dynamic_cast<const mdf::detail::Dl4Block*>(data.get()); |
| 449 | RedrawDataList(*dl, dl_root); |
| 450 | } else if (data->BlockType() == "LD") { |
| 451 | auto ld_root = left_->AppendItem(root, CreateBlockText(*data), |
| 452 | TREE_DL, TREE_DL, |
| 453 | new BlockAddress(data->FilePosition())); |
| 454 | const auto* data_list = dynamic_cast<const mdf::detail::DataListBlock*>(data.get()); |
| 455 | if (data_list != nullptr) { |
| 456 | RedrawDataList(*data_list, ld_root); |
| 457 | } |
| 458 | } else if (data->BlockType() == "HL") { |
| 459 | auto hl_root = left_->AppendItem(root, CreateBlockText(*data), |
nothing calls this directly
no test coverage detected