| 550 | } |
| 551 | |
| 552 | void BrowserWindow::processSimulationList() |
| 553 | { |
| 554 | ImGui::PushID("SimulationList"); |
| 555 | static ImGuiTableFlags flags = ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Hideable | ImGuiTableFlags_Sortable |
| 556 | | ImGuiTableFlags_SortMulti | ImGuiTableFlags_RowBg | ImGuiTableFlags_BordersOuter | ImGuiTableFlags_BordersV |
| 557 | | ImGuiTableFlags_ScrollY | ImGuiTableFlags_ScrollX; |
| 558 | |
| 559 | if (ImGui::BeginTable("Browser", 11, flags, ImVec2(-1, -scale(WorkspaceBottomSpace)), 0.0f)) { |
| 560 | ImGui::TableSetupColumn("Simulation", ImGuiTableColumnFlags_WidthFixed, scale(210.0f), NetworkResourceColumnId_SimulationName); |
| 561 | ImGui::TableSetupColumn("Description", ImGuiTableColumnFlags_WidthFixed, scale(200.0f), NetworkResourceColumnId_Description); |
| 562 | ImGui::TableSetupColumn("Reactions", ImGuiTableColumnFlags_WidthFixed, scale(140.0f), NetworkResourceColumnId_Likes); |
| 563 | ImGui::TableSetupColumn( |
| 564 | "Timestamp", |
| 565 | ImGuiTableColumnFlags_DefaultSort | ImGuiTableColumnFlags_WidthFixed | ImGuiTableColumnFlags_PreferSortDescending, |
| 566 | scale(135.0f), |
| 567 | NetworkResourceColumnId_Timestamp); |
| 568 | ImGui::TableSetupColumn("User name", ImGuiTableColumnFlags_WidthFixed, scale(120.0f), NetworkResourceColumnId_UserName); |
| 569 | ImGui::TableSetupColumn("Downloads", ImGuiTableColumnFlags_WidthFixed, 0.0f, NetworkResourceColumnId_NumDownloads); |
| 570 | ImGui::TableSetupColumn("Width", ImGuiTableColumnFlags_WidthFixed, 0.0f, NetworkResourceColumnId_Width); |
| 571 | ImGui::TableSetupColumn("Height", ImGuiTableColumnFlags_WidthFixed, 0.0f, NetworkResourceColumnId_Height); |
| 572 | ImGui::TableSetupColumn("Objects", ImGuiTableColumnFlags_WidthFixed, 0.0f, NetworkResourceColumnId_Particles); |
| 573 | ImGui::TableSetupColumn("File size", ImGuiTableColumnFlags_WidthFixed, 0.0f, NetworkResourceColumnId_FileSize); |
| 574 | ImGui::TableSetupColumn("Version", ImGuiTableColumnFlags_WidthFixed, 0.0f, NetworkResourceColumnId_Version); |
| 575 | ImGui::TableSetupScrollFreeze(0, 1); |
| 576 | ImGui::TableHeadersRow(); |
| 577 | ImGui::TableSetBgColor(ImGuiTableBgTarget_RowBg0, Const::TableHeaderColor); |
| 578 | |
| 579 | //create treeTOs if sorting changed |
| 580 | if (auto sortSpecs = ImGui::TableGetSortSpecs()) { |
| 581 | if (sortSpecs->SpecsDirty) { |
| 582 | for (WorkspaceType workspaceType = 0; workspaceType < WorkspaceType_Count; ++workspaceType) { |
| 583 | auto& workspace = _workspaces.at(WorkspaceId{NetworkResourceType_Simulation, workspaceType}); |
| 584 | workspace.sortSpecs.clear(); |
| 585 | for (int i = 0; i < sortSpecs->SpecsCount; ++i) { |
| 586 | workspace.sortSpecs.emplace_back(sortSpecs->Specs[i]); |
| 587 | } |
| 588 | createTreeTOs(workspace); |
| 589 | } |
| 590 | sortSpecs->SpecsDirty = false; |
| 591 | } |
| 592 | } |
| 593 | |
| 594 | //process treeTOs |
| 595 | auto& workspace = _workspaces.at(_currentWorkspace); |
| 596 | auto scheduleRecreateTreeTOs = false; |
| 597 | |
| 598 | ImGuiListClipper clipper; |
| 599 | clipper.Begin(workspace.treeTOs.size()); |
| 600 | while (clipper.Step()) |
| 601 | for (int row = clipper.DisplayStart; row < clipper.DisplayEnd; row++) { |
| 602 | auto treeTO = workspace.treeTOs.at(row); |
| 603 | if (treeTO->isLeaf()) { |
| 604 | _lastSessionData.registrate(treeTO->getLeaf().rawTO); |
| 605 | } |
| 606 | |
| 607 | ImGui::PushID(row); |
| 608 | ImGui::TableNextRow(0, scale(RowHeight)); |
| 609 | ImGui::TableNextColumn(); |