rem: */
context: void ajout_etat ( void ){  struct struct_etat *etat;  struct struct_comparaison_montants_etat *comp_montant;  GtkWidget *dialog;  gint resultat;  GtkWidget *label;  GtkWidget *frame;  GtkWidget *option_menu;  GtkWidget *menu;  GtkWidget *menu_item;  GtkWidget *label_description;  GtkWidget *scrolled_window;  dialog = gnome_dialog_new ( _("Create a report"),			      GNOME_STOCK_BUTTON_OK,			      GNOME_STOCK_BUTTON_CANCEL,			      NULL );  gtk_window_set_transient_for ( GTK_WINDOW ( dialog ),				 GTK_WINDOW ( window ));  gtk_widget_set_usize ( dialog,			 400,			 250 );  gtk_window_set_policy ( GTK_WINDOW ( dialog ),			  FALSE,			  FALSE,			  FALSE );  label = gtk_label_new ( _("Select report type:"));  gtk_misc_set_alignment ( GTK_MISC ( label ),			   0,			   0.5 );  gtk_box_pack_start ( GTK_BOX ( GNOME_DIALOG ( dialog ) -> vbox ),		       label,		       FALSE,		       FALSE,		       0 );  gtk_widget_show ( label );  /* on commence par crer l'option menu */  option_menu = gtk_option_menu_new ();  gtk_box_pack_start ( GTK_BOX ( GNOME_DIALOG ( dialog ) -> vbox ),		       option_menu,		       FALSE,		       FALSE,		       0 );  gtk_widget_show ( option_menu );  /* on ajoute maintenant la frame */  frame = gtk_frame_new ( _("Description:"));  gtk_box_pack_start ( GTK_BOX ( GNOME_DIALOG ( dialog ) -> vbox ),		       frame,		       TRUE,		       TRUE,		       0 );  gtk_widget_show ( frame );  /* on met le label dans une scrolled window */  scrolled_window = gtk_scrolled_window_new ( FALSE,					      FALSE );  gtk_scrolled_window_set_policy ( GTK_SCROLLED_WINDOW ( scrolled_window ),				   GTK_POLICY_AUTOMATIC,				   GTK_POLICY_AUTOMATIC );  gtk_container_add ( GTK_CONTAINER ( frame ),		      scrolled_window );  gtk_widget_show ( scrolled_window );  /* on ajoute maintenant le label */  label_description = gtk_label_new ( "" );  gtk_label_set_line_wrap ( GTK_LABEL ( label_description ),			    TRUE );  gtk_scrolled_window_add_with_viewport ( GTK_SCROLLED_WINDOW ( scrolled_window ),					  label_description );  gtk_widget_show ( label_description );  gtk_viewport_set_shadow_type ( GTK_VIEWPORT ( label_description -> parent ),				 GTK_SHADOW_NONE );  /* on cre ici le menu qu'on ajoute  l'option menu */  menu = gtk_menu_new ();  menu_item = gtk_menu_item_new_with_label ( _("Last month incomes and outgoings"));  gtk_menu_append ( GTK_MENU ( menu ),		    menu_item );  gtk_object_set_data ( GTK_OBJECT ( menu_item ),			"no_etat",			GINT_TO_POINTER ( 0 ));  gtk_signal_connect ( GTK_OBJECT ( menu_item ),			      "activate",			      GTK_SIGNAL_FUNC ( change_choix_nouvel_etat ),			      GTK_OBJECT ( label_description ));  gtk_widget_show ( menu_item );  /* on met le texte du 1er choix */  change_choix_nouvel_etat ( menu_item,			     label_description );  menu_item = gtk_menu_item_new_with_label ( _("Current month incomes and outgoings"));  gtk_menu_append ( GTK_MENU ( menu ),		    menu_item );  gtk_object_set_data ( GTK_OBJECT ( menu_item ),			"no_etat",			GINT_TO_POINTER ( 1 ));  gtk_signal_connect ( GTK_OBJECT ( menu_item ),		       "activate",		       GTK_SIGNAL_FUNC ( change_choix_nouvel_etat ),		       GTK_OBJECT ( label_description ));  gtk_widget_show ( menu_item );  menu_item = gtk_menu_item_new_with_label ( _("Annual budget"));  gtk_menu_append ( GTK_MENU ( menu ),		    menu_item );  gtk_object_set_data ( GTK_OBJECT ( menu_item ),			"no_etat",			GINT_TO_POINTER ( 2 ));  gtk_signal_connect ( GTK_OBJECT ( menu_item ),			      "activate",			      GTK_SIGNAL_FUNC ( change_choix_nouvel_etat ),			      GTK_OBJECT ( label_description ));  gtk_widget_show ( menu_item );  menu_item = gtk_menu_item_new_with_label ( _("Cheques deposit"));  gtk_menu_append ( GTK_MENU ( menu ),		    menu_item );  gtk_object_set_data ( GTK_OBJECT ( menu_item ),			"no_etat",			GINT_TO_POINTER ( 4 ));  gtk_signal_connect ( GTK_OBJECT ( menu_item ),			      "activate",			      GTK_SIGNAL_FUNC ( change_choix_nouvel_etat ),			      GTK_OBJECT ( label_description ));  gtk_widget_show ( menu_item );  menu_item = gtk_menu_item_new_with_label ( _("Monthly outgoings by third party"));  gtk_menu_append ( GTK_MENU ( menu ),		    menu_item );  gtk_object_set_data ( GTK_OBJECT ( menu_item ),			"no_etat",			GINT_TO_POINTER ( 5 ));  gtk_signal_connect ( GTK_OBJECT ( menu_item ),			      "activate",			      GTK_SIGNAL_FUNC ( change_choix_nouvel_etat ),			      GTK_OBJECT ( label_description ));  gtk_widget_show ( menu_item );  menu_item = gtk_menu_item_new_with_label ( _("Search"));  gtk_menu_append ( GTK_MENU ( menu ),		    menu_item );  gtk_object_set_data ( GTK_OBJECT ( menu_item ),			"no_etat",			GINT_TO_POINTER ( 6 ));  gtk_signal_connect ( GTK_OBJECT ( menu_item ),			      "activate",			      GTK_SIGNAL_FUNC ( change_choix_nouvel_etat ),			      GTK_OBJECT ( label_description ));  gtk_widget_show ( menu_item );  menu_item = gtk_menu_item_new_with_label ( _("Blank report"));  gtk_menu_append ( GTK_MENU ( menu ),		    menu_item );  gtk_object_set_data ( GTK_OBJECT ( menu_item ),			"no_etat",			GINT_TO_POINTER ( 3 ));  gtk_signal_connect ( GTK_OBJECT ( menu_item ),			      "activate",			      GTK_SIGNAL_FUNC ( change_choix_nouvel_etat ),			      GTK_OBJECT ( label_description ));  gtk_widget_show ( menu_item );  gtk_option_menu_set_menu ( GTK_OPTION_MENU ( option_menu ),			     menu );  gtk_widget_show ( menu );  /* on attend le choix de l'utilisateur */  resultat = gnome_dialog_run ( GNOME_DIALOG ( dialog ));  if ( resultat )    {      if ( GNOME_IS_DIALOG ( dialog ))	gnome_dialog_close ( GNOME_DIALOG ( dialog ));      return;    }  /* on rcupre le type d'tat voulu */  resultat = GPOINTER_TO_INT ( gtk_object_get_data ( GTK_OBJECT ( GTK_OPTION_MENU ( option_menu ) -> menu_item ),						     "no_etat" ));  gnome_dialog_close ( GNOME_DIALOG ( dialog ));  /* on cre le nouvel tat */  etat = calloc ( 1,		  sizeof ( struct struct_etat ));  etat -> no_etat = ++no_dernier_etat;  /* on remplit maintenant l'tat en fonction de ce qu'on a demand */  switch ( resultat )    {    case 0:      /*  revenus et dpenses du mois prcdent  */      etat -> nom_etat = g_strdup ( _("Previous month incomes and outgoings") );      etat -> separer_revenus_depenses = 1;      etat -> no_plage_date = 7;      /*   le classement de base est 1-2-3-4-5-6 (cf structure.h) */      etat -> type_classement = g_list_append ( etat -> type_classement,						GINT_TO_POINTER ( 1 ));      etat -> type_classement = g_list_append ( etat -> type_classement,						GINT_TO_POINTER ( 2 ));      etat -> type_classement = g_list_append ( etat -> type_classement,						GINT_TO_POINTER ( 3 ));      etat -> type_classement = g_list_append ( etat -> type_classement,						GINT_TO_POINTER ( 4 ));      etat -> type_classement = g_list_append ( etat -> type_classement,						GINT_TO_POINTER ( 5 ));      etat -> type_classement = g_list_append ( etat -> type_classement,						GINT_TO_POINTER ( 6 ));      etat -> type_virement = 2;      etat -> utilise_categ = 1;      etat -> afficher_sous_categ = 1;      etat -> affiche_sous_total_categ = 1;      etat -> affiche_sous_total_sous_categ = 1;      etat -> afficher_pas_de_sous_categ = 1;      etat -> afficher_nom_categ = 1;      /*   les devises sont  1 (euro) */      etat -> devise_de_calcul_general = 1;      etat -> devise_de_calcul_categ = 1;      etat -> devise_de_calcul_ib = 1;      etat -> devise_de_calcul_tiers = 1;      etat -> choix_devise_montant = 1;      break;    case 1:     /*  revenus et dpenses du mois courant  */      etat -> nom_etat = g_strdup ( _("Current month incomes and outgoings") );      etat -> separer_revenus_depenses = 1;      etat -> no_plage_date = 3;      /*   le classement de base est 1-2-3-4-5-6 (cf structure.h) */      etat -> type_classement = g_list_append ( etat -> type_classement,						GINT_TO_POINTER ( 1 ));      etat -> type_classement = g_list_append ( etat -> type_classement,						GINT_TO_POINTER ( 2 ));      etat -> type_classement = g_list_append ( etat -> type_classement,						GINT_TO_POINTER ( 3 ));      etat -> type_classement = g_list_append ( etat -> type_classement,						GINT_TO_POINTER ( 4 ));      etat -> type_classement = g_list_append ( etat -> type_classement,						GINT_TO_POINTER ( 5 ));      etat -> type_classement = g_list_append ( etat -> type_classement,						GINT_TO_POINTER ( 6 ));      etat -> type_virement = 2;      etat -> utilise_categ = 1;      etat -> afficher_sous_categ = 1;      etat -> affiche_sous_total_categ = 1;      etat -> affiche_sous_total_sous_categ = 1;      etat -> afficher_pas_de_sous_categ = 1;      etat -> afficher_nom_categ = 1;      /*   les devises sont  1 (euro) */      etat -> devise_de_calcul_general = 1;      etat -> devise_de_calcul_categ = 1;      etat -> devise_de_calcul_ib = 1;      etat -> devise_de_calcul_tiers = 1;      etat -> choix_devise_montant = 1;      break;    case 2:      /* on ajoute le budget annuel */      etat -> nom_etat = g_strdup ( _("Annual budget") );      /*   le classement de base est 1-2-3-4-5-6 (cf structure.h) */      etat -> type_classement = g_list_append ( etat -> type_classement,						GINT_TO_POINTER ( 1 ));      etat -> type_classement = g_list_append ( etat -> type_classement,						GINT_TO_POINTER ( 2 ));      etat -> type_classement = g_list_append ( etat -> type_classement,						GINT_TO_POINTER ( 3 ));      etat -> type_classement = g_list_append ( etat -> type_classement,						GINT_TO_POINTER ( 4 ));      etat -> type_classement = g_list_append ( etat -> type_classement,						GINT_TO_POINTER ( 5 ));      etat -> type_classement = g_list_append ( etat -> type_classement,						GINT_TO_POINTER ( 6 ));      /*   les devises sont  1 (euro) */      etat -> devise_de_calcul_general = 1;      etat -> devise_de_calcul_categ = 1;      etat -> devise_de_calcul_ib = 1;      etat -> devise_de_calcul_tiers = 1;      etat -> choix_devise_montant = 1;      etat -> separer_revenus_depenses = 1;      etat -> no_plage_date = 4;      etat -> utilise_categ = 1;      etat -> exclure_ope_sans_categ = 1;      etat -> affiche_sous_total_categ = 1;      etat -> afficher_sous_categ = 1;      etat -> afficher_pas_de_sous_categ = 1;      etat -> affiche_sous_total_sous_categ = 1;      etat -> afficher_nom_categ = 1;      etat -> exclure_montants_nuls = 1;      /*   tout le reste est  NULL, ce qui est trs bien */      break;    case 3:      /* on ajoute un tat vierge appel nouvel tat */      etat -> nom_etat = g_strdup ( _("New report") );      /*   le classement de base est 1-2-3-4-5-6 (cf structure.h) */      etat -> type_classement = g_list_append ( etat -> type_classement,						GINT_TO_POINTER ( 1 ));      etat -> type_classement = g_list_append ( etat -> type_classement,						GINT_TO_POINTER ( 2 ));      etat -> type_classement = g_list_append ( etat -> type_classement,						GINT_TO_POINTER ( 3 ));      etat -> type_classement = g_list_append ( etat -> type_classement,						GINT_TO_POINTER ( 4 ));      etat -> type_classement = g_list_append ( etat -> type_classement,						GINT_TO_POINTER ( 5 ));      etat -> type_classement = g_list_append ( etat -> type_classement,						GINT_TO_POINTER ( 6 ));      /*   les devises sont  1 (euro) */      etat -> devise_de_calcul_general = 1;      etat -> devise_de_calcul_categ = 1;      etat -> devise_de_calcul_ib = 1;      etat -> devise_de_calcul_tiers = 1;      etat -> choix_devise_montant = 1;      etat -> afficher_opes = 1;      etat -> afficher_date_ope = 1;      etat -> afficher_tiers_ope = 1;      etat -> afficher_categ_ope = 1;      etat -> separer_revenus_depenses = 1;      etat -> type_virement = 2;      etat -> utilise_categ = 1;      etat -> exclure_ope_sans_categ = 1;      etat -> affiche_sous_total_categ = 1;      etat -> afficher_sous_categ = 1;      etat -> affiche_sous_total_sous_categ = 1;      etat -> afficher_nom_categ = 1;      etat -> exclure_ope_sans_ib = 1;      etat -> exclure_montants_nuls = 1;      /*   tout le reste est  NULL, ce qui est trs bien */      break;    case 4:      /* remise de chques */      etat -> nom_etat = g_strdup ( _("Cheques deposit") );      /*   le classement de base est 1-2-3-4-5-6 (cf structure.h) */      etat -> type_classement = g_list_append ( etat -> type_classement,						GINT_TO_POINTER ( 1 ));      etat -> type_classement = g_list_append ( etat -> type_classement,						GINT_TO_POINTER ( 2 ));      etat -> type_classement = g_list_append ( etat -> type_classement,						GINT_TO_POINTER ( 3 ));      etat -> type_classement = g_list_append ( etat -> type_classement,						GINT_TO_POINTER ( 4 ));      etat -> type_classement = g_list_append ( etat -> type_classement,						GINT_TO_POINTER ( 5 ));      etat -> type_classement = g_list_append ( etat -> type_classement,						GINT_TO_POINTER ( 6 ));      /*   les devises sont  1 (euro) */      etat -> devise_de_calcul_general = 1;      etat -> devise_de_calcul_categ = 1;      etat -> devise_de_calcul_ib = 1;      etat -> devise_de_calcul_tiers = 1;      etat -> choix_devise_montant = 1;      etat -> afficher_opes = 1;      etat -> afficher_nb_opes = 1;      etat -> afficher_tiers_ope = 1;      etat -> afficher_infobd_ope = 1;      etat -> type_virement = 2;      etat -> exclure_montants_nuls = 1;      etat -> utilise_montant = 1;      /* on doit crer une structure de montant qui dit que a va tre positif */      comp_montant = calloc ( 1,			      sizeof ( struct struct_comparaison_montants_etat ));      comp_montant -> lien_struct_precedente = -1;      comp_montant -> comparateur_1 = 8;      comp_montant -> lien_1_2 = 3;      etat -> liste_struct_comparaison_montants = g_slist_append ( etat -> liste_struct_comparaison_montants,								   comp_montant );      /*   tout le reste est  NULL, ce qui est trs bien */      break;    case 5:      /* dpenses mensuelles par tiers */      etat -> nom_etat = g_strdup ( _("Monthly outgoings by third party") );      /*   le classement de base est 1-2-3-4-5-6 (cf structure.h) */      etat -> type_classement = g_list_append ( etat -> type_classement,						GINT_TO_POINTER ( 1 ));      etat -> type_classement = g_list_append ( etat -> type_classement,						GINT_TO_POINTER ( 2 ));      etat -> type_classement = g_list_append ( etat -> type_classement,						GINT_TO_POINTER ( 3 ));      etat -> type_classement = g_list_append ( etat -> type_classement,						GINT_TO_POINTER ( 4 ));      etat -> type_classement = g_list_append ( etat -> type_classement,						GINT_TO_POINTER ( 5 ));      etat -> type_classement = g_list_append ( etat -> type_classement,						GINT_TO_POINTER ( 6 ));      /*   les devises sont  1 (euro) */      etat -> devise_de_calcul_general = 1;      etat -> devise_de_calcul_categ = 1;      etat -> devise_de_calcul_ib = 1;      etat -> devise_de_calcul_tiers = 1;      etat -> choix_devise_montant = 1;      etat -> afficher_opes = 1;      etat -> afficher_nb_opes = 1;      etat -> afficher_tiers_ope = 1;      etat -> type_classement_ope = 2;      etat -> afficher_titre_colonnes = 1;      etat -> no_plage_date = 7;      etat -> utilise_categ = 1;      etat -> affiche_sous_total_categ = 1;      etat -> afficher_sous_categ = 1;      etat -> afficher_nom_categ = 1;      etat -> afficher_date_ope = 1;      etat -> afficher_categ_ope = 1;      etat -> separer_revenus_depenses = 1;      etat -> type_virement = 2;      etat -> exclure_ope_sans_categ = 1;      etat -> affiche_sous_total_sous_categ = 1;      etat -> exclure_ope_sans_ib = 1;      etat -> exclure_montants_nuls = 1;      /*   tout le reste est  NULL, ce qui est trs bien */      break;    case 6:      /* dpenses mensuelles par tiers */      etat -> nom_etat = g_strdup ( _("Search") );      /*   le classement de base est 1-2-3-4-5-6 (cf structure.h) */      etat -> type_classement = g_list_append ( etat -> type_classement,						GINT_TO_POINTER ( 1 ));      etat -> type_classement = g_list_append ( etat -> type_classement,						GINT_TO_POINTER ( 2 ));      etat -> type_classement = g_list_append ( etat -> type_classement,						GINT_TO_POINTER ( 3 ));      etat -> type_classement = g_list_append ( etat -> type_classement,						GINT_TO_POINTER ( 4 ));      etat -> type_classement = g_list_append ( etat -> type_classement,						GINT_TO_POINTER ( 5 ));      etat -> type_classement = g_list_append ( etat -> type_classement,						GINT_TO_POINTER ( 6 ));      /*   les devises sont  1 (euro) */      etat -> devise_de_calcul_general = 1;      etat -> devise_de_calcul_categ = 1;      etat -> devise_de_calcul_ib = 1;      etat -> devise_de_calcul_tiers = 1;      etat -> choix_devise_montant = 1;      etat -> afficher_opes = 1;      etat -> afficher_date_ope = 1;      etat -> afficher_tiers_ope = 1;      etat -> afficher_categ_ope = 1;      etat -> afficher_sous_categ_ope = 1;      etat -> afficher_type_ope = 1;      etat -> afficher_ib_ope = 1;      etat -> afficher_sous_ib_ope = 1;      etat -> afficher_cheque_ope = 1;      etat -> afficher_notes_ope = 1;      etat -> afficher_pc_ope = 1;      etat -> afficher_rappr_ope = 1;      etat -> afficher_infobd_ope = 1;      etat -> afficher_exo_ope = 1;      etat -> ope_clickables = 1;      etat -> no_plage_date = 4;      etat -> separation_par_plage = 1;      etat -> type_separation_plage = 2;      etat -> type_virement = 2;      /*   tout le reste est  NULL, ce qui est trs bien */      break;    default :      dialogue ( _("Unknown report type, creation cancelled"));      return;    }  /* on l'ajoute  la liste */  liste_struct_etats = g_slist_append ( liste_struct_etats,					etat );  /* on raffiche la liste des tats */  etat_courant = etat;  remplissage_liste_etats ();  gtk_widget_set_sensitive ( bouton_personnaliser_etat,			     TRUE );  /* FIXME: ractiver ca le jour ou on sort l'impression	mais de toutes faons, ca sera merg   gtk_widget_set_sensitive ( bouton_imprimer_etat,			     TRUE );  */  gtk_widget_set_sensitive ( bouton_exporter_etat,			     TRUE );  gtk_widget_set_sensitive ( bouton_dupliquer_etat,			     TRUE );  gtk_widget_set_sensitive ( bouton_effacer_etat,			     TRUE );  gtk_label_set_text ( GTK_LABEL ( label_etat_courant ),		       etat_courant -> nom_etat );  personnalisation_etat ();  modification_fichier ( TRUE );}