/** * creates a box for selecting a character sets * * \param assistant GsbAssistant * \param content of file * \param charmap_imported * * \return A charmap. */ gchar *utils_files_create_sel_charset ( GtkWidget *assistant, const gchar *tmp_str, const gchar *charmap_imported, gchar *filename ) { GtkWidget *dialog, *vbox, *sw, *tree_view; GtkWidget *hbox, *warn, *label; GtkTreeViewColumn *column; GtkCellRenderer *renderer; GtkTreeModel *model; GSList *list; GtkTreeIter iter; gchar* tmpstr; GtkWidget *go_charmap_sel; gint result; dialog = gtk_dialog_new_with_buttons ( _("Select a charmap"), GTK_WINDOW ( assistant ), GTK_DIALOG_MODAL, GTK_STOCK_CANCEL, 0, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL ); gtk_window_set_position ( GTK_WINDOW ( dialog ), GTK_WIN_POS_CENTER_ON_PARENT ); gtk_widget_set_size_request ( dialog, 600, -1 ); gtk_dialog_set_response_sensitive ( GTK_DIALOG ( dialog ), GTK_RESPONSE_OK, FALSE ); vbox = gtk_vbox_new ( FALSE, 6 ); gtk_container_set_border_width ( GTK_CONTAINER(vbox), 12 ); gtk_container_add ( GTK_CONTAINER ( GTK_DIALOG ( dialog ) -> vbox ), vbox ); /* Warning label */ hbox = gtk_hbox_new ( FALSE, 6 ); gtk_box_pack_start ( GTK_BOX ( vbox ), 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 ); label = gtk_label_new ( NULL ); tmpstr = g_strdup_printf ( _("You are here because your file" " can't be imported directly into grisbi.\n%s"), filename ); gtk_label_set_markup ( GTK_LABEL ( label ), make_pango_attribut ( "weight=\"bold\"",tmpstr ) ); gtk_misc_set_alignment ( GTK_MISC ( label ), 0, 0.5); gtk_label_set_justify ( GTK_LABEL ( label ), GTK_JUSTIFY_LEFT ); gtk_box_pack_start ( GTK_BOX ( hbox ), label, TRUE, TRUE, 0 ); g_free ( tmpstr ); /*scrolled windows */ sw = gtk_scrolled_window_new (NULL, NULL); gtk_widget_set_size_request ( sw, 480, 150 ); 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 ( vbox ), sw, TRUE, TRUE, 6 ); /* Tree view and model. */ model = GTK_TREE_MODEL ( gtk_list_store_new ( IMPORT_CHARMAP_NB, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING ) ); tree_view = gtk_tree_view_new_with_model ( model ); gtk_container_add ( GTK_CONTAINER ( sw ), tree_view ); g_object_set_data ( G_OBJECT ( model ), "dialog", dialog ); g_object_set_data ( G_OBJECT ( dialog ), "charset_model", model ); g_object_set_data ( G_OBJECT ( dialog ), "charset_tree_view", tree_view ); /* Toggle column. */ renderer = gtk_cell_renderer_toggle_new ( ); g_signal_connect ( renderer, "toggled", G_CALLBACK (utils_files_charmap_active_toggled), model ); column = gtk_tree_view_column_new_with_attributes ( _("Import"), renderer, "active", IMPORT_CHARMAP_SELECTED, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW ( tree_view ), column ); /* Codage column. */ renderer = gtk_cell_renderer_text_new ( ); column = gtk_tree_view_column_new_with_attributes ( _("Encoding"), renderer, "text", IMPORT_CHARMAP_ENCODING, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW ( tree_view ), column ); /* Result column. */ renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ( _("Result"), renderer, "text", IMPORT_CHARMAP_RESULT, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW ( tree_view ), column ); /* select an other encoding */ label = gtk_label_new ( _("If no proposals above are correct you can choose a " "different charset") ); gtk_misc_set_alignment ( GTK_MISC ( label ), 0, 0.5); gtk_label_set_justify ( GTK_LABEL ( label ), GTK_JUSTIFY_LEFT ); gtk_box_pack_start ( GTK_BOX ( vbox ), label, TRUE, TRUE, 0 ); hbox = gtk_hbox_new ( FALSE, 6 ); gtk_box_pack_start ( GTK_BOX ( vbox ), hbox, FALSE, FALSE, 0 ); go_charmap_sel = go_charmap_sel_new (GO_CHARMAP_SEL_TO_UTF8); g_signal_connect ( go_charmap_sel, "charmap_changed", G_CALLBACK (utils_files_go_charmap_sel_changed), dialog ); g_object_set_data ( G_OBJECT ( dialog ), "charset_cs", go_charmap_sel ); gtk_box_pack_start ( GTK_BOX ( hbox ), go_charmap_sel, FALSE, FALSE, 0 ); label = gtk_label_new ( _("Select a charset") ); gtk_misc_set_alignment ( GTK_MISC ( label ), 0, 0.5); gtk_label_set_justify ( GTK_LABEL ( label ), GTK_JUSTIFY_LEFT ); gtk_box_pack_start ( GTK_BOX ( hbox ), label, TRUE, TRUE, 0 ); g_object_set_data ( G_OBJECT ( dialog ), "charset_label", label ); /* on remplit le model */ list = utils_files_check_UTF8_validity (tmp_str, charmap_imported ); if ( list ) { GSList *tmp_list; struct struc_check_encoding *result; tmp_list = list; result = tmp_list -> data; g_object_set_data_full ( G_OBJECT ( dialog ), "charset_str", g_strdup ( result -> result ), g_free ); tmp_list = tmp_list -> next; while ( tmp_list ) { struct struc_check_encoding *result; result = tmp_list -> data; gtk_list_store_append ( GTK_LIST_STORE ( model ), &iter ); gtk_list_store_set ( GTK_LIST_STORE ( model ), &iter, IMPORT_CHARMAP_ENCODING, result -> charset, IMPORT_CHARMAP_RESULT, result -> result, -1); tmp_list = tmp_list -> next; } } gtk_widget_show_all ( dialog ); result = gtk_dialog_run ( GTK_DIALOG ( dialog )); if ( result == GTK_RESPONSE_OK ) { gchar *charset; charset = g_strdup ( g_object_get_data ( G_OBJECT ( dialog ), "charset") ); gtk_widget_destroy ( GTK_WIDGET ( dialog ) ); return charset; } else { gtk_widget_destroy ( GTK_WIDGET ( dialog ) ); return g_strdup ( "UTF8" ); } }
/** * Display a tip. * * \param force Forcefully display the tip even if show_tip option * has been disabled. */ void display_tip ( gboolean force ) { GtkWidget * checkbox; GtkWidget * dialog = NULL; GtkWidget *btn_back, *btn_forward, *btn_close; gchar *tmpstr; if ( !force && !conf.show_tip ) return; conf.last_tip = CLAMP ( conf.last_tip+1, 0, sizeof(tips)/sizeof(gpointer)-1); dialog = dialogue_special_no_run ( GTK_MESSAGE_INFO, GTK_BUTTONS_NONE, make_hint ( _("Did you know that..."), /* We use the Grisbi-tips catalog */ g_dgettext(NULL, tips[conf.last_tip]) ) ); gtk_window_set_modal ( GTK_WINDOW ( dialog ), FALSE ); checkbox = gsb_automem_checkbutton_new ( _("Display tips at next start"), &(conf.show_tip), NULL, NULL ); gtk_box_pack_start ( GTK_BOX ( GTK_DIALOG(dialog) -> vbox ), checkbox, FALSE, FALSE, 6 ); gtk_widget_show ( checkbox ); btn_back = gtk_dialog_add_button (GTK_DIALOG(dialog), GTK_STOCK_GO_BACK, 1); btn_forward = gtk_dialog_add_button (GTK_DIALOG(dialog), GTK_STOCK_GO_FORWARD, 2); btn_close = gtk_dialog_add_button (GTK_DIALOG(dialog), GTK_STOCK_CLOSE, 3); /* gtk_widget_set_size_request ( dialog, 450, -1 ); */ /* We iterate as user can select several tips. */ while ( TRUE ) { if ( conf.last_tip == sizeof(tips)/sizeof(gpointer)-1) gtk_widget_set_sensitive (btn_forward, FALSE); if ( conf.last_tip == 0) gtk_widget_set_sensitive (btn_back, FALSE); switch ( gtk_dialog_run ( GTK_DIALOG(dialog) ) ) { case 1: if ( conf.last_tip > 0 ) conf.last_tip--; gtk_widget_set_sensitive (btn_forward, TRUE); tmpstr = g_strconcat ( make_pango_attribut ( "size=\"larger\" weight=\"bold\"", _("Did you know that...") ), "\n\n", g_dgettext (NULL, tips[conf.last_tip] ), NULL ); gtk_label_set_markup ( GTK_LABEL ( GTK_MESSAGE_DIALOG(dialog) -> label ), tmpstr ); g_free ( tmpstr ); break; case 2: if ( conf.last_tip < sizeof(tips)/sizeof(gpointer)-1) conf.last_tip++; tmpstr = g_strconcat ( make_pango_attribut ( "size=\"larger\" weight=\"bold\"", _("Did you know that...") ), "\n\n", g_dgettext (NULL, tips[conf.last_tip] ), NULL ); gtk_label_set_markup ( GTK_LABEL ( GTK_MESSAGE_DIALOG(dialog) -> label ), tmpstr ); g_free ( tmpstr ); gtk_widget_set_sensitive (btn_back, TRUE); break; default: gtk_widget_destroy ( dialog ); return; } } }