コード例 #1
0
        private bool Update()
        {
            var currentPath = StringUtils.NormalizePath(_gateway.GetFullCurrentPath());

            var firstVisibleLine = _gateway.GetFirstVisibleLine(); // здесь не учитваются заколлапшенные строки

            var startLineIndex = _gateway.DocLineFromVisible(firstVisibleLine);
            var linesOnScreen  = _gateway.LinesOnScreen();
            var endLineIndex   = _gateway.DocLineFromVisible(firstVisibleLine + linesOnScreen);
            var endPosition    = _gateway.GetLineEndPosition(endLineIndex).Value;

            bool changed = currentPath != _currentPath;

            if (changed)
            {
                _expectedWords = _settingsMapping
                                 .Select(item => item.Src)
                                 .Where(src => src.MatchesWithPath(currentPath))
                                 .Select(src => src.Word)
                                 .ToList();
            }

            changed = changed ||
                      startLineIndex != _startLineIndex ||
                      endPosition != _endPosition;

            _currentPath    = currentPath;
            _startLineIndex = startLineIndex;
            _endPosition    = endPosition;

            return(changed);
        }
コード例 #2
0
        public void OnNotification(ScNotification notification)
        {
            if (isPanelVisible)
            {
                if (notification.Header.Code == (uint)SciMsg.SCN_UPDATEUI)
                {
                    if (!(ValidateMkdnExtension() || ValidateHtmlExtension()))
                    {
                        return;
                    }

                    var firstVisible = scintillaGateway.GetFirstVisibleLine();
                    var buffer       = scintillaGateway.LinesOnScreen() / 2;
                    var lastLine     = scintillaGateway.GetLineCount();

                    if (syncViewWithCaretPosition && lastCaretPosition != scintillaGateway.GetCurrentPos().Value)
                    {
                        lastCaretPosition = scintillaGateway.GetCurrentPos().Value;
                        if ((scintillaGateway.GetCurrentLineNumber() - buffer) < 0)
                        {
                            ScrollToElementAtLineNo(0);
                        }
                        else
                        {
                            ScrollToElementAtLineNo(scintillaGateway.GetCurrentLineNumber() - buffer);
                        }
                    }
                    else if (syncViewWithScrollPosition && lastCaretPosition != scintillaGateway.GetFirstVisibleLine())
                    {
                        lastCaretPosition = scintillaGateway.GetFirstVisibleLine();
                        var middleLine = lastCaretPosition + buffer;
                        if (scintillaGateway.GetFirstVisibleLine() == 0)
                        {
                            ScrollToElementAtLineNo(0);
                        }
                        else if ((lastCaretPosition + scintillaGateway.LinesOnScreen()) >= lastLine)
                        {
                            ScrollToElementAtLineNo(lastLine);
                        }
                        else
                        {
                            ScrollToElementAtLineNo(middleLine - buffer);
                        }
                    }
                }
                else if (notification.Header.Code == (uint)NppMsg.NPPN_BUFFERACTIVATED)
                {
                    UpdateEditorInformation();
                    RenderMarkdown();
                }
                else if (notification.Header.Code == (uint)SciMsg.SCN_MODIFIED)
                {
                    // bool isInsert = (notification.ModificationType & (uint)SciMsg.SC_MOD_INSERTTEXT) != 0;
                    // bool isDelete = (notification.ModificationType & (uint)SciMsg.SC_MOD_DELETETEXT) != 0;
                    // // Any modifications made ?
                    // if (isInsert || isDelete)
                    // {
                    if (ValidateMkdnExtension() || ValidateHtmlExtension())
                    {
                        lastTickCount = Environment.TickCount;
                        RenderMarkdown();
                    }
                    // }
                }
                else if (notification.Header.Code == (uint)NppMsg.NPPN_FILESAVED)
                {
                    RenderMarkdown();
                }
            }
        }