/// <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); } // } }
Notebook::Ptr NotebookManager::get_or_create_notebook(const std::string & notebookName) { if (notebookName.empty()) throw sharp::Exception ("NotebookManager.GetNotebook () called with a null name."); Notebook::Ptr notebook = get_notebook (notebookName); if (notebook) { return notebook; } Gtk::TreeIter iter; // lock (locker) { notebook = get_notebook (notebookName); if (notebook) return notebook; try { m_adding_notebook = true; notebook = Notebook::Ptr(new Notebook (notebookName)); } catch(...) { // set flag to fast and rethrow m_adding_notebook = false; throw; } m_adding_notebook = false; iter = m_notebooks->append (); iter->set_value(0, notebook); m_notebookMap [notebook->get_normalized_name()] = iter; // Create the template note so the system tag // that represents the notebook actually gets // saved to a note (and persisted after Tomboy // is shut down). Note::Ptr templateNote = notebook->get_template_note (); // Make sure the template note has the notebook tag. // Since it's possible for the template note to already // exist, we need to make sure it gets tagged. templateNote->add_tag (notebook->get_tag()); m_note_added_to_notebook (*templateNote, notebook); // } return notebook; }