コード例 #1
0
/**
 * callback called when toggle a radio button of an archive
 * we want only 1 toggle, so erase the others before
 *
 * \param renderer
 * \param path
 * \param assistant
 *
 * \return FALSE
 * */
static gboolean gsb_assistant_archive_export_toggled ( GtkCellRendererToggle *renderer,
						       gchar *path_string,
						       GtkWidget *assistant )
{
    GtkTreeIter iter;
    gboolean value;
    GtkTreePath *path;
    GtkTreePath *path_clicked;
    GtkTreeModel *model;
    gboolean selected = FALSE;

    model = gtk_tree_view_get_model (GTK_TREE_VIEW (archive_export_treeview));
    path_clicked = gtk_tree_path_new_from_string (path_string);
    path = gtk_tree_path_new_first ();

    while (gtk_tree_model_get_iter ( GTK_TREE_MODEL (model),
				     &iter,
				     path ))
    {
	/* if we are on the clicked path, we invert the value,
	 * else, we set the value to 0 */
	if (gtk_tree_path_compare (path, path_clicked))
	    /* the 2 path are different */
	    value = 0;
	else
	{
	    /* the paths are equal */
	    gtk_tree_model_get ( GTK_TREE_MODEL (model),
				 &iter,
				 ARCHIVES_EXPORT_SELECT_COLUMN, &value,
				 -1 );
	    value = !value;

	    /* we will unsensitive the next button only if something chosen */
	    if (value)
		selected = TRUE;
	}
	gtk_list_store_set ( GTK_LIST_STORE (model),
			     &iter,
			     ARCHIVES_EXPORT_SELECT_COLUMN, value,
			     -1 );
	gtk_tree_path_next (path);
    }
    gtk_tree_path_free (path);
    gtk_tree_path_free (path_clicked);

    gsb_assistant_sensitive_button_next (assistant, selected);

    return FALSE;
}
コード例 #2
0
/**
 * Run the Grisbi assistant.  This will pop up a new dialog.
 *
 * \param assistant	Grisbi assistant to run.
 *
 * \return		Outcome of the Grisbi assistant.  Can be
 *			GTK_RESPONSE_APPLY for success and
 *			GTK_RESPONSE_CANCEL for failure
 *			(user canceled or closed dialog).
 */
GtkResponseType gsb_assistant_run ( GtkWidget * assistant )
{
    GtkWidget * notebook, * button_prev;
    GtkWidget *button_select;

    button_prev = g_object_get_data ( G_OBJECT(assistant), "button_prev" );
    button_select = g_object_get_data ( G_OBJECT ( assistant ), "button_select" );

    gtk_widget_show_all ( assistant );
    gtk_widget_hide ( button_select );

    notebook = g_object_get_data ( G_OBJECT(assistant), "notebook" );
    gtk_notebook_set_current_page ( GTK_NOTEBOOK (notebook),
			    0 );
    gtk_widget_grab_focus (GTK_WIDGET (g_object_get_data (G_OBJECT (assistant),
							  "button_next")));

    while ( TRUE )
    {
	gint current = gtk_notebook_get_current_page ( GTK_NOTEBOOK(notebook) );
	gint result, prev, next;

        gchar* tmpstr = g_strdup_printf ( _("%s (%d of %d)"),
						 (gchar *) g_object_get_data ( G_OBJECT(assistant),
									       "title" ),
						 current + 1,
						 gtk_notebook_get_n_pages ( GTK_NOTEBOOK(notebook) ) );
	gtk_window_set_title ( GTK_WINDOW(assistant), tmpstr);
	g_free ( tmpstr );

	result = gtk_dialog_run ( GTK_DIALOG(assistant) );

	tmpstr = g_strdup_printf ( "prev%d", current );
	prev = GPOINTER_TO_INT( g_object_get_data ( G_OBJECT(assistant), tmpstr ));
	g_free ( tmpstr );

    tmpstr = g_strdup_printf ( "next%d", current );
	next = GPOINTER_TO_INT( g_object_get_data ( G_OBJECT(assistant), tmpstr));
	g_free ( tmpstr );

	 switch ( result )
	 {
	     case GTK_RESPONSE_YES:
		gtk_widget_set_sensitive ( button_prev, TRUE );
		if ( gtk_notebook_get_n_pages ( GTK_NOTEBOOK(notebook) ) == ( next + 1 ) )
		{
		    gsb_assistant_change_button_next ( assistant, GTK_STOCK_CLOSE,
						       GTK_RESPONSE_APPLY );
		    gsb_assistant_sensitive_button_prev ( assistant,
							  FALSE );
		}

		gtk_notebook_set_current_page ( GTK_NOTEBOOK(notebook), next );
		break;

	    case GTK_RESPONSE_NO:
		if ( next == -1 )
		{
		    gsb_assistant_change_button_next ( assistant, GTK_STOCK_GO_FORWARD,
						       GTK_RESPONSE_YES );
		}

		gsb_assistant_sensitive_button_next ( assistant, TRUE );

		if ( prev == 0 )
		{
		    gtk_widget_set_sensitive ( button_prev, FALSE );
		}

		gtk_notebook_set_current_page ( GTK_NOTEBOOK(notebook), prev );
		break;

	    case GTK_RESPONSE_APPLY:
		return GTK_RESPONSE_APPLY;

	    default:
	    case GTK_RESPONSE_CANCEL:
		return GTK_RESPONSE_CANCEL;
	}
    }

    return GTK_RESPONSE_CANCEL;
}
コード例 #3
0
/**
 * called when switch page
 *
 * \param assistant
 * \param new_page
 *
 * \return FALSE
 * */
static gboolean gsb_assistant_archive_switch ( GtkWidget *assistant,
					       gint new_page )
{
    gint archive_number;
    GtkTreeModel *model;
    const gchar *export_name;
    gboolean success = FALSE;
    gchar* tmpstr;

    model = gtk_tree_view_get_model (GTK_TREE_VIEW (archive_export_treeview));
    archive_number = gsb_assistant_archive_export_get_selected_archive (model);

    switch (new_page)
    {
	case ARCHIVE_EXPORT_ASSISTANT_INTRO:
	    break;

	case ARCHIVE_EXPORT_ASSISTANT_CHOOSE:
	    if (archive_number)
		gsb_assistant_sensitive_button_next (assistant, TRUE);
	    else
		gsb_assistant_sensitive_button_next (assistant, FALSE);
	    break;

	case ARCHIVE_EXPORT_ASSISTANT_NAME:
	    /* if we come here, an archive must have been selected,
	     * so needn't to check */
	    tmpstr = g_markup_printf_escaped (
                        _("<span size=\"x-large\">Exporting the archive: %s</span>"),
                        gsb_data_archive_get_name (archive_number));
	    gtk_label_set_markup ( GTK_LABEL ( archive_export_label ), tmpstr);
	    g_free ( tmpstr );
        /* on remplace les slash des dates par des points
         * avant de fixer le nom du fichier par défaut */
        tmpstr = ( gchar * )gsb_data_archive_get_name ( archive_number );
        tmpstr = my_strdelimit (tmpstr, "/", "." );
	    gtk_file_chooser_set_current_name ( GTK_FILE_CHOOSER (archive_export_filechooser), tmpstr );
	    gtk_file_chooser_set_current_folder ( GTK_FILE_CHOOSER (archive_export_filechooser), gsb_file_get_last_path () );
	    g_free ( tmpstr );
	    /* need to set the next button to the next function,
	     * because if the export failed and the user did previous button,
	     * the next button stay in the close state */
	    gsb_assistant_change_button_next ( assistant, GTK_STOCK_GO_FORWARD,
					       GTK_RESPONSE_YES );

	    break;

	case ARCHIVE_EXPORT_ASSISTANT_SUCCESS:
	    export_name = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (archive_export_filechooser));
	    switch (gtk_combo_box_get_active (GTK_COMBO_BOX(archive_export_combobox)))
	    {
		case 0:
		    /* GSB format */
		    /* the gsb_file_save_save_file function write directly, so we need to check before
		     * if the file exists */
            /* on vérifie juste que l'extension existe */
            if ( ! g_strrstr ( export_name, ".gsb" ) )
            {
               export_name = g_strconcat ( export_name, ".gsb", NULL );
            }
		    success = gsb_file_util_test_overwrite (export_name)
			&&
			gsb_file_save_save_file ( export_name, conf.compress_backup, archive_number);
		    break;

		case 1:
		    /* QIF format */
            if ( ! g_strrstr ( export_name, ".qif" ) )
            {
               export_name = g_strconcat ( export_name, ".qif", NULL );
            }
		    success = gsb_qif_export_archive ( export_name, archive_number);
		    break;

		case 2:
		    /* CSV format */
            if ( ! g_strrstr ( export_name, ".csv" ) )
            {
               export_name = g_strconcat ( export_name, ".csv", NULL );
            }
		    success = gsb_csv_export_archive ( export_name, archive_number);
		    break;
	    }
	    /* now success = TRUE or FALSE, show the good final page of assistant */
	    if (success)
		gtk_label_set_text ( GTK_LABEL (archive_export_label_success),
				     _("Success!\nThe export of the archive finished successfully.\n\nYou can now close the assistant."));
	    else
	    {
		gtk_label_set_text ( GTK_LABEL (archive_export_label_success),
				     _("Error!\nAn error occured while saving the archive.\n\nPlease press the Previous button to correct the problem,\nor the close button to cancel the action."));
		gsb_assistant_sensitive_button_prev ( assistant, TRUE );
	    }
    }
    return FALSE;
}