/* ********************************************************************** */ gboolean change_choix_utilise_logo ( GtkWidget *check_button, GtkWidget *hbox ) { etat.utilise_logo = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( check_button )); gtk_widget_set_sensitive ( hbox, etat.utilise_logo ); if ( etat.utilise_logo ) { /* on recharge l'ancien logo */ if ( GTK_IS_WIDGET ( logo_accueil ) ) gtk_widget_hide ( logo_accueil ); else { GdkPixbuf *pixbuf = NULL; /* Update homepage logo */ pixbuf = gsb_select_icon_get_logo_pixbuf ( ); if ( pixbuf == NULL ) { pixbuf = gsb_select_icon_get_default_logo_pixbuf ( ); etat.is_pixmaps_dir = TRUE; } logo_accueil = gtk_image_new_from_pixbuf ( pixbuf ); if ( logo_accueil ) { gtk_box_pack_start ( GTK_BOX ( hbox_title ), logo_accueil, FALSE, FALSE, 0 ); gtk_widget_set_size_request ( hbox_title, -1, -1 ); gtk_widget_show ( logo_accueil ); } } } else { gtk_widget_destroy ( logo_accueil ); gtk_widget_set_size_request ( hbox_title, -1, -1 ); if ( etat.name_logo && strlen ( etat.name_logo ) ) g_free ( etat.name_logo ); etat.name_logo = NULL; etat.is_pixmaps_dir = 0; } gsb_file_set_modified ( TRUE ); return ( FALSE ); }
/* **************************************************************************************************************************** */ void change_logo_accueil ( GtkWidget * file_selector ) { GdkPixbuf * pixbuf; const gchar *selected_filename; selected_filename = file_selection_get_filename ( GTK_FILE_CHOOSER ( file_selector ) ); if ( gsb_data_account_get_accounts_amount () ) { /* on change le logo */ gchar * chemin_logo; gtk_container_remove ( GTK_CONTAINER ( logo_button ), preview ); chemin_logo = g_strstrip ( g_strdup ( selected_filename ) ); if ( !strlen ( chemin_logo ) ) { if ( logo_accueil && GTK_IS_WIDGET ( logo_accueil ) ) gtk_widget_hide ( logo_accueil ); preview = gtk_image_new_from_stock ( GTK_STOCK_MISSING_IMAGE, GTK_ICON_SIZE_BUTTON ); } else { /* Update preview */ pixbuf = gdk_pixbuf_new_from_file ( chemin_logo, NULL ); if (!pixbuf) { if ( logo_accueil && GTK_IS_WIDGET ( logo_accueil )) gtk_widget_hide ( logo_accueil ); preview = gtk_image_new_from_stock ( GTK_STOCK_MISSING_IMAGE, GTK_ICON_SIZE_BUTTON ); } else { if ( g_strcmp0 ( g_path_get_dirname ( chemin_logo ), gsb_dirs_get_pixmaps_dir ( ) ) == 0 ) { gchar *name_logo; etat.is_pixmaps_dir = TRUE; name_logo = g_path_get_basename ( chemin_logo ); if ( g_strcmp0 ( name_logo, "grisbi-logo.png" ) != 0 ) etat.name_logo = name_logo; else etat.name_logo = NULL; } else { etat.is_pixmaps_dir = FALSE; if ( etat.name_logo && strlen ( etat.name_logo ) ) g_free ( etat.name_logo ); etat.name_logo = NULL; } gsb_select_icon_set_logo_pixbuf ( pixbuf ); preview = gtk_image_new_from_pixbuf ( gdk_pixbuf_scale_simple ( pixbuf, 48, 48, GDK_INTERP_BILINEAR ) ); /* Update homepage logo */ gtk_widget_destroy ( logo_accueil ); logo_accueil = gtk_image_new_from_pixbuf ( gsb_select_icon_get_logo_pixbuf ( ) ); gtk_box_pack_start ( GTK_BOX ( hbox_title ), logo_accueil, FALSE, FALSE, 0 ); gtk_widget_show ( logo_accueil ); /* modify the icon of grisbi (set in the panel of gnome or other) */ gtk_window_set_default_icon ( gsb_select_icon_get_logo_pixbuf ( ) ); } g_free ( chemin_logo ); } gtk_widget_show ( preview ); gtk_container_add ( GTK_CONTAINER ( logo_button ), preview ); /* Mark file as modified */ gsb_file_set_modified ( TRUE ); } }
/** * Creates the "Fonts & logo" tab. This function creates some buttons * that are borrowed from applications like gedit. * * \returns A newly allocated vbox */ GtkWidget * onglet_display_fonts ( void ) { GtkWidget *hbox, *vbox_pref, *label, *paddingbox, *font_button; GtkWidget *check_button, *vbox; GdkPixbuf * pixbuf = NULL; GtkWidget *button; GtkWidget *color_combobox; GtkWidget *color_button; vbox_pref = new_vbox_with_title_and_icon ( _("Fonts & logo"), "fonts.png" ); /* Change Grisbi Logo */ paddingbox = new_paddingbox_with_title ( vbox_pref, FALSE, _("Grisbi logo") ); hbox = gtk_hbox_new ( FALSE, 5 ); gtk_box_pack_start ( GTK_BOX ( paddingbox ), hbox, FALSE, FALSE, 0 ); check_button = gtk_check_button_new_with_label ( _("Display a logo")); gtk_box_pack_start ( GTK_BOX ( hbox ), check_button, FALSE, FALSE, 0 ); gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON ( check_button ), etat.utilise_logo ); hbox = gtk_hbox_new ( FALSE, 5 ); gtk_box_pack_start ( GTK_BOX ( paddingbox ), hbox, FALSE, FALSE, 0 ); /* le logo est grisé ou non suivant qu'on l'utilise ou pas */ gtk_widget_set_sensitive ( hbox, etat.utilise_logo ); g_signal_connect ( G_OBJECT ( check_button ), "toggled", G_CALLBACK ( change_choix_utilise_logo ), hbox ); logo_button = gtk_button_new (); gtk_button_set_relief ( GTK_BUTTON ( logo_button ), GTK_RELIEF_NONE ); pixbuf = gsb_select_icon_get_logo_pixbuf ( ); if (!pixbuf) { preview = gtk_image_new_from_pixbuf ( gsb_select_icon_get_default_logo_pixbuf ( ) ); } else { if ( gdk_pixbuf_get_width(pixbuf) > 64 || gdk_pixbuf_get_height(pixbuf) > 64 ) { GdkPixbuf * tmp; tmp = gdk_pixbuf_new ( GDK_COLORSPACE_RGB, TRUE, 8, gdk_pixbuf_get_width(pixbuf)/2, gdk_pixbuf_get_height(pixbuf)/2 ); gdk_pixbuf_scale ( pixbuf, tmp, 0, 0, gdk_pixbuf_get_width(pixbuf)/2, gdk_pixbuf_get_height(pixbuf)/2, 0, 0, 0.5, 0.5, GDK_INTERP_HYPER ); pixbuf = tmp; } preview = gtk_image_new_from_pixbuf (pixbuf); } gtk_container_add (GTK_CONTAINER(logo_button), preview); g_signal_connect_swapped ( G_OBJECT ( logo_button ), "clicked", G_CALLBACK ( modification_logo_accueil ), NULL ); gtk_box_pack_start ( GTK_BOX ( hbox ), logo_button, FALSE, FALSE, 0 ); label = gtk_label_new ( _("Click on preview to change logo") ); gtk_box_pack_start ( GTK_BOX ( hbox ), label, FALSE, FALSE, 0 ); /* Change fonts */ paddingbox = new_paddingbox_with_title ( vbox_pref, FALSE, _("Fonts") ); hbox = gtk_hbox_new ( FALSE, 10 ); gtk_box_pack_start ( GTK_BOX ( paddingbox ), hbox, FALSE, FALSE, 0 ); check_button = gtk_check_button_new_with_label ( _("Use a custom font for the transactions: ")); gtk_box_pack_start ( GTK_BOX ( hbox ), check_button, FALSE, FALSE, 0 ); gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON ( check_button ), conf.utilise_fonte_listes ); /* on crée la vbox qui contiendra la font button et le raz */ vbox = gtk_vbox_new ( FALSE, 10 ); gtk_box_pack_start ( GTK_BOX ( hbox ), vbox, FALSE, FALSE, 0 ); gtk_widget_set_sensitive ( vbox, conf.utilise_fonte_listes ); g_signal_connect ( G_OBJECT ( check_button ), "toggled", G_CALLBACK ( change_choix_utilise_fonte_liste ), vbox ); /* Create font button */ font_button = utils_font_create_button ( &conf.font_string, G_CALLBACK (update_fonte_listes), NULL); gtk_box_pack_start ( GTK_BOX (vbox), font_button, FALSE, FALSE, 0 ); if ( !gsb_data_account_get_accounts_amount () ) { gtk_widget_set_sensitive ( vbox_pref, FALSE ); } /* change colors */ paddingbox = new_paddingbox_with_title ( vbox_pref, FALSE, _("Colors") ); vbox = gtk_vbox_new ( FALSE, 10 ); gtk_box_pack_start ( GTK_BOX ( paddingbox ), vbox, FALSE, FALSE, 10 ); hbox = gtk_hbox_new ( FALSE, 10 ); gtk_box_pack_start ( GTK_BOX ( vbox ), hbox, FALSE, FALSE, 10 ); color_combobox = gsb_color_create_color_combobox ( ); gtk_box_pack_start ( GTK_BOX (hbox), color_combobox, FALSE, FALSE, 0); color_button = gtk_color_button_new (); gtk_color_button_set_title ( GTK_COLOR_BUTTON(color_button), _("Choosing color") ); g_signal_connect ( G_OBJECT (color_button), "color-set", G_CALLBACK (preferences_view_color_changed), G_OBJECT (color_combobox)); gtk_box_pack_start ( GTK_BOX (hbox), color_button, FALSE, FALSE, 0); /* connect the color button to the combobox if changed */ g_signal_connect ( G_OBJECT (color_combobox), "changed", G_CALLBACK (preferences_view_color_combobox_changed), G_OBJECT (color_button)); button = gtk_button_new_with_label (_("Back to default")); g_signal_connect ( G_OBJECT (button), "clicked", G_CALLBACK (preferences_view_color_default), G_OBJECT (color_combobox)); gtk_box_pack_start ( GTK_BOX (vbox), button, FALSE, FALSE, 0); gtk_combo_box_set_active ( GTK_COMBO_BOX (color_combobox), 0); return vbox_pref; }
/** * Create and run an About dialog. * * \param bouton Widget that triggered this handler (not used). * \param data Not used. */ void a_propos ( GtkWidget *bouton, gint data ) { GtkWidget *about; GdkPixbuf *logo; gchar *chemin_logo ; #define CSUFFIX "\n" const gchar *auteurs[] = { _("Programming"), "Benjamin Drieu <*****@*****.**>", "Cedric Auger <*****@*****.**>", "Francois Terrot <*****@*****.**>", "Pierre Biava <*****@*****.**>", "Mickaël Remars <*****@*****.**>", "William Ollivier <*****@*****.**>", "Rémi Cardona <*****@*****.**>", "Ludovic Rousseau <*****@*****.**>" "\n", _("Packaging"), "Alain Pichon <*****@*****.**>", "Baluchiterium <*****@*****.**>", "Francois Terrot <*****@*****.**>", "Gerald Niel <*****@*****.**>", "Gilles Morel <*****@*****.**>", "PMF <*****@*****.**>", "Pascal Bleser <*****@*****.**>", "Sylvain Glaize <*****@*****.**>", "Thierry Thomas <*****@*****.**>", "Vincent Marqueton <*****@*****.**>", "William Ollivier <*****@*****.**>", "Frederic Trouche <*****@*****.**>", "\n", _("Other"), "Axel Rousseau <*****@*****.**>", "Dominique Parisot <*****@*****.**>", "Gerald Niel <*****@*****.**>", CSUFFIX, NULL }; gchar * translators = g_strconcat( "Alain Portal <*****@*****.**>: ", _("English"), CSUFFIX, "Benjamin Drieu <*****@*****.**>: ", _("English"), CSUFFIX, "Carlos M. Cámara Mora <*****@*****.**>: ", _("Spanish"), CSUFFIX, "Daniel Cartron <*****@*****.**>: ", _("English"), CSUFFIX, "Edwin Huijsing <*****@*****.**>: ", _("Dutch"), CSUFFIX, "Fabio Erculiani <*****@*****.**>: ", _("Italian"), CSUFFIX, "Flavio Henrique Somensi <*****@*****.**>: ", _("Brazilian Portuguese"), CSUFFIX, "Giorgio Mandolfo <*****@*****.**>: ", _("Italian"), CSUFFIX, "Martin Stromberger <*****@*****.**>: ", _("German"), CSUFFIX, "Ryszard Jeziorski <rjeziorski@eagleW>: ", _("Polish"), CSUFFIX, "Achilleas Kaskamanidis <*****@*****.**>: ", _("Greek"), CSUFFIX, NULL); const gchar *documenters [] = { "Alain Portal <*****@*****.**>", "Benjamin Drieu <*****@*****.**>", "Daniel Cartron <*****@*****.**>", "Jean-Luc Duflot <*****@*****.**>", "Loic Breilloux <*****@*****.**>", CSUFFIX, NULL}; const gchar *artists [] = { "Andre Pascual <*****@*****.**>", "Jakub 'jimmac' Steiner <*****@*****.**>", "Jean-Baptiste Renard <*****@*****.**>", "Tuomas 'tigert' Kuosmanen <*****@*****.**>", NULL}; const gchar *license = "This program is free software; you can redistribute " "it and/or modify it under the terms of the GNU General " "Public License as published by the Free Software Foundation; " "either version 2 of the License, or (at your option) any later " "version.\n\nThis program is distributed in the hope that it " "will be useful, but WITHOUT ANY WARRANTY; without even the " "implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR " "PURPOSE. See the GNU General Public License for more details.\n\n" "You should have received a copy of the GNU General Public License " "along with this program; if not, write to the Free Software " "Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n\n" "This product includes software developed by the OpenSSL Project " "for use in the OpenSSL Toolkit.\n(http://www.openssl.org/)"; /* Others info */ gchar *comments; gchar *extra; gchar *version_to_string; extra = extra_support ( ); version_to_string = get_gtk_run_version ( ); #ifdef DEBUG { gchar *compiled_time; compiled_time = gsb_date_get_compiled_time ( ); comments = g_strconcat ( _("Personal finance manager for everyone\n"), extra, "Version de GTK : ", version_to_string, "\n", _("This instance of Grisbi was compiled on\n"), compiled_time, " ", _("at"), " ", __TIME__, NULL ); g_free ( compiled_time ); } #else comments = g_strconcat ( _("Personal finance manager for everyone\n"), extra, "Version de GTK : ", version_to_string, NULL ); #endif /* Logo */ logo = gsb_select_icon_get_logo_pixbuf ( ); if (logo == NULL ) { chemin_logo = my_strdup ( LOGO_PATH ); logo = gdk_pixbuf_new_from_file ( chemin_logo, NULL ); g_free ( chemin_logo ); } about = gtk_about_dialog_new ( ); gtk_about_dialog_set_program_name ( GTK_ABOUT_DIALOG (about), "Grisbi" ); gtk_about_dialog_set_logo ( GTK_ABOUT_DIALOG (about), logo ); gtk_about_dialog_set_comments ( GTK_ABOUT_DIALOG (about), comments ); gtk_about_dialog_set_website ( GTK_ABOUT_DIALOG (about), "http://www.grisbi.org/"); gtk_about_dialog_set_license ( GTK_ABOUT_DIALOG (about), license ); gtk_about_dialog_set_wrap_license ( GTK_ABOUT_DIALOG (about), TRUE ); gtk_about_dialog_set_version ( GTK_ABOUT_DIALOG (about), VERSION ); gtk_about_dialog_set_artists ( GTK_ABOUT_DIALOG (about), artists ); gtk_about_dialog_set_documenters ( GTK_ABOUT_DIALOG (about), documenters ); gtk_about_dialog_set_authors ( GTK_ABOUT_DIALOG (about), auteurs ); gtk_about_dialog_set_translator_credits ( GTK_ABOUT_DIALOG (about), translators ); gtk_window_set_position ( GTK_WINDOW ( about ), GTK_WIN_POS_CENTER_ON_PARENT ); gtk_window_set_resizable ( GTK_WINDOW ( about ), TRUE ); gtk_window_set_modal ( GTK_WINDOW ( about ), TRUE ); gtk_window_set_transient_for ( GTK_WINDOW ( about ), GTK_WINDOW ( grisbi_app_get_active_window (NULL) ) ); g_free ( extra ); g_free ( version_to_string ); g_free ( comments ); g_signal_connect ( G_OBJECT ( about ), "activate-link", G_CALLBACK ( url_clicked ), NULL ); gtk_dialog_run ( GTK_DIALOG (about)) ; gtk_widget_destroy (about); if (logo) g_object_unref (logo); return; }