/** * Create the preview page of the import assistant. * * \param assistant GsbAssistant to add page into. * * \return A newly-allocated GtkVBox. */ GtkWidget * import_create_csv_preview_page ( GtkWidget * assistant ) { GtkWidget * vbox, * paddingbox, * tree_preview, * entry, * sw, * validity_label; GtkWidget * warn, * hbox, * combobox; int i = 0; vbox = gtk_vbox_new ( FALSE, 6 ); gtk_container_set_border_width ( GTK_CONTAINER(vbox), 12 ); paddingbox = new_paddingbox_with_title ( vbox, FALSE, _("Choose CSV separator") ); hbox = gtk_hbox_new ( FALSE, 12 ); gtk_box_pack_start ( GTK_BOX(paddingbox), hbox, FALSE, FALSE, 0 ); combobox = gtk_combo_box_new_text (); do { gchar * complete_name = g_strdup_printf ( "%s : \"%s\"", _(csv_separators [ i ] . name), ( csv_separators [ i ] . value ? csv_separators [ i ] . value : "" ) ); gtk_combo_box_append_text ( GTK_COMBO_BOX ( combobox ), complete_name ); g_free ( complete_name ); } while ( csv_separators [ i ++ ] . value ); gtk_box_pack_start ( GTK_BOX(hbox), combobox, TRUE, TRUE, 0 ); entry = gsb_automem_entry_new ( NULL, G_CALLBACK ( csv_import_change_separator ), assistant ); g_object_set_data ( G_OBJECT(entry), "assistant", assistant ); g_object_set_data ( G_OBJECT(entry), "combobox", combobox ); g_object_set_data ( G_OBJECT(assistant), "entry", entry ); gtk_box_pack_start ( GTK_BOX(hbox), entry, FALSE, FALSE, 0 ); g_signal_connect ( G_OBJECT ( combobox ), "changed", G_CALLBACK ( csv_import_combo_changed ), entry ); paddingbox = new_paddingbox_with_title ( vbox, TRUE, _("Select CSV fields") ); sw = gtk_scrolled_window_new (NULL, NULL); gtk_widget_set_size_request ( sw, 480, 120 ); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (sw), GTK_SHADOW_ETCHED_IN); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_box_pack_start ( GTK_BOX(paddingbox), sw, TRUE, TRUE, 6 ); tree_preview = gtk_tree_view_new (); g_object_set_data ( G_OBJECT(assistant), "tree_preview", tree_preview ); g_object_set_data ( G_OBJECT(tree_preview), "assistant", assistant ); gtk_container_add (GTK_CONTAINER (sw), tree_preview); hbox = gtk_hbox_new ( FALSE, 6 ); gtk_box_pack_start ( GTK_BOX(paddingbox), hbox, FALSE, FALSE, 0 ); warn = gtk_image_new_from_stock ( GTK_STOCK_DIALOG_WARNING, GTK_ICON_SIZE_BUTTON ); gtk_box_pack_start ( GTK_BOX(hbox), warn, FALSE, FALSE, 0 ); g_object_set_data ( G_OBJECT(assistant), "validity_icon", warn ); validity_label = gtk_label_new (NULL); gtk_misc_set_alignment ( GTK_MISC ( validity_label ), 0, 0.5); gtk_label_set_justify ( GTK_LABEL ( validity_label ), GTK_JUSTIFY_LEFT ); g_object_set_data ( G_OBJECT(assistant), "validity_label", validity_label ); gtk_box_pack_start ( GTK_BOX(hbox), validity_label, TRUE, TRUE, 0 ); return vbox; }
/** * Creates the "Titles & Addresses" tab. This tab is mainly composed * of text entries and editables. * * \returns A newly allocated vbox */ GtkWidget *onglet_display_addresses ( void ) { GtkWidget *hbox, *vbox_pref, *scrolled_window, *label; GtkWidget *paddingbox; GtkWidget *entry; GtkWidget *radio, *radiogroup; vbox_pref = new_vbox_with_title_and_icon ( _("Addresses & titles"), "addresses.png" ); /* Account file title */ paddingbox = new_paddingbox_with_title ( vbox_pref, FALSE, _("Titles") ); /* It first creates the entry of title */ entry = gsb_automem_entry_new ( &titre_fichier, ( GCallback ) update_homepage_title, NULL ); /* Choice of title type */ hbox = gtk_hbox_new ( FALSE, 6 ); gtk_box_pack_start ( GTK_BOX ( paddingbox ), hbox, FALSE, FALSE, 0); radiogroup = gtk_radio_button_new_with_label ( NULL, _("Accounts file title") ); g_object_set_data ( G_OBJECT ( radiogroup ), "display", GINT_TO_POINTER ( GSB_ACCOUNTS_TITLE ) ); if ( conf.display_grisbi_title == GSB_ACCOUNTS_TITLE ) gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON ( radiogroup ), TRUE ); g_signal_connect ( G_OBJECT ( radiogroup ), "toggled", G_CALLBACK ( change_grisbi_title_type ), entry ); gtk_box_pack_start ( GTK_BOX( hbox ), radiogroup, FALSE, FALSE, 0 ); radio = gtk_radio_button_new_with_label_from_widget ( GTK_RADIO_BUTTON ( radiogroup ), _("Account owner name") ); g_object_set_data ( G_OBJECT ( radio ), "display", GINT_TO_POINTER ( GSB_ACCOUNT_HOLDER ) ); if ( conf.display_grisbi_title == GSB_ACCOUNT_HOLDER ) gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON ( radio ), TRUE ); g_signal_connect ( G_OBJECT ( radio ), "toggled", G_CALLBACK ( change_grisbi_title_type ), entry ); gtk_box_pack_start ( GTK_BOX( hbox ), radio, FALSE, FALSE, 0 ); radio = gtk_radio_button_new_with_label_from_widget ( GTK_RADIO_BUTTON ( radiogroup ), _("Filename") ); g_object_set_data ( G_OBJECT ( radio ), "display", GINT_TO_POINTER ( GSB_ACCOUNTS_FILE ) ); if ( conf.display_grisbi_title == GSB_ACCOUNTS_FILE ) gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON ( radio ), TRUE ); g_signal_connect ( G_OBJECT ( radio ), "toggled", G_CALLBACK ( change_grisbi_title_type ), entry ); gtk_box_pack_start ( GTK_BOX( hbox ), radio, FALSE, FALSE, 0 ); hbox = gtk_hbox_new ( FALSE, 6 ); gtk_box_pack_start ( GTK_BOX ( paddingbox ), hbox, FALSE, FALSE, 0); label = gtk_label_new ( _("Accounts file title: ") ); gtk_box_pack_start ( GTK_BOX ( hbox ), label, FALSE, FALSE, 0); if ( conf.display_grisbi_title == GSB_ACCOUNTS_TITLE ) gtk_widget_set_sensitive ( entry, TRUE); else gtk_widget_set_sensitive ( entry, FALSE); gtk_box_pack_start ( GTK_BOX ( hbox ), entry, TRUE, TRUE, 0); /* Addresses */ paddingbox = new_paddingbox_with_title ( vbox_pref, FALSE, _("Addresses") ); /* Common address */ label = gtk_label_new ( _("Common address: ") ); gtk_misc_set_alignment (GTK_MISC (label), 0, 1); gtk_label_set_justify ( GTK_LABEL(label), GTK_JUSTIFY_RIGHT ); gtk_box_pack_start ( GTK_BOX ( paddingbox ), label, TRUE, TRUE, 0); scrolled_window = gtk_scrolled_window_new ( NULL, NULL ); gtk_scrolled_window_set_policy ( GTK_SCROLLED_WINDOW ( scrolled_window ), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC ); gtk_box_pack_start ( GTK_BOX ( paddingbox ), scrolled_window, FALSE, FALSE, 0); gtk_scrolled_window_set_shadow_type ( GTK_SCROLLED_WINDOW(scrolled_window), GTK_SHADOW_IN ); entry = gsb_automem_textview_new ( &adresse_commune, NULL, NULL ); gtk_container_add ( GTK_CONTAINER ( scrolled_window ), entry ); /* Secondary address */ /** \note This is not implemented yet */ label = gtk_label_new ( _("Secondary address: ") ); gtk_misc_set_alignment (GTK_MISC (label), 0, 1); gtk_label_set_justify ( GTK_LABEL(label), GTK_JUSTIFY_RIGHT ); gtk_box_pack_start ( GTK_BOX ( paddingbox ), label, TRUE, TRUE, 0); scrolled_window = gtk_scrolled_window_new ( NULL, NULL ); gtk_scrolled_window_set_policy ( GTK_SCROLLED_WINDOW ( scrolled_window ), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC ); gtk_scrolled_window_set_shadow_type ( GTK_SCROLLED_WINDOW(scrolled_window), GTK_SHADOW_IN ); gtk_box_pack_start ( GTK_BOX ( paddingbox ), scrolled_window, FALSE, FALSE, 0); entry = gsb_automem_textview_new ( &adresse_secondaire, NULL, NULL ); gtk_container_add ( GTK_CONTAINER ( scrolled_window ), entry ); if ( !gsb_data_account_get_accounts_amount () ) gtk_widget_set_sensitive ( vbox_pref, FALSE ); return ( vbox_pref ); }
/** * Show a dialog to set wether we want the rows/columns lines, * the background color, the titles... * * \param operation GtkPrintOperation responsible of this job. * \param null Not used. * * \return A newly allocated widget. */ GtkWidget * print_transactions_list_layout_config ( GtkPrintOperation * operation, gpointer null ) { GtkWidget *check_button; GtkWidget *label; GtkWidget *hbox; GtkWidget *entry; GtkWidget *font_button_transactions; GtkWidget *font_button_title; gchar *fontname_transactions; gchar *fontname_title; GtkWidget *init_date_entry; GtkWidget *final_date_entry; GtkWidget *vbox; GtkWidget *paddingbox; GtkSizeGroup * size_group; size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); vbox = gtk_vbox_new ( FALSE, 6 ); gtk_container_set_border_width ( GTK_CONTAINER(vbox), 12 ); paddingbox = new_paddingbox_with_title ( vbox, FALSE, _("Layout") ); /* set up the title and dates, this is never saved, so ask each time */ /* title line */ hbox = gtk_hbox_new (FALSE, 10); gtk_box_pack_start (GTK_BOX (paddingbox), hbox, FALSE, FALSE, 0); entry = gsb_automem_entry_new (&title_string, NULL, NULL); check_button = gsb_autofunc_checkbutton_new (_("Print a title: "), gsb_data_print_config_get_draw_title (), G_CALLBACK (sens_desensitive_pointeur), entry, G_CALLBACK (gsb_data_print_config_set_draw_title), 0); gtk_box_pack_start (GTK_BOX (hbox), check_button, FALSE, FALSE, 0); gtk_widget_set_sensitive (entry, gsb_data_print_config_get_draw_title ()); gtk_box_pack_start (GTK_BOX (hbox), entry, TRUE, TRUE, 0); /* add the dates interval */ hbox = gtk_hbox_new (FALSE, 10); check_button = gsb_autofunc_checkbutton_new (_("Select dates interval: "), gsb_data_print_config_get_draw_interval_dates (), G_CALLBACK (sens_desensitive_pointeur), hbox, G_CALLBACK (gsb_data_print_config_set_draw_interval_dates), 0); gtk_box_pack_start (GTK_BOX (paddingbox), check_button, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (paddingbox), hbox, FALSE, FALSE, 0); label = gtk_label_new (_("Initial date : ")); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); init_date_entry = gsb_calendar_entry_new (FALSE); if (draw_initial_date) gsb_calendar_entry_set_date (init_date_entry, draw_initial_date); gtk_box_pack_start (GTK_BOX (hbox), init_date_entry, FALSE, FALSE, 0); label = gtk_label_new (_("Final date : ")); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); final_date_entry = gsb_calendar_entry_new (FALSE); if (draw_final_date) gsb_calendar_entry_set_date (final_date_entry, draw_final_date); gtk_box_pack_start (GTK_BOX (hbox), final_date_entry, FALSE, FALSE, 0); g_object_set_data ( G_OBJECT ( operation ), "init_date_entry", init_date_entry ); g_object_set_data ( G_OBJECT ( operation ), "final_date_entry", final_date_entry ); check_button = gsb_autofunc_checkbutton_new (_("Use value date"), gsb_data_print_config_get_draw_dates_are_value_dates (), NULL, NULL, G_CALLBACK (gsb_data_print_config_set_draw_dates_are_value_dates), 0); gtk_box_pack_start (GTK_BOX (hbox), check_button, FALSE, FALSE, 0); if (!gsb_data_print_config_get_draw_interval_dates ()) gtk_widget_set_sensitive (hbox, FALSE); /* set up all the checkbuttons */ check_button = gsb_autofunc_checkbutton_new (_("Draw the lines between transactions"), gsb_data_print_config_get_draw_lines (), NULL, NULL, G_CALLBACK (gsb_data_print_config_set_draw_lines), 0); gtk_box_pack_start (GTK_BOX (paddingbox), check_button, FALSE, FALSE, 0); check_button = gsb_autofunc_checkbutton_new (_("Draw the lines between the columns"), gsb_data_print_config_get_draw_column (), NULL, NULL, G_CALLBACK (gsb_data_print_config_set_draw_column), 0); gtk_box_pack_start (GTK_BOX (paddingbox), check_button, FALSE, FALSE, 0); check_button = gsb_autofunc_checkbutton_new (_("Fill the background as the transactions list"), gsb_data_print_config_get_draw_background (), NULL, NULL, G_CALLBACK (gsb_data_print_config_set_draw_background), 0); gtk_box_pack_start (GTK_BOX (paddingbox), check_button, FALSE, FALSE, 0); check_button = gsb_autofunc_checkbutton_new (_("Print the archives lines"), gsb_data_print_config_get_draw_archives (), NULL, NULL, G_CALLBACK (gsb_data_print_config_set_draw_archives), 0); gtk_box_pack_start (GTK_BOX (paddingbox), check_button, FALSE, FALSE, 0); check_button = gsb_autofunc_checkbutton_new (_("Print the names of the columns"), gsb_data_print_config_get_draw_columns_name (), NULL, NULL, G_CALLBACK (gsb_data_print_config_set_draw_columns_name), 0); gtk_box_pack_start (GTK_BOX (paddingbox), check_button, FALSE, FALSE, 0); paddingbox = new_paddingbox_with_title ( vbox, FALSE, _("Fonts") ); /* set up the font of the transactions, * by default use the font of the lists */ hbox = gtk_hbox_new (FALSE, 12); gtk_box_pack_start (GTK_BOX (paddingbox), hbox, FALSE, FALSE, 0); label = gtk_label_new (_("Transactions font")); gtk_label_set_justify ( GTK_LABEL (label), GTK_JUSTIFY_LEFT ); gtk_misc_set_alignment ( GTK_MISC ( label ), 0, 0.5); gtk_size_group_add_widget ( size_group, label ); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); fontname_transactions = pango_font_description_to_string (gsb_data_print_config_get_font_transactions ()); font_button_transactions = gtk_font_button_new_with_font ( fontname_transactions ); gtk_font_button_set_use_font ( GTK_FONT_BUTTON(font_button_transactions), TRUE ); gtk_font_button_set_use_size ( GTK_FONT_BUTTON(font_button_transactions), TRUE ); gtk_font_button_set_title ( GTK_FONT_BUTTON(font_button_transactions), _("Choosing font") ); gtk_box_pack_start (GTK_BOX (hbox), font_button_transactions, TRUE, TRUE, 0); /* set up the font for the title */ hbox = gtk_hbox_new (FALSE, 12); gtk_box_pack_start (GTK_BOX (paddingbox), hbox, FALSE, FALSE, 0); label = gtk_label_new (_("Title font")); gtk_label_set_justify ( GTK_LABEL (label), GTK_JUSTIFY_LEFT ); gtk_misc_set_alignment ( GTK_MISC ( label ), 0, 0.5); gtk_size_group_add_widget ( size_group, label ); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); fontname_title = pango_font_description_to_string (gsb_data_print_config_get_font_title ()); font_button_title = gtk_font_button_new_with_font ( fontname_title ); gtk_font_button_set_use_font ( GTK_FONT_BUTTON(font_button_title), TRUE ); gtk_font_button_set_use_size ( GTK_FONT_BUTTON(font_button_title), TRUE ); gtk_font_button_set_title ( GTK_FONT_BUTTON(font_button_title), _("Choosing font") ); gtk_box_pack_start (GTK_BOX (hbox), font_button_title, TRUE, TRUE, 0); /* save what we have done in all cases, so if we cancel and come back, our values * come back */ gsb_data_print_config_set_font_transaction (pango_font_description_from_string (fontname_transactions)); gsb_data_print_config_set_font_title (pango_font_description_from_string (fontname_title)); draw_initial_date = gsb_calendar_entry_get_date (init_date_entry); draw_final_date = gsb_calendar_entry_get_date (final_date_entry); g_object_set_data ( G_OBJECT(operation), "font_transaction_button", font_button_transactions ); g_object_set_data ( G_OBJECT(operation), "font_title_button", font_button_title ); gtk_widget_show_all ( vbox ); return vbox; }
/** * create the page 3 of the first assistant * we create here the title of the file, name of the file and adress * * \param assistant the GtkWidget assistant * * \return a GtkWidget containing the page * */ static GtkWidget *gsb_assistant_file_page_2 ( GtkWidget *assistant ) { GtkWidget *page; GtkWidget *vbox; GtkWidget *label; GtkWidget *entry; GtkWidget *scrolled_window; GtkWidget *paddingbox; GtkWidget *textview; GtkWidget *button; GtkWidget *table; GtkWidget *filename_entry; page = gtk_hbox_new (FALSE, 15); gtk_container_set_border_width ( GTK_CONTAINER (page), 10 ); vbox = new_vbox_with_title_and_icon ( _("General configuration"), "payees.png" ); gtk_box_pack_start ( GTK_BOX (page), vbox, TRUE, TRUE, 0 ); /* table 2x3 for layout */ table = gtk_table_new ( 2, 3, FALSE ); gtk_table_set_row_spacings ( GTK_TABLE ( table ), 6 ); gtk_table_set_col_spacings ( GTK_TABLE ( table ), 6 ); /* Account file title */ paddingbox = new_paddingbox_with_title ( vbox, FALSE, _("Titles and filenames") ); gtk_box_pack_start ( GTK_BOX ( paddingbox ), table, FALSE, FALSE, 0); /* label account name */ label = gtk_label_new ( _("Accounts file title: ") ); gtk_misc_set_alignment (GTK_MISC (label), 0, 1); gtk_label_set_justify ( GTK_LABEL (label), GTK_JUSTIFY_LEFT ); gtk_table_attach ( GTK_TABLE ( table ), label, 0, 1, 0, 1, GTK_SHRINK | GTK_FILL, 0, 0, 0 ); /* need to declare filename_entry first for the next callback, * if no filename, set the title.gsb as default name */ if (!nom_fichier_comptes) nom_fichier_comptes = g_strconcat ( my_get_gsb_file_default_dir (), G_DIR_SEPARATOR_S, titre_fichier, ".gsb", NULL ); filename_entry = gsb_automem_entry_new (&nom_fichier_comptes, NULL, NULL); entry = gsb_automem_entry_new (&titre_fichier, ((GCallback)gsb_assistant_file_change_title), filename_entry); g_object_set_data ( G_OBJECT (entry), "last_title", my_strdup (titre_fichier)); gtk_table_attach ( GTK_TABLE ( table ), entry, 1, 3, 0, 1, GTK_EXPAND | GTK_FILL, 0, 0, 0 ); /* filename */ label = gtk_label_new ( _("Filename: ") ); gtk_misc_set_alignment (GTK_MISC (label), 0, 1); gtk_label_set_justify ( GTK_LABEL (label), GTK_JUSTIFY_LEFT ); gtk_table_attach ( GTK_TABLE ( table ), label, 0, 1, 1, 2, GTK_SHRINK | GTK_FILL, 0, 0, 0 ); gtk_table_attach ( GTK_TABLE ( table ), filename_entry, 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 0, 0 ); button = gtk_button_new_with_label ("..."); gtk_button_set_relief ( GTK_BUTTON (button), GTK_RELIEF_NONE ); g_signal_connect ( G_OBJECT (button), "clicked", G_CALLBACK (gsb_assistant_file_choose_filename), filename_entry ); gtk_table_attach ( GTK_TABLE ( table ), button, 2, 3, 1, 2, GTK_SHRINK | GTK_FILL, 0, 0, 0 ); /* will we crypt the file ? */ if ( gsb_plugin_find ( "openssl" ) ) { button = gsb_automem_checkbutton_new ( _("Encrypt Grisbi file"), &(etat.crypt_file), G_CALLBACK (gsb_gui_encryption_toggled), NULL); gtk_box_pack_start ( GTK_BOX ( paddingbox ), button, FALSE, FALSE, 0 ); if ( etat.crypt_file ) run.new_crypted_file = TRUE; } else { run.new_crypted_file = FALSE; } /* date format */ paddingbox = gsb_config_date_format_chosen ( vbox, GTK_ORIENTATION_HORIZONTAL ); /* decimal and thousands separator */ paddingbox = gsb_config_number_format_chosen ( vbox, GTK_ORIENTATION_HORIZONTAL ); /* Address */ paddingbox = new_paddingbox_with_title ( vbox, FALSE, _("Your address") ); /* Common address */ scrolled_window = gtk_scrolled_window_new ( NULL, NULL ); gtk_scrolled_window_set_policy ( GTK_SCROLLED_WINDOW ( scrolled_window ), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC ); gtk_box_pack_start ( GTK_BOX ( paddingbox ), scrolled_window, FALSE, FALSE, 0); gtk_scrolled_window_set_shadow_type ( GTK_SCROLLED_WINDOW(scrolled_window), GTK_SHADOW_IN ); textview = gsb_automem_textview_new ( &adresse_commune, NULL, NULL ); gtk_container_add ( GTK_CONTAINER ( scrolled_window ), textview ); gtk_widget_show_all (page); return page; }