From ae60c044dbf8a84f287aaa8c1d478c46c57fd66f Mon Sep 17 00:00:00 2001 From: Michael Seibt Date: Sun, 1 Jul 2018 02:04:01 +0200 Subject: [PATCH] #5125 Tooltips for lanes of graph in RevisionGrid --- .../Columns/AuthorNameColumnProvider.cs | 2 +- .../Columns/BuildStatusColumnProvider.cs | 4 +- .../RevisionGrid/Columns/ColumnProvider.cs | 2 +- .../Columns/CommitIdColumnProvider.cs | 2 +- .../Columns/DateColumnProvider.cs | 2 +- .../Columns/GraphColumnProvider.cs | 4 +- .../Columns/MessageColumnProvider.cs | 4 +- .../RevisionGrid/RevisionDataGridView.cs | 52 +++++++++++++++++++ .../RevisionGrid/RevisionGridControl.cs | 2 +- .../RevisionGridToolTipProvider.cs | 12 ++--- 10 files changed, 69 insertions(+), 17 deletions(-) diff --git a/GitUI/UserControls/RevisionGrid/Columns/AuthorNameColumnProvider.cs b/GitUI/UserControls/RevisionGrid/Columns/AuthorNameColumnProvider.cs index 8b1e5690b92..5ee0bc1a7e0 100644 --- a/GitUI/UserControls/RevisionGrid/Columns/AuthorNameColumnProvider.cs +++ b/GitUI/UserControls/RevisionGrid/Columns/AuthorNameColumnProvider.cs @@ -44,7 +44,7 @@ public override void OnCellFormatting(DataGridViewCellFormattingEventArgs e, Git e.FormattingApplied = true; } - public override bool TryGetToolTip(GitRevision revision, out string toolTip) + public override bool TryGetToolTip(DataGridViewCellMouseEventArgs e, GitRevision revision, out string toolTip) { if (revision.ObjectId?.IsArtificial == true) { diff --git a/GitUI/UserControls/RevisionGrid/Columns/BuildStatusColumnProvider.cs b/GitUI/UserControls/RevisionGrid/Columns/BuildStatusColumnProvider.cs index cf03bf553e8..549a8548ee3 100644 --- a/GitUI/UserControls/RevisionGrid/Columns/BuildStatusColumnProvider.cs +++ b/GitUI/UserControls/RevisionGrid/Columns/BuildStatusColumnProvider.cs @@ -158,7 +158,7 @@ public override void OnCellFormatting(DataGridViewCellFormattingEventArgs e, Git e.FormattingApplied = true; } - public override bool TryGetToolTip(GitRevision revision, out string toolTip) + public override bool TryGetToolTip(DataGridViewCellMouseEventArgs e, GitRevision revision, out string toolTip) { if (revision.BuildStatus != null) { @@ -166,7 +166,7 @@ public override bool TryGetToolTip(GitRevision revision, out string toolTip) return true; } - return base.TryGetToolTip(revision, out toolTip); + return base.TryGetToolTip(e, revision, out toolTip); } } } \ No newline at end of file diff --git a/GitUI/UserControls/RevisionGrid/Columns/ColumnProvider.cs b/GitUI/UserControls/RevisionGrid/Columns/ColumnProvider.cs index e94af52b2a0..c7f396b706b 100644 --- a/GitUI/UserControls/RevisionGrid/Columns/ColumnProvider.cs +++ b/GitUI/UserControls/RevisionGrid/Columns/ColumnProvider.cs @@ -38,7 +38,7 @@ public virtual void OnCellFormatting(DataGridViewCellFormattingEventArgs e, GitR /// Returning false here will not stop a tool tip being automatically displayed for truncated text. [ContractAnnotation("=>false,toolTip:null")] [ContractAnnotation("=>true,toolTip:notnull")] - public virtual bool TryGetToolTip(GitRevision revision, [CanBeNull] out string toolTip) + public virtual bool TryGetToolTip(DataGridViewCellMouseEventArgs e, GitRevision revision, [CanBeNull] out string toolTip) { toolTip = default; return false; diff --git a/GitUI/UserControls/RevisionGrid/Columns/CommitIdColumnProvider.cs b/GitUI/UserControls/RevisionGrid/Columns/CommitIdColumnProvider.cs index d905f6a241b..f2e14f75863 100644 --- a/GitUI/UserControls/RevisionGrid/Columns/CommitIdColumnProvider.cs +++ b/GitUI/UserControls/RevisionGrid/Columns/CommitIdColumnProvider.cs @@ -58,7 +58,7 @@ public override void OnCellPainting(DataGridViewCellPaintingEventArgs e, GitRevi } } - public override bool TryGetToolTip(GitRevision revision, out string toolTip) + public override bool TryGetToolTip(DataGridViewCellMouseEventArgs e, GitRevision revision, out string toolTip) { if (revision.ObjectId?.IsArtificial == true) { diff --git a/GitUI/UserControls/RevisionGrid/Columns/DateColumnProvider.cs b/GitUI/UserControls/RevisionGrid/Columns/DateColumnProvider.cs index 214dfd75866..1b109f202fb 100644 --- a/GitUI/UserControls/RevisionGrid/Columns/DateColumnProvider.cs +++ b/GitUI/UserControls/RevisionGrid/Columns/DateColumnProvider.cs @@ -58,7 +58,7 @@ string FormatDate(DateTime dt) } } - public override bool TryGetToolTip(GitRevision revision, out string toolTip) + public override bool TryGetToolTip(DataGridViewCellMouseEventArgs e, GitRevision revision, out string toolTip) { if (revision.ObjectId?.IsArtificial == true) { diff --git a/GitUI/UserControls/RevisionGrid/Columns/GraphColumnProvider.cs b/GitUI/UserControls/RevisionGrid/Columns/GraphColumnProvider.cs index ac44731eab2..c13a62c4041 100644 --- a/GitUI/UserControls/RevisionGrid/Columns/GraphColumnProvider.cs +++ b/GitUI/UserControls/RevisionGrid/Columns/GraphColumnProvider.cs @@ -40,11 +40,11 @@ public override void Refresh() !_grid.ShouldHideGraph(inclBranchFilter: false); } - public override bool TryGetToolTip(GitRevision revision, out string toolTip) + public override bool TryGetToolTip(DataGridViewCellMouseEventArgs e, GitRevision revision, out string toolTip) { if (!revision.IsArtificial) { - toolTip = revision.Guid; + toolTip = _gridView.GetLaneInfo(e.X - ColumnLeftMargin, e.RowIndex); return true; } diff --git a/GitUI/UserControls/RevisionGrid/Columns/MessageColumnProvider.cs b/GitUI/UserControls/RevisionGrid/Columns/MessageColumnProvider.cs index 22147474d6f..33979978077 100644 --- a/GitUI/UserControls/RevisionGrid/Columns/MessageColumnProvider.cs +++ b/GitUI/UserControls/RevisionGrid/Columns/MessageColumnProvider.cs @@ -209,7 +209,7 @@ public override void OnCellFormatting(DataGridViewCellFormattingEventArgs e, Git e.FormattingApplied = true; } - public override bool TryGetToolTip(GitRevision revision, out string toolTip) + public override bool TryGetToolTip(DataGridViewCellMouseEventArgs e, GitRevision revision, out string toolTip) { if (!revision.IsArtificial && revision.HasMultiLineMessage) { @@ -217,7 +217,7 @@ public override bool TryGetToolTip(GitRevision revision, out string toolTip) return true; } - return base.TryGetToolTip(revision, out toolTip); + return base.TryGetToolTip(e, revision, out toolTip); } } } \ No newline at end of file diff --git a/GitUI/UserControls/RevisionGrid/RevisionDataGridView.cs b/GitUI/UserControls/RevisionGrid/RevisionDataGridView.cs index 0d38522dc99..496ed1ba4e7 100644 --- a/GitUI/UserControls/RevisionGrid/RevisionDataGridView.cs +++ b/GitUI/UserControls/RevisionGrid/RevisionDataGridView.cs @@ -425,6 +425,58 @@ public GitRevision GetRevision(int rowIndex) } } + public string GetLaneInfo(int x, int rowIndex) + { + int lane = x / _laneWidth; + var laneInfoText = new System.Text.StringBuilder(); + lock (_graphModel) + { + Graph.ILaneRow laneRow = _graphModel[rowIndex]; + if (laneRow != null) + { + Node node = null; + if (lane == laneRow.NodeLane) + { + node = laneRow.Node; + if (!node.Data.IsArtificial) + { + laneInfoText.AppendLine(node.Data.Guid); + } + } + else if (lane >= 0 && lane < laneRow.Count) + { + for (int laneInfoIndex = 0, laneInfoCount = laneRow.LaneInfoCount(lane); laneInfoIndex < laneInfoCount; ++laneInfoIndex) + { + // search for next node below this row + Graph.LaneInfo laneInfo = laneRow[lane, laneInfoIndex]; + Junction firstJunction = laneInfo.Junctions.First(); + for (int nodeIndex = 0, nodeCount = firstJunction.NodeCount; nodeIndex < nodeCount; ++nodeIndex) + { + Node laneNode = firstJunction[nodeIndex]; + if (laneNode.Index > rowIndex) + { + node = laneNode; + break; // from for (nodes) + } + } + } + } + + if (node != null) + { + if (laneInfoText.Length > 0) + { + laneInfoText.AppendLine(); + } + + laneInfoText.Append(node.Data.Subject); + } + } + } + + return laneInfoText.ToString(); + } + public void Prune() { lock (_graphModel) diff --git a/GitUI/UserControls/RevisionGrid/RevisionGridControl.cs b/GitUI/UserControls/RevisionGrid/RevisionGridControl.cs index 7e9c9109033..f9940ff1eff 100644 --- a/GitUI/UserControls/RevisionGrid/RevisionGridControl.cs +++ b/GitUI/UserControls/RevisionGrid/RevisionGridControl.cs @@ -173,7 +173,7 @@ public RevisionGridControl() _gridView.MouseDoubleClick += OnGridViewDoubleClick; _gridView.MouseClick += OnGridViewMouseClick; _gridView.MouseEnter += (_, e) => _toolTipProvider.OnCellMouseEnter(); - _gridView.CellMouseMove += (_, e) => _toolTipProvider.OnCellMouseMove(e.ColumnIndex, e.RowIndex); + _gridView.CellMouseMove += (_, e) => _toolTipProvider.OnCellMouseMove(e); _gridView.Loading += OnGridViewLoading; // Allow to drop patch file on revision grid diff --git a/GitUI/UserControls/RevisionGrid/RevisionGridToolTipProvider.cs b/GitUI/UserControls/RevisionGrid/RevisionGridToolTipProvider.cs index 1808907d4fc..91af87f843e 100644 --- a/GitUI/UserControls/RevisionGrid/RevisionGridToolTipProvider.cs +++ b/GitUI/UserControls/RevisionGrid/RevisionGridToolTipProvider.cs @@ -23,9 +23,9 @@ public void OnCellMouseEnter() _toolTip.AutoPopDelay = 32767; } - public void OnCellMouseMove(int columnIndex, int rowIndex) + public void OnCellMouseMove(DataGridViewCellMouseEventArgs e) { - var revision = _gridView.GetRevision(rowIndex); + var revision = _gridView.GetRevision(e.RowIndex); if (revision == null) { @@ -49,17 +49,17 @@ public void OnCellMouseMove(int columnIndex, int rowIndex) string GetToolTipText() { - if (_gridView.Columns[columnIndex].Tag is ColumnProvider provider && - provider.TryGetToolTip(revision, out var toolTip) && + if (_gridView.Columns[e.ColumnIndex].Tag is ColumnProvider provider && + provider.TryGetToolTip(e, revision, out var toolTip) && !string.IsNullOrWhiteSpace(toolTip)) { return toolTip; } - if (_isTruncatedByCellPos.TryGetValue(new Point(columnIndex, rowIndex), out var showToolTip) + if (_isTruncatedByCellPos.TryGetValue(new Point(e.ColumnIndex, e.RowIndex), out var showToolTip) && showToolTip) { - return _gridView.Rows[rowIndex].Cells[columnIndex].FormattedValue?.ToString() ?? ""; + return _gridView.Rows[e.RowIndex].Cells[e.ColumnIndex].FormattedValue?.ToString() ?? ""; } // no tooltip unless always active or truncated