| 608 | SortPreservingSelection( |
| 609 | [&] |
| 610 | { |
| 611 | CmpModsContext ctx; |
| 612 | ctx.column = column; |
| 613 | ctx.ascending = ascending; |
| 614 | QSort(_modRows.Data(), _modRows.Size(), ctx, CmpMods); |
| 615 | // _visible holds actual row indices into the just-reordered _modRows. |
| 616 | if (IsFilterActive()) |
| 617 | RebuildVisibleRows(); |
| 618 | }); |
| 619 | } |
| 620 | |
| 621 | // The checked rows' @modId joined by ',' (selection order), "" if none. This is |
| 622 | // the human/harness-readable view of the active set (triAssertModsActiveSet); the |
| 623 | // comma — not the path separator ';' — keeps it embeddable in a tri .sqf string, |
| 624 | // whose runner splits statements on ';'. BuildModPath produces the real ';'-joined |
| 625 | // path the re-mount consumes. |
| 626 | RString CModsList::CheckedModIds() const |