using System; using System.Collections.Generic; namespace MergeHub.Models { /// /// 한 행 안에서 그려질 선 하나. /// 행의 위쪽 경계 FromLane 에서 들어와 아래쪽 경계 ToLane 으로 나간다. /// FromLane == ToLane 이면 수직선(그 레인을 그냥 통과), 다르면 합류/분기 사선이다. /// public sealed class GraphEdge { public GraphEdge(int fromLane, int toLane, int colorIndex) { FromLane = fromLane; ToLane = toLane; ColorIndex = colorIndex; } public int FromLane { get; } public int ToLane { get; } public int ColorIndex { get; } } /// 커밋 한 개가 차지하는 그래프 행. public sealed class GraphRow { public GraphRow(int lane, int colorIndex, IReadOnlyList edges, bool isMerge) { Lane = lane; ColorIndex = colorIndex; Edges = edges; IsMerge = isMerge; } /// 점(커밋)이 찍히는 레인. public int Lane { get; } public int ColorIndex { get; } public IReadOnlyList Edges { get; } /// 부모가 둘 이상 - 속을 비운 점으로 그린다. public bool IsMerge { get; } /// 목록 전체에서 쓰인 최대 레인 수. 열 너비를 맞추는 데 쓴다. public int LaneCount { get; set; } = 1; } /// 커밋 목록에 바인딩되는 항목 - 커밋 정보 + 그 커밋이 그려질 그래프 행. public sealed class CommitNode { public CommitNode(CommitInfo commit, GraphRow graph) { Commit = commit; Graph = graph; } public CommitInfo Commit { get; } public GraphRow Graph { get; } } }