rem: TRUE );
add: TRUE, 0 );
context: void supprimer_imputation ( void ){  struct struct_imputation *imputation;  GtkCTreeNode *node;  gint i;  gint ope_trouvee;  if ( !gtk_object_get_data ( GTK_OBJECT (  entree_nom_imputation ),			      "adr_struct_imputation" ))    {      supprimer_sous_imputation();      return;    }  node = GTK_CTREE_NODE ( ( GTK_CLIST ( arbre_imputation ) -> selection ) -> data );  imputation = gtk_ctree_node_get_row_data ( GTK_CTREE ( arbre_imputation ),					node );  /* fait le tour des ops pour en trouver une qui a cette catgorie */  p_tab_nom_de_compte_variable = p_tab_nom_de_compte;  ope_trouvee = 0;  for ( i=0 ; i<nb_comptes ; i++ )    {      GSList *liste_tmp;      liste_tmp = LISTE_OPERATIONS;      while ( liste_tmp )	{	  struct structure_operation *operation;	  operation = liste_tmp -> data;	  if ( operation -> imputation == imputation -> no_imputation )	    {	      ope_trouvee = 1;	      liste_tmp = NULL;	      i = nb_comptes;	    }	  else	    liste_tmp = liste_tmp -> next;	}      p_tab_nom_de_compte_variable++;    }  if ( ope_trouvee )    {      GtkWidget *dialog;      GtkWidget *label;      gint resultat;      GtkWidget *separation;      GtkWidget *hbox;      GtkWidget *bouton_imputation_generique;      GtkWidget *combofix;      GSList *liste_combofix;      GSList *pointeur;      GSList *liste_tmp;      GtkWidget *bouton_transfert;      gint i;      struct struct_imputation *nouvelle_imputation;      struct struct_sous_imputation *nouvelle_sous_imputation;      GSList *liste_imputation_credit;      GSList *liste_imputation_debit;      gchar **split_imputation;      gint nouveau_no_imputation;      gint nouveau_no_sous_imputation;      dialog = gnome_dialog_new ( _("Suppression d'une imputation"),					    GNOME_STOCK_BUTTON_OK,					    GNOME_STOCK_BUTTON_CANCEL,					     NULL);      gnome_dialog_set_parent ( GNOME_DIALOG ( dialog ),				GTK_WINDOW ( window ));      label = gtk_label_new ( _("L'imputation slectionne contient encore des oprations.\n\nVous pouvez : ") );      gtk_box_pack_start ( GTK_BOX ( GNOME_DIALOG ( dialog ) -> vbox ),			   label,			   FALSE,			   FALSE,			   0 );      separation = gtk_hseparator_new ( );      gtk_box_pack_start ( GTK_BOX ( GNOME_DIALOG ( dialog ) -> vbox ),			   separation,			   FALSE,			   FALSE,			   0 );/*       mise en place du choix tranfert vers un autre imputation */            hbox = gtk_hbox_new ( FALSE,			    5 );      gtk_box_pack_start ( GTK_BOX ( GNOME_DIALOG ( dialog ) -> vbox ),			   hbox,			   FALSE,			   FALSE,			   0 );      bouton_transfert = gtk_radio_button_new_with_label ( NULL,							   _("Transfrer les oprations sur l'imputation : ")  );      gtk_box_pack_start ( GTK_BOX ( hbox ),			   bouton_transfert,			   FALSE,			   FALSE,			   0 );      pointeur = liste_struct_imputation;      liste_combofix = NULL;      liste_imputation_credit = NULL;      liste_imputation_debit = NULL;      while ( pointeur )	{	  struct struct_imputation *imputation;	  GSList *sous_pointeur;	  imputation = pointeur -> data;	  if ( imputation-> no_imputation != imputation -> no_imputation )	    {	      if ( imputation -> type_imputation )		liste_imputation_debit = g_slist_append ( liste_imputation_debit,						     g_strdup ( imputation -> nom_imputation ) );	      else		liste_imputation_credit = g_slist_append ( liste_imputation_credit,						      g_strdup ( imputation -> nom_imputation ) );	      sous_pointeur = imputation -> liste_sous_imputation;	      while ( sous_pointeur )		{		  struct struct_sous_imputation *sous_imputation;		  sous_imputation = sous_pointeur -> data;		  if ( imputation -> type_imputation )		    liste_imputation_debit = g_slist_append ( liste_imputation_debit,							 g_strconcat ( "\t",								       sous_imputation -> nom_sous_imputation,								       NULL ) );		  else		    liste_imputation_credit = g_slist_append ( liste_imputation_credit,							  g_strconcat ( "\t",									sous_imputation -> nom_sous_imputation,									NULL ) );		  sous_pointeur = sous_pointeur -> next;		}	    }	  pointeur = pointeur -> next;	}      /*   on ajoute les listes des crdits / dbits  la liste du combofix du formulaire */      liste_combofix = g_slist_append ( liste_combofix,						   liste_imputation_debit );      liste_combofix = g_slist_append ( liste_combofix,						   liste_imputation_credit );      combofix = gtk_combofix_new_complex ( liste_combofix,					    TRUE,					    TRUE,					    TRUE );      gtk_box_pack_start ( GTK_BOX ( hbox ),			   combofix,			   FALSE,			   FALSE,			   0 );      /*       mise en place du choix supprimer le imputation */      hbox = gtk_hbox_new ( FALSE,			    5 );      gtk_box_pack_start ( GTK_BOX ( GNOME_DIALOG ( dialog ) -> vbox ),			   hbox,			   FALSE,			   FALSE,			   0 );      bouton_imputation_generique = gtk_radio_button_new_with_label ( gtk_radio_button_group ( GTK_RADIO_BUTTON ( bouton_transfert )),											  _(" Supprimer simplement cette imputation.") );      gtk_box_pack_start ( GTK_BOX ( hbox ),			   bouton_imputation_generique,			   FALSE,			   FALSE,			   0 );      gtk_widget_show_all ( dialog );    retour_dialogue:      resultat = gnome_dialog_run ( GNOME_DIALOG ( dialog ) );      if ( resultat )	{	  if ( resultat == 1 )	    gnome_dialog_close ( GNOME_DIALOG ( dialog ) );	  return;	}      if ( gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON ( bouton_transfert )) )	{	  if ( !strlen (gtk_combofix_get_text ( GTK_COMBOFIX ( combofix ))))	    {	      dialogue ( _("Veuillez entrer une imputation !") );	      goto retour_dialogue;	    }	  /* transfert des imputation au niveau des listes */	  split_imputation = g_strsplit ( gtk_combofix_get_text ( GTK_COMBOFIX ( combofix )),				     " : ",				     2 );	  nouvelle_imputation = g_slist_find_custom ( liste_struct_imputation,						      split_imputation[0],						      (GCompareFunc) recherche_imputation_par_nom ) -> data;	  nouveau_no_imputation = nouvelle_imputation -> no_imputation;	  if ( split_imputation[1] )	    {	      nouvelle_sous_imputation = g_slist_find_custom ( nouvelle_imputation -> liste_sous_imputation,							  split_imputation[1],							  (GCompareFunc) recherche_sous_imputation_par_nom ) -> data;	      nouveau_no_sous_imputation = nouvelle_sous_imputation -> no_sous_imputation;	    }	  else	    nouveau_no_sous_imputation = 0;	  g_strfreev ( split_imputation );	}      else	{	  nouveau_no_imputation = 0;	  nouveau_no_sous_imputation = 0;	}      /* on fait le tour des ops pour mettre le nouveau numro de imputation et sous_imputation */      p_tab_nom_de_compte_variable = p_tab_nom_de_compte;      for ( i = 0 ; i < nb_comptes ; i++ )	{	  liste_tmp = LISTE_OPERATIONS;	  while ( liste_tmp )	    {	      struct structure_operation *operation;	      operation = liste_tmp -> data;	      if ( operation -> imputation == imputation -> no_imputation )		{		  operation -> imputation = nouveau_no_imputation;		  operation -> sous_imputation = nouveau_no_sous_imputation;		}	      liste_tmp = liste_tmp -> next;	    }	  p_tab_nom_de_compte_variable++;	}      /* fait le tour des chances pour mettre le nouveau numro de imputation et sous_imputation  */      liste_tmp = gsliste_echeances;      while ( liste_tmp )	{	  struct operation_echeance *echeance;	  echeance = liste_tmp -> data;	  if ( echeance -> imputation == imputation -> no_imputation )	    {	      echeance -> imputation = nouveau_no_imputation;	      echeance -> sous_imputation = nouveau_no_sous_imputation;	      if ( !echeance -> imputation )		echeance -> compte_virement = -1;	    }	  liste_tmp = liste_tmp -> next;	}      demande_mise_a_jour_tous_comptes ();      gnome_dialog_close ( GNOME_DIALOG ( dialog ) );    }  /* supprime dans la liste des imputation  */  liste_struct_imputation = g_slist_remove ( liste_struct_imputation,					     imputation );  nb_enregistrements_imputations--;  enleve_selection_ligne_imputation();  mise_a_jour_imputation  ();  remplit_arbre_imputation ();  modification_fichier(TRUE);}