| 219 | } |
| 220 | |
| 221 | static void drawLogicalMap(unsigned minPhysicalCylinder, |
| 222 | unsigned maxPhysicalCylinder, |
| 223 | unsigned minPhysicalHead, |
| 224 | unsigned maxPhysicalHead, |
| 225 | const Disk& disk, |
| 226 | const DiskLayout& diskLayout) |
| 227 | { |
| 228 | auto originalFontSize = ImGui::GetFontSize(); |
| 229 | int numPhysicalCylinders = maxPhysicalCylinder - minPhysicalCylinder + 1; |
| 230 | int numPhysicalHeads = maxPhysicalHead - minPhysicalHead + 1; |
| 231 | if (!numPhysicalCylinders || !numPhysicalHeads) |
| 232 | return; |
| 233 | |
| 234 | if (ImGui::BeginTable("logicalMap", |
| 235 | numPhysicalCylinders + 1, |
| 236 | ImGuiTableFlags_NoSavedSettings | |
| 237 | ImGuiTableFlags_HighlightHoveredColumn | |
| 238 | ImGuiTableFlags_NoClip | ImGuiTableFlags_NoPadInnerX | |
| 239 | ImGuiTableFlags_NoPadOuterX | ImGuiTableFlags_Borders)) |
| 240 | { |
| 241 | DEFER(ImGui::EndTable()); |
| 242 | |
| 243 | ImGui::PushFont(NULL, originalFontSize * 0.6); |
| 244 | DEFER(ImGui::PopFont()); |
| 245 | |
| 246 | ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, {0, 0}); |
| 247 | DEFER(ImGui::PopStyleVar()); |
| 248 | |
| 249 | float rowHeight = originalFontSize * 0.6 * 2.0; |
| 250 | ImGui::TableSetupColumn( |
| 251 | "", ImGuiTableColumnFlags_WidthFixed, originalFontSize); |
| 252 | |
| 253 | for (unsigned physicalHead = minPhysicalHead; |
| 254 | physicalHead <= maxPhysicalHead; |
| 255 | physicalHead++) |
| 256 | { |
| 257 | unsigned logicalHead = |
| 258 | diskLayout.remapHeadPhysicalToLogical(physicalHead); |
| 259 | |
| 260 | ImGui::TableNextRow(ImGuiTableRowFlags_None, rowHeight); |
| 261 | ImGui::TableNextColumn(); |
| 262 | |
| 263 | auto text = fmt::format("h{}", logicalHead); |
| 264 | auto textSize = ImGui::CalcTextSize(text.c_str()); |
| 265 | ImGui::SetCursorPos( |
| 266 | {ImGui::GetCursorPosX() + ImGui::GetColumnWidth() / 2 - |
| 267 | textSize.x / 2, |
| 268 | ImGui::GetCursorPosY() + rowHeight / 2 - textSize.y / 2}); |
| 269 | ImGui::Text("%s", text.c_str()); |
| 270 | |
| 271 | ImGui::PushStyleVar( |
| 272 | ImGuiStyleVar_SelectableTextAlign, ImVec2(0.5f, 0.5f)); |
| 273 | DEFER(ImGui::PopStyleVar()); |
| 274 | |
| 275 | for (unsigned physicalCylinder = minPhysicalCylinder; |
| 276 | physicalCylinder <= maxPhysicalCylinder; |
| 277 | physicalCylinder++) |
| 278 | { |
no test coverage detected