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; }
/// <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); }