Пример #1
0
        public NotebookMenuItem(Note note, Notebook notebook) :
            base(notebook == null ? Catalog.GetString("No notebook") : notebook.Name)
        {
            this.note     = note;
            this.notebook = notebook;

            if (notebook == null)
            {
                // This is for the "No notebook" menu item

                // Check to see if the specified note belongs
                // to a notebook.  If so, don't activate the
                // radio button.
                if (NotebookManager.GetNotebookFromNote(note) == null)
                {
                    Active = true;
                }
            }
            else if (notebook.ContainsNote(note))
            {
                Active = true;
            }

            Activated += OnActivated;
        }
Пример #2
0
        /// <summary>
        /// Search the notes! A match number of
        /// <see cref="int.MaxValue"/> indicates that the note
        /// title contains the search term.
        /// </summary>
        /// <param name="query">
        /// A <see cref="System.String"/>
        /// </param>
        /// <param name="case_sensitive">
        /// A <see cref="System.Boolean"/>
        /// </param>
        /// <param name="selected_notebook">
        /// A <see cref="Notebooks.Notebook"/>.  If this is not
        /// null, only the notes of the specified notebook will
        /// be searched.
        /// </param>
        /// <returns>
        /// A <see cref="IDictionary`2"/> with the relevant Notes
        /// and a match number. If the search term is in the title,
        /// number will be <see cref="int.MaxValue"/>.
        /// </returns>
        public IDictionary <Note, int> SearchNotes(
            string query,
            bool case_sensitive,
            Notebooks.Notebook selected_notebook)
        {
            string [] words = Search.SplitWatchingQuotes(query);

            // Used for matching in the raw note XML
            string [] encoded_words             = SplitWatchingQuotes(XmlEncoder.Encode(query));
            Dictionary <Note, int> temp_matches = new Dictionary <Note, int>();

            // Skip over notes that are template notes
            Tag template_tag = TagManager.GetOrCreateSystemTag(TagManager.TemplateNoteSystemTag);

            foreach (Note note in manager.Notes)
            {
                // Skip template notes
                if (note.ContainsTag(template_tag))
                {
                    continue;
                }

                // Skip notes that are not in the
                // selected notebook
                if (selected_notebook != null &&
                    selected_notebook.ContainsNote(note) == false)
                {
                    continue;
                }

                // First check the note's title for a match,
                // if there is no match check the note's raw
                // XML for at least one match, to avoid
                // deserializing Buffers unnecessarily.

                if (0 < FindMatchCountInNote(note.Title,
                                             words,
                                             case_sensitive))
                {
                    temp_matches.Add(note, int.MaxValue);
                }
                else if (CheckNoteHasMatch(note,
                                           encoded_words,
                                           case_sensitive))
                {
                    int match_count =
                        FindMatchCountInNote(note.TextContent,
                                             words,
                                             case_sensitive);

                    if (match_count > 0)
                    {
                        // TODO: Improve note.GetHashCode()
                        temp_matches.Add(note, match_count);
                    }
                }
            }
            return(temp_matches);
        }