void Gobby::OperationNew::on_request_finished(const InfBrowserIter* iter, const GError* error) { if(error) { const Glib::ustring prefix = Glib::ustring::compose( m_directory ? _("Failed to create directory \"%1\""): _("Failed to create document \"%1\""), m_name); get_status_bar().add_error_message(prefix, error->message); fail(); } else { if(!m_directory) { InfSessionProxy* proxy = inf_browser_get_session(m_browser, iter); g_assert(proxy != NULL); get_folder_manager().add_document( m_browser, iter, proxy, NULL); } finish(); } }
void Gobby::OperationOpen::on_request_finished(const InfBrowserIter* iter, const GError* error) { if(error != NULL) { OperationOpen::error(error->message); } else { // Store document info so that we know where we loaded the // file from, so we don't have to ask the user where to store // it when s/he wants to save it again. DocumentInfoStorage::Info info; info.uri = m_file->get_uri(); info.encoding = m_encoding; info.eol_style = m_eol_style; get_info_storage().set_info( m_parent.get_browser(), iter, info); InfSessionProxy* proxy = inf_browser_get_session(m_parent.get_browser(), iter); g_assert(proxy != NULL); get_folder_manager().add_document( m_parent.get_browser(), iter, proxy, NULL); finish(); } }
Gobby::OperationSave::OperationSave(Operations& operations, TextSessionView& view, const Glib::RefPtr<Gio::File>& file, const std::string& encoding, DocumentInfoStorage::EolStyle eol_style): Operation(operations), m_file(file), m_view(&view), m_start_time(std::time(NULL)), m_current_line_index(0), m_encoding(encoding), m_eol_style(eol_style), m_storage_key(view.get_info_storage_key()), m_iconv(encoding.c_str(), "UTF-8"), m_buffer_size(0), m_buffer_index(0) { const Folder& folder = get_folder_manager().get_text_folder(); folder.signal_document_removed().connect( sigc::mem_fun(*this, &OperationSave::on_document_removed)); // Load content so that the session can go on while saving GtkTextBuffer* buffer = GTK_TEXT_BUFFER(view.get_text_buffer()); GtkTextIter prev; GtkTextIter pos; GtkTextIter old_pos; gtk_text_buffer_get_start_iter(buffer, &prev); pos = prev; if(!gtk_text_iter_ends_line(&pos)) gtk_text_iter_forward_to_line_end(&pos); do { Line line; line.first = gtk_text_buffer_get_text(buffer, &prev, &pos, TRUE); line.second = gtk_text_iter_get_line_index(&pos); m_lines.push_back(line); //if(gtk_text_iter_is_end(&prev)) // break; old_pos = pos; gtk_text_iter_forward_line(&prev); gtk_text_iter_forward_to_line_end(&pos); } while(!gtk_text_iter_equal(&pos, &old_pos)); m_current_line = m_lines.begin(); }