コード例 #1
0
        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("");
            }
        }
コード例 #2
0
        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("");
            }
        }
コード例 #3
0
        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("");
            }
        }
コード例 #4
0
        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);
                        }
                    }
                }
            }
        }
コード例 #5
0
        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);
            }
        }