/// <summary> /// Place the specified note into the specified notebook. If the /// note already belongs to a notebook, it will be removed from that /// notebook first. /// </summary> /// <param name="note"> /// A <see cref="Note"/> /// </param> /// <param name="notebook"> /// A <see cref="Notebook"/>. If Notebook is null, the note will /// be removed from its current notebook. /// </param> /// <returns>True if the note was successfully moved.</returns> bool NotebookManager::move_note_to_notebook (const Note::Ptr & note, const Notebook::Ptr & notebook) { if (!note) { return false; } // NOTE: In the future we may want to allow notes // to exist in multiple notebooks. For now, to // alleviate the confusion, only allow a note to // exist in one notebook at a time. Notebook::Ptr currentNotebook = get_notebook_from_note (note); if (currentNotebook == notebook) return true; // It's already there. if(currentNotebook) { note->remove_tag (currentNotebook->get_tag()); m_note_removed_from_notebook(*note, currentNotebook); } // Only attempt to add the notebook tag when this // menu item is not the "No notebook" menu item. if(notebook) { note->add_tag(notebook->get_tag()); m_note_added_to_notebook(*note, notebook); } return true; }
void NotebookManager::delete_notebook(const Notebook::Ptr & notebook) { if (!notebook) throw sharp::Exception ("NotebookManager::delete_notebook () called with a null argument."); std::string normalized_name = notebook->get_normalized_name(); std::map<std::string, Gtk::TreeIter>::iterator map_iter = m_notebookMap.find (normalized_name); if (map_iter == m_notebookMap.end()) return; // lock (locker) { map_iter = m_notebookMap.find (normalized_name); if (map_iter == m_notebookMap.end()) { return; } Gtk::TreeIter iter = map_iter->second;; m_notebooks->erase (iter); m_notebookMap.erase (map_iter); // Remove the notebook tag from every note that's in the notebook std::list<Note *> notes; notebook->get_tag()->get_notes(notes); for(std::list<Note *>::const_iterator note_iter = notes.begin(); note_iter != notes.end(); ++note_iter) { Note * note = *note_iter; note->remove_tag (notebook->get_tag()); m_note_removed_from_notebook (*note, notebook); } // } }