Пример #1
0
        protected void Navigate(long navigationContextID, MatchNavigationMode mode, RegExpBase regExp, int totalDocsCount, List <double> documentsBlock, int position)
        {
            RegExpMatchResult result = null;

            if (navigationContextID != _navigationContextID || _lastRegExpression != regExp.BuiltExpression)
            {
                CleanupNavigationContext();

                _navigationContextID     = navigationContextID;
                _navigationStartPosition = position;
                _lastRegExpression       = regExp.BuiltExpression;
            }

            switch (mode)
            {
            case MatchNavigationMode.Refresh:
                SendErrorResponse("Invalid navigation mode");
                return;

            case MatchNavigationMode.NextDocument:
                result = Navigate_Document(regExp, totalDocsCount, documentsBlock, position, position, true);
                break;

            case MatchNavigationMode.PrevDocument:
                result = Navigate_Document(regExp, totalDocsCount, documentsBlock, position, position, false);
                break;

            case MatchNavigationMode.NextMatch:
                result = Navigate_Match(regExp, totalDocsCount, documentsBlock, position, position, true);
                break;

            case MatchNavigationMode.PrevMatch:
                result = Navigate_Match(regExp, totalDocsCount, documentsBlock, position, position, false);
                break;

            case MatchNavigationMode.NextUniqueMatch:
                result = Navigate_UniqueMatch(regExp, totalDocsCount, documentsBlock, position, position, true);
                break;

            case MatchNavigationMode.PrevUniqueMatch:
                result = Navigate_UniqueMatch(regExp, totalDocsCount, documentsBlock, position, position, false);
                break;
            }

            SendResponse(new IpcResponse
            {
                ResponseType = IpcResponseType.Success,
                MatchResult  = result
            });
        }
        protected void InvokeNavigate(MatchNavigationMode mode)
        {
            try
            {
                if (_isDirty)
                {
                }

                var formProgress = new FormGenericProgress("Navigating...", DoNavigate, mode, true)
                {
                    CancellationEnabled = true
                };

                formProgress.ShowDialog();
            }
            catch (Exception ex)
            {
                MainForm.ShowExceptionMessage(ex);
            }
        }
        public RegExpMatchResult Navigate(long navigationContextID, RegExpBase regExp, MatchNavigationMode mode, int totalDocumentsCount, double[] documentsBlock, int position)
        {
            lock (myLock)
            {
                try
                {
                    OpenPipe();

                    SendRequest(new IpcRequest
                    {
                        RequestType         = IpcRequestType.Navigate,
                        NavigationContextID = navigationContextID,
                        NavigationMode      = mode,
                        DocumentsBlock      = documentsBlock,
                        TotalDocumentsCount = totalDocumentsCount,
                        Position            = position,
                        RegExp = regExp
                    });

                    var response = GetResponse();

                    ///////////////////////////////////////////////////////////////////////////////

                    if (response.ResponseType == IpcResponseType.Success)
                    {
                        return(response.MatchResult);
                    }

                    throw new Exception(response.ErrorMessage, response.Exception);
                }
                finally
                {
                    ClosePipe();
                }
            }
        }