Notebook::Ptr NotebookManager::prompt_create_new_notebook(Gtk::Window *parent, const Note::List & notesToAdd) { // Prompt the user for the name of a new notebook CreateNotebookDialog dialog(parent, (GtkDialogFlags)(GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT)); int response = dialog.run (); std::string notebookName = dialog.get_notebook_name(); if (response != Gtk::RESPONSE_OK) return Notebook::Ptr(); Notebook::Ptr notebook = obj().get_or_create_notebook (notebookName); if (!notebook) { DBG_OUT ("Could not create notebook: %s", notebookName.c_str()); } else { DBG_OUT ("Created the notebook: %s (%s)", notebook->get_name().c_str(), notebook->get_normalized_name().c_str()); if (!notesToAdd.empty()) { // Move all the specified notesToAdd into the new notebook for(Note::List::const_iterator iter = notesToAdd.begin(); iter != notesToAdd.end(); ++iter) { obj().move_note_to_notebook (*iter, notebook); } } } return notebook; }
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; }