public void OnCellMouseMove(DataGridViewCellMouseEventArgs e) { var revision = _gridView.GetRevision(e.RowIndex); if (revision is null) { return; } var oldText = _toolTip.GetToolTip(_gridView); // Always generated tooltip text of first column (graph) because it **really** depends of the pixel hovered if (e.ColumnIndex != 0 && _previousRowIndex == e.RowIndex && _previousColumnIndex == e.ColumnIndex) { return; } _previousRowIndex = e.RowIndex; _previousColumnIndex = e.ColumnIndex; var newText = GetToolTipText(); if (newText != oldText) { _toolTip.SetToolTip(_gridView, newText); } if (!_toolTip.Active) { _toolTip.Active = true; } return; string GetToolTipText() { try { 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(e.ColumnIndex, e.RowIndex), out var showToolTip) && showToolTip) { return(_gridView.Rows[e.RowIndex].Cells[e.ColumnIndex].FormattedValue?.ToString() ?? ""); } } catch (Exception) { // Ignore exception when fetching tooltip. It's not worth crashing for. } // no tooltip unless always active or truncated return(""); } }
public void OnCellMouseMove(DataGridViewCellMouseEventArgs e) { var revision = _gridView.GetRevision(e.RowIndex); if (revision == null) { return; } var oldText = _toolTip.GetToolTip(_gridView); var newText = GetToolTipText(); if (newText != oldText) { _toolTip.SetToolTip(_gridView, newText); } if (!_toolTip.Active) { _toolTip.Active = true; } return; string GetToolTipText() { try { if (_gridView.Columns[e.ColumnIndex].Tag is ColumnProvider provider && provider.TryGetToolTip(e, revision, out var toolTip) && !string.IsNullOrWhiteSpace(toolTip)) { int lineCount = 0; for (int pos = 0; pos < toolTip.Length; ++pos) { if (toolTip[pos] == '\n' && ++lineCount == 30) { return(toolTip.Substring(0, pos + 1) + "..."); } } return(toolTip); } if (_isTruncatedByCellPos.TryGetValue(new Point(e.ColumnIndex, e.RowIndex), out var showToolTip) && showToolTip) { return(_gridView.Rows[e.RowIndex].Cells[e.ColumnIndex].FormattedValue?.ToString() ?? ""); } } catch (Exception) { // Ignore exception when fetching tooltip. It's not worth crashing for. } // no tooltip unless always active or truncated return(""); } }
public void OnCellMouseMove(DataGridViewCellMouseEventArgs e) { var revision = _gridView.GetRevision(e.RowIndex); if (revision == null) { return; } var oldText = _toolTip.GetToolTip(_gridView); var newText = GetToolTipText(); if (newText != oldText) { _toolTip.SetToolTip(_gridView, newText); } if (!_toolTip.Active) { _toolTip.Active = true; } return; string GetToolTipText() { 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(e.ColumnIndex, e.RowIndex), out var showToolTip) && showToolTip) { return(_gridView.Rows[e.RowIndex].Cells[e.ColumnIndex].FormattedValue?.ToString() ?? ""); } // no tooltip unless always active or truncated return(""); } }
private void OnBuildInfoUpdate(BuildInfo buildInfo) { if (_buildStatusCancellationToken == null) { return; } foreach (var commitHash in buildInfo.CommitHashList) { var index = _revisionGridView.TryGetRevisionIndex(commitHash); if (!index.HasValue) { continue; } var revision = _revisionGridView.GetRevision(index.Value); if (revision == null) { continue; } if (revision.BuildStatus == null || buildInfo.StartDate >= revision.BuildStatus.StartDate) { revision.BuildStatus = buildInfo; if (index.Value < _revisionGridView.RowCount) { if (_revisionGridView.Rows[index.Value].Cells[ColumnProvider.Index].Displayed) { _revisionGridView.UpdateCellValue(ColumnProvider.Index, index.Value); } } } } }
private void FindNextMatch(int startIndex, string searchString, bool reverse) { if (_gridView.RowCount == 0) { return; } var matchIndex = reverse ? SearchBackwards() : SearchForward(); if (matchIndex.HasValue) { _label.ForeColor = SystemColors.InfoText; // Prevent flickering when further typing is selecting the same row if (_gridView.SelectedRows.Count != 1 || _gridView.SelectedRows[0].Index != matchIndex) { using (WaitCursorScope.Enter()) { _gridView.ClearSelection(); _gridView.Rows[matchIndex.Value].Selected = true; _gridView.CurrentCell = _gridView.Rows[matchIndex.Value].Cells[1]; } } } else { _label.ForeColor = Color.DarkRed; } int?SearchForward() { // Check for out of bounds roll over if required int index; if (startIndex < 0 || startIndex >= _gridView.RowCount) { startIndex = 0; } for (index = startIndex; index < _gridView.RowCount; ++index) { if (_gitRevisionTester.Matches(_gridView.GetRevision(index), searchString)) { return(index); } } // We didn't find it so start searching from the top for (index = 0; index < startIndex; ++index) { if (_gitRevisionTester.Matches(_gridView.GetRevision(index), searchString)) { return(index); } } return(null); } int?SearchBackwards() { // Check for out of bounds roll over if required int index; if (startIndex < 0 || startIndex >= _gridView.RowCount) { startIndex = _gridView.RowCount - 1; } for (index = startIndex; index >= 0; --index) { if (_gitRevisionTester.Matches(_gridView.GetRevision(index), searchString)) { return(index); } } // We didn't find it so start searching from the bottom for (index = _gridView.RowCount - 1; index > startIndex; --index) { if (_gitRevisionTester.Matches(_gridView.GetRevision(index), searchString)) { return(index); } } return(null); } }