private void SetSearchKeywords_EXECUTE(string search_string)
        {
            // Check if we are repeating the search or not...
            if (previous_search_string != search_string)
            {
                FeatureTrackingManager.Instance.UseFeature(Features.Document_Search);
                previous_search_string     = search_string;
                previous_search_result_set = PDFSearcher.Search(pdf_renderer_control_stats.pdf_document, search_string);
            }
            else
            {
                FeatureTrackingManager.Instance.UseFeature(Features.Document_SearchAgain);
            }

            PDFSearchResultSet search_result_set = previous_search_result_set;

            // Set the PDF viewer search results
            pdf_renderer_control.SetSearchKeywords(search_result_set);

            // Set the bottom list box search results
            if (null != search_result_set && search_result_set.Count > 0)
            {
                GridBOTTOM.Visibility = Visibility.Visible;
            }
            else
            {
                GridBOTTOM.Visibility = Visibility.Collapsed;
            }

            ListSearchDetails.DataContext = search_result_set.AsList();
        }
        public static bool DoesBibTeXMatchDocument(BibTexItem bibtex_item, PDFDocument pdf_document, out PDFSearchResultSet search_result_set)
        {
            try
            {
                string authors_string = BibTexTools.GetAuthor(bibtex_item);
                if (!String.IsNullOrEmpty(authors_string))
                {
                    List <NameTools.Name> names = NameTools.SplitAuthors(authors_string, PDFDocument.UNKNOWN_AUTHORS);
                    StringBuilder         sb    = new StringBuilder();
                    foreach (NameTools.Name name in names)
                    {
                        sb.AppendFormat("\"{0}\" ", name.last_name);
                    }

                    string names_search_string = sb.ToString();
                    if (!String.IsNullOrEmpty(names_search_string))
                    {
                        search_result_set = PDFSearcher.Search(pdf_document, 1, names_search_string, PDFSearcher.MATCH_CONTAINS);
                        if (0 < search_result_set.Count)
                        {
                            return(true);
                        }
                    }
                }
            }
            catch (Exception) { }

            search_result_set = new PDFSearchResultSet();
            return(false);
        }
Ejemplo n.º 3
0
        private void ButtonSearchInside_Click(object sender, RoutedEventArgs e)
        {
            FeatureTrackingManager.Instance.UseFeature(Features.Library_SearchInsideOpen);

            PDFSearchResultSet search_result_set = PDFSearcher.Search(PDFDocumentBindable.Underlying, LibraryCatalogControl.FilterTerms);

            ListSearchDetails.DataContext = search_result_set.AsList();
            ObjLookInsidePanel.Visibility = Visibility.Visible;
        }
        public void SetSearchKeywords(PDFSearchResultSet search_result_set)
        {
            // If we have a new seat of search results
            if (previous_search_result_set != search_result_set)
            {
                previous_search_result_set         = search_result_set;
                previous_search_result_placeholder = null;

                foreach (PDFRendererPageControl page_control in ObjPagesPanel.Children.OfType <PDFRendererPageControl>())
                {
                    ASSERT.Test(page_control != null);

                    page_control.SetSearchKeywords(search_result_set);
                }
            }

            // Now find and flash the next (or first) placeholder
            {
                // If we are searching again, go from the placeholder
                if (null != previous_search_result_placeholder)
                {
                    for (int page = previous_search_result_placeholder.page; page <= ObjPagesPanel.Children.Count; ++page)
                    {
                        PDFRendererPageControl page_control = (PDFRendererPageControl)ObjPagesPanel.Children[page - 1];
                        ASSERT.Test(page_control != null);

                        previous_search_result_placeholder = page_control?.SetNextSearchPosition(previous_search_result_placeholder);

                        // If it managed to find a successor search position, stick with that
                        if (null != previous_search_result_placeholder)
                        {
                            break;
                        }
                    }
                }

                // If the placeholder hasn't found a successor, start from scratch
                if (null == previous_search_result_placeholder)
                {
                    for (int page = 1; page <= ObjPagesPanel.Children.Count; ++page)
                    {
                        PDFRendererPageControl page_control = (PDFRendererPageControl)ObjPagesPanel.Children[page - 1];
                        ASSERT.Test(page_control != null);

                        previous_search_result_placeholder = page_control.SetNextSearchPosition(previous_search_result_placeholder);

                        // If it managed to find a successor search position, stick with that
                        if (null != previous_search_result_placeholder)
                        {
                            break;
                        }
                    }
                }
            }
        }
Ejemplo n.º 5
0
        protected virtual void Dispose(bool disposing)
        {
            Logging.Debug("PDFSearchLayer::Dispose({0}) @{1}", disposing, dispose_count);

            try
            {
                if (dispose_count == 0)
                {
                    WPFDoEvents.InvokeInUIThread(() =>
                    {
                        WPFDoEvents.AssertThisCodeIsRunningInTheUIThread();

                        try
                        {
                            foreach (var el in Children)
                            {
                                IDisposable node = el as IDisposable;
                                if (null != node)
                                {
                                    node.Dispose();
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            Logging.Error(ex);
                        }

                        try
                        {
                            Children.Clear();
                        }
                        catch (Exception ex)
                        {
                            Logging.Error(ex);
                        }
                    }, Dispatcher);
                }

                // Clear the references for sanity's sake
                pdf_renderer_control_stats = null;
                search_result_set          = null;

                DataContext = null;
            }
            catch (Exception ex)
            {
                Logging.Error(ex);
            }

            ++dispose_count;

            //base.Dispose(disposing);     // parent only throws an exception (intentionally), so depart from best practices and don't call base.Dispose(bool)
        }
        public static bool DoesBibTeXMatchDocument(string bibtex, PDFDocument pdf_document, out PDFSearchResultSet search_result_set)
        {
            try
            {
                if (!String.IsNullOrEmpty(bibtex))
                {
                    BibTexItem bibtex_item = BibTexParser.ParseOne(bibtex, true);

                    return(DoesBibTeXMatchDocument(bibtex_item, pdf_document, out search_result_set));
                }
            }
            catch (Exception) { }

            search_result_set = new PDFSearchResultSet();
            return(false);
        }
Ejemplo n.º 7
0
        protected virtual void Dispose(bool disposing)
        {
            Logging.Debug("PDFSearchLayer::Dispose({0}) @{1}", disposing, dispose_count);

            WPFDoEvents.InvokeInUIThread(() =>
            {
                WPFDoEvents.SafeExec(() =>
                {
                    if (dispose_count == 0)
                    {
                        foreach (var el in Children)
                        {
                            IDisposable node = el as IDisposable;
                            if (null != node)
                            {
                                node.Dispose();
                            }
                        }
                    }
                });

                WPFDoEvents.SafeExec(() =>
                {
                    Children.Clear();
                });

                WPFDoEvents.SafeExec(() =>
                {
                    DataContext = null;

                    Dispatcher.ShutdownStarted -= Dispatcher_ShutdownStarted;
                });

                WPFDoEvents.SafeExec(() =>
                {
                    // Clear the references for sanity's sake
                    pdf_renderer_control = null;
                    search_result_set    = null;
                });

                ++dispose_count;

                //base.Dispose(disposing);     // parent only throws an exception (intentionally), so depart from best practices and don't call base.Dispose(bool)
            });
        }
        public void SetSearchKeywords()
        {
            PDFSearchResultSet search_result_set = new PDFSearchResultSet();

            SetSearchKeywords(search_result_set);
        }
 internal void SetSearchKeywords(PDFSearchResultSet search_result_set)
 {
     this.search_result_set = search_result_set;
     DoSearch();
 }
Ejemplo n.º 10
0
 internal void SetSearchKeywords(PDFSearchResultSet search_result_set)
 {
     CanvasSearch.SetSearchKeywords(search_result_set);
 }