/*! \brief Saves a page to a file. * \par Function Description * This function saves the page <B>page</B> to a file named * <B>filename</B>. * * It returns the value returned by function <B>f_save()</B> trying * to save page <B>page</B> to file <B>filename</B> (1 on success, 0 * on failure). * * <B>page</B> may not be the current page of <B>toplevel</B>. The * current page of <B>toplevel</B> is not affected by this function. * * \param [in] toplevel The toplevel environment. * \param [in] page The page to save. * \param [in] filename The name of the file in which to save page. * \returns 1 on success, 0 otherwise. */ gint x_window_save_page (GSCHEM_TOPLEVEL *w_current, PAGE *page, const gchar *filename) { TOPLEVEL *toplevel = w_current->toplevel; PAGE *old_current; const gchar *log_msg, *state_msg; gint ret; g_return_val_if_fail (toplevel != NULL, 0); g_return_val_if_fail (page != NULL, 0); g_return_val_if_fail (filename != NULL, 0); /* save current page for restore after opening */ old_current = toplevel->page_current; /* change to page */ s_page_goto (toplevel, page); /* and try saving current page to filename */ ret = (gint)f_save (toplevel, filename); if (ret != 1) { /* an error occured when saving page to file */ log_msg = _("Could NOT save page [%s]\n"); state_msg = _("Error while trying to save"); } else { /* successful save of page to file, update page... */ /* change page name if necessary and prepare log message */ if (g_ascii_strcasecmp (page->page_filename, filename) != 0) { g_free (page->page_filename); page->page_filename = g_strdup (filename); log_msg = _("Saved as [%s]\n"); } else { log_msg = _("Saved [%s]\n"); } state_msg = _("Saved"); /* reset page CHANGED flag */ page->CHANGED = 0; /* update recent file list */ recent_files_add(filename); } /* log status of operation */ s_log_message (log_msg, filename); /* update display and page manager */ x_window_set_current_page (w_current, old_current); i_set_state_msg (w_current, SELECT, state_msg); i_update_toolbar (w_current); return ret; }
/*! \brief Saves a page to a file. * \par Function Description * This function saves the page <B>page</B> to a file named * <B>filename</B>. * * It returns the value returned by function <B>f_save()</B> trying * to save page <B>page</B> to file <B>filename</B> (1 on success, 0 * on failure). * * <B>page</B> may not be the current page of <B>toplevel</B>. The * current page of <B>toplevel</B> is not affected by this function. * * \param [in] w_current The toplevel environment. * \param [in] page The page to save. * \param [in] filename The name of the file in which to save page. * \returns 1 on success, 0 otherwise. */ gint x_window_save_page (GschemToplevel *w_current, PAGE *page, const gchar *filename) { TOPLEVEL *toplevel = gschem_toplevel_get_toplevel (w_current); const gchar *log_msg, *state_msg; gint ret; GError *err = NULL; g_return_val_if_fail (toplevel != NULL, 0); g_return_val_if_fail (page != NULL, 0); g_return_val_if_fail (filename != NULL, 0); /* try saving page to filename */ ret = (gint)f_save (toplevel, page, filename, &err); if (ret != 1) { log_msg = _("Could NOT save page [%s]\n"); state_msg = _("Error while trying to save"); GtkWidget *dialog; dialog = gtk_message_dialog_new (GTK_WINDOW (w_current->main_window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, "%s", err->message); gtk_window_set_title (GTK_WINDOW (dialog), _("Failed to save file")); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); g_clear_error (&err); } else { /* successful save of page to file, update page... */ /* change page name if necessary and prepare log message */ if (g_ascii_strcasecmp (page->page_filename, filename) != 0) { g_free (page->page_filename); page->page_filename = g_strdup (filename); log_msg = _("Saved as [%s]\n"); } else { log_msg = _("Saved [%s]\n"); } state_msg = _("Saved"); /* reset page CHANGED flag */ page->CHANGED = 0; /* add to recent file list */ gtk_recent_manager_add_item (recent_manager, g_filename_to_uri(filename, NULL, NULL)); i_set_filename (w_current, page->page_filename); x_pagesel_update (w_current); } /* log status of operation */ s_log_message (log_msg, filename); i_set_state_msg (w_current, SELECT, state_msg); return ret; }
/*! \brief Set new state, then show state field * * \par Function Description * Set new state, then show state field. * * \param [in] w_current GSCHEM_TOPLEVEL structure * \param [in] newstate The new state * *EK* Egil Kvaleberg */ void i_set_state(GSCHEM_TOPLEVEL *w_current, enum x_states newstate) { i_set_state_msg(w_current, newstate, NULL); }