[grisbi-cvs] [SCM] grisbi branch, master, updated. 35d0852a97a3014c9b0aabc82d9a79c71f17c0cd

Pierre Biava nobody at users.sourceforge.net
Tue Aug 24 19:10:52 CEST 2010


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "grisbi".

The branch, master has been updated
       via  35d0852a97a3014c9b0aabc82d9a79c71f17c0cd (commit)
       via  7997fa6a0f9c0a486a9a24e729334879a41db0e8 (commit)
       via  c8c5eeb55c57c2f56f2419c70be58618e8338e23 (commit)
       via  96c2bc7b596a48cbf4f0c2c0fdf641a815554aee (commit)
       via  b887b0e885723e41d7455bac8897bf980a564c32 (commit)
       via  37a070d32a16d6805cee62f6a7c67794763d1c1e (commit)
       via  149745d2f34fbf393c11e458a2a7f6dbe4cf1276 (commit)
      from  f6c711e10af8b33df6dd86fcc5e615b0776c8222 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 35d0852a97a3014c9b0aabc82d9a79c71f17c0cd
Merge: f6c711e10af8b33df6dd86fcc5e615b0776c8222 7997fa6a0f9c0a486a9a24e729334879a41db0e8
Author: pbiava <pierre.biava at nerim.net>
Date:   Tue Aug 24 19:09:12 2010 +0200

    Merge branch 'pbiava_print_api'

commit 7997fa6a0f9c0a486a9a24e729334879a41db0e8
Author: pbiava <pierre.biava at nerim.net>
Date:   Tue Aug 24 18:57:38 2010 +0200

    Adding printing of the tables of credits and amortization

commit c8c5eeb55c57c2f56f2419c70be58618e8338e23
Author: pbiava <pierre.biava at nerim.net>
Date:   Tue Aug 24 18:33:01 2010 +0200

    update strings fr

commit 96c2bc7b596a48cbf4f0c2c0fdf641a815554aee
Author: pbiava <pierre.biava at nerim.net>
Date:   Tue Aug 24 18:32:28 2010 +0200

    update icon ac_liability_16.png

commit b887b0e885723e41d7455bac8897bf980a564c32
Author: pbiava <pierre.biava at nerim.net>
Date:   Mon Aug 23 18:34:55 2010 +0200

    update strings fr

commit 37a070d32a16d6805cee62f6a7c67794763d1c1e
Author: pbiava <pierre.biava at nerim.net>
Date:   Sun Aug 22 19:59:49 2010 +0200

    Fixed a bug in the column headings of table transactions when printing

commit 149745d2f34fbf393c11e458a2a7f6dbe4cf1276
Author: pbiava <pierre.biava at nerim.net>
Date:   Thu Aug 19 20:49:54 2010 +0200

    add print_tree_view_list

-----------------------------------------------------------------------

Changes:
diff --git a/pixmaps/ac_liability_16.png b/pixmaps/ac_liability_16.png
index f1c9403..f820f9c 100644
Binary files a/pixmaps/ac_liability_16.png and b/pixmaps/ac_liability_16.png differ
diff --git a/po/POTFILES.in b/po/POTFILES.in
index f7e69e9..81e7e93 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -123,6 +123,7 @@ src/print_config.c
 src/print_dialog_config.c
 src/print_report.c
 src/print_transactions_list.c
+src/print_tree_view_list.c
 src/qif.c
 src/tiers_onglet.c
 src/tip.c
diff --git a/po/fr.po b/po/fr.po
index 4e36030..35ff22d 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -14,7 +14,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: fr\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-15 14:35+0200\n"
+"POT-Creation-Date: 2010-08-23 22:59+0200\n"
 "PO-Revision-Date: 2010-05-02 23:26+0200\n"
 "Last-Translator: Pierre Biava <pierre at pierre.biava.name>\n"
 "Language-Team: GNOME French Team <gnomefr at traduc.org>\n"
@@ -60,7 +60,7 @@ msgid "Account balances in %s"
 msgstr "Solde des comptes en %s"
 
 #: ../src/accueil.c:481 ../src/accueil.c:559 ../src/accueil.c:636
-#: ../src/accueil.c:705
+#: ../src/accueil.c:705 ../src/bet_finance_ui.c:1621
 msgid " at "
 msgstr " au "
 
@@ -234,8 +234,8 @@ msgid "Click on preview to change logo"
 msgstr "Cliquer sur la prévisualisation pour modifier le logo"
 
 #. Change fonts
-#: ../src/affichage.c:202 ../src/print_report.c:105 ../src/print_report.c:405
-#: ../src/print_transactions_list.c:261
+#: ../src/affichage.c:202 ../src/print_report.c:105 ../src/print_report.c:406
+#: ../src/print_transactions_list.c:258 ../src/print_tree_view_list.c:924
 msgid "Fonts"
 msgstr "Polices"
 
@@ -653,9 +653,9 @@ msgstr "Capital emprunté"
 #. Duration
 #. create columns
 #. Duration
-#: ../src/bet_config.c:1196 ../src/bet_finance_ui.c:258
-#: ../src/bet_finance_ui.c:461 ../src/bet_finance_ui.c:1047
-#: ../src/bet_finance_ui.c:1452
+#: ../src/bet_config.c:1196 ../src/bet_finance_ui.c:263
+#: ../src/bet_finance_ui.c:465 ../src/bet_finance_ui.c:1103
+#: ../src/bet_finance_ui.c:1537
 msgid "Duration"
 msgstr "Durée"
 
@@ -669,13 +669,13 @@ msgstr "Date de la première échéance"
 
 #. taux
 #. Annuel rate interest
-#: ../src/bet_config.c:1227 ../src/bet_finance_ui.c:1033
-#: ../src/bet_finance_ui.c:1438
+#: ../src/bet_config.c:1227 ../src/bet_finance_ui.c:1089
+#: ../src/bet_finance_ui.c:1523
 msgid "Annuel rate interest"
 msgstr "Taux d'intérêt annuel"
 
-#: ../src/bet_config.c:1236 ../src/bet_finance_ui.c:253
-#: ../src/bet_finance_ui.c:1042 ../src/bet_finance_ui.c:1447
+#: ../src/bet_config.c:1236 ../src/bet_finance_ui.c:258
+#: ../src/bet_finance_ui.c:1098 ../src/bet_finance_ui.c:1532
 msgid "%"
 msgstr "%"
 
@@ -683,15 +683,15 @@ msgstr "%"
 msgid "Fees per month"
 msgstr "Frais par échéance"
 
-#: ../src/bet_config.c:1267 ../src/bet_finance_ui.c:389
+#: ../src/bet_config.c:1267 ../src/bet_finance_ui.c:393
 msgid "Rate Type"
 msgstr "Type de taux"
 
-#: ../src/bet_config.c:1271 ../src/bet_finance_ui.c:393
+#: ../src/bet_config.c:1271 ../src/bet_finance_ui.c:397
 msgid "CAGR"
 msgstr "Taux actuariel"
 
-#: ../src/bet_config.c:1275 ../src/bet_finance_ui.c:397
+#: ../src/bet_config.c:1275 ../src/bet_finance_ui.c:401
 msgid "Proportional rate"
 msgstr "Taux proportionnel"
 
@@ -699,64 +699,64 @@ msgstr "Taux proportionnel"
 msgid "Apply"
 msgstr "Appliquer"
 
-#: ../src/bet_config.c:1336 ../src/bet_finance_ui.c:791
-#: ../src/bet_finance_ui.c:1541
+#: ../src/bet_config.c:1336 ../src/bet_finance_ui.c:827
+#: ../src/bet_finance_ui.c:1648
 msgid " year "
 msgstr " an "
 
-#: ../src/bet_config.c:1338 ../src/bet_finance_ui.c:793
-#: ../src/bet_finance_ui.c:1543
+#: ../src/bet_config.c:1338 ../src/bet_finance_ui.c:829
+#: ../src/bet_finance_ui.c:1650
 msgid " years "
 msgstr " ans "
 
-#: ../src/bet_config.c:1388 ../src/bet_finance_ui.c:652
+#: ../src/bet_config.c:1388 ../src/bet_finance_ui.c:673
 msgid "You must enter at least one value for the capital"
 msgstr "Vous devez entrer au moins une valeur pour le capital"
 
 #. set the title
-#: ../src/bet_finance_ui.c:208 ../src/fenetre_principale.c:277
+#: ../src/bet_finance_ui.c:213 ../src/fenetre_principale.c:277
 #: ../src/navigation.c:300 ../src/navigation.c:1233
 msgid "Credits simulator"
 msgstr "Simulateur de crédits"
 
 #. capital
-#: ../src/bet_finance_ui.c:219 ../src/bet_finance_ui.c:1428
+#: ../src/bet_finance_ui.c:224 ../src/bet_finance_ui.c:1513
 msgid "Loan capital"
 msgstr "Capital emprunté"
 
 #. taux
-#: ../src/bet_finance_ui.c:243
+#: ../src/bet_finance_ui.c:248
 msgid "Annual interest"
 msgstr "Intérêt annuel"
 
-#: ../src/bet_finance_ui.c:273
+#: ../src/bet_finance_ui.c:278
 msgid "Entering Detailed"
 msgstr "Saisie détaillée"
 
-#: ../src/bet_finance_ui.c:276
-msgid "Calculate"
-msgstr "Calculer"
+#: ../src/bet_finance_ui.c:315
+msgid "Between 3 and 18 months"
+msgstr "Entre 3 et 18 mois"
 
-#: ../src/bet_finance_ui.c:312
+#: ../src/bet_finance_ui.c:316
 msgid "Between 1 and 15 years"
 msgstr "Entre 1 et 15 ans"
 
-#: ../src/bet_finance_ui.c:313
+#: ../src/bet_finance_ui.c:317
 msgid "Between 15 and 30 years"
 msgstr "Entre 15 et 30 ans"
 
 #. Fees
-#: ../src/bet_finance_ui.c:368 ../src/bet_finance_ui.c:546
+#: ../src/bet_finance_ui.c:372 ../src/bet_finance_ui.c:560
 msgid "Fees"
 msgstr "Frais"
 
-#: ../src/bet_finance_ui.c:378
+#: ../src/bet_finance_ui.c:382
 #, c-format
 msgid "% of borrowed capital"
 msgstr "% du capital emprunté"
 
 #. Number of periods
-#: ../src/bet_finance_ui.c:478
+#: ../src/bet_finance_ui.c:484
 msgid ""
 "Number\n"
 "of periods"
@@ -765,7 +765,7 @@ msgstr ""
 "d'échéances"
 
 #. Loan capital
-#: ../src/bet_finance_ui.c:495
+#: ../src/bet_finance_ui.c:503
 msgid ""
 "Loan\n"
 "capital"
@@ -774,7 +774,7 @@ msgstr ""
 "emprunté"
 
 #. Annuel rate interest
-#: ../src/bet_finance_ui.c:512
+#: ../src/bet_finance_ui.c:522
 msgid ""
 "Annuel\n"
 "rate interest"
@@ -783,7 +783,7 @@ msgstr ""
 "annuel"
 
 #. Amount without fees
-#: ../src/bet_finance_ui.c:529
+#: ../src/bet_finance_ui.c:541
 msgid ""
 "Amount\n"
 "without fees"
@@ -792,72 +792,100 @@ msgstr ""
 "hors frais"
 
 #. Monthly paid
-#: ../src/bet_finance_ui.c:563 ../src/bet_finance_ui.c:1200
+#: ../src/bet_finance_ui.c:579 ../src/bet_finance_ui.c:1274
 msgid "Monthly paid"
 msgstr "Mensualité"
 
 #. Total cost
-#: ../src/bet_finance_ui.c:580
+#: ../src/bet_finance_ui.c:598
 msgid "Total cost"
 msgstr "Coût total"
 
-#: ../src/bet_finance_ui.c:592
+#: ../src/bet_finance_ui.c:610
 msgid "Approximate cost"
 msgstr "Coût approximatif"
 
-#: ../src/bet_finance_ui.c:965
+#: ../src/bet_finance_ui.c:1001 ../src/bet_finance_ui.c:1778
 msgid "View amortization table"
 msgstr "Afficher le tableau d'amortissement"
 
-#: ../src/bet_finance_ui.c:973
+#: ../src/bet_finance_ui.c:1007 ../src/bet_finance_ui.c:1562
+#: ../src/bet_finance_ui.c:1793 ../src/bet_finance_ui.c:1847
+msgid "Print the array"
+msgstr "Imprimer le tableau"
+
+#: ../src/bet_finance_ui.c:1011 ../src/bet_finance_ui.c:1834
 msgid "View credits simulator"
 msgstr "Afficher le simulateur de crédits"
 
-#: ../src/bet_finance_ui.c:1012 ../src/bet_finance_ui.c:1416
-#: ../src/bet_finance_ui.c:1514
+#: ../src/bet_finance_ui.c:1017
+msgid "Print amortization table"
+msgstr "Imprimer le tableau d'amortissement"
+
+#: ../src/bet_finance_ui.c:1068 ../src/bet_finance_ui.c:1501
+#: ../src/bet_finance_ui.c:1621
 msgid "Amortization Table"
 msgstr "Tableau d'amortissement"
 
 #. capital
-#: ../src/bet_finance_ui.c:1023
+#: ../src/bet_finance_ui.c:1079
 msgid "Loan amount"
 msgstr "Montant emprunté"
 
-#: ../src/bet_finance_ui.c:1105 ../src/bet_future.c:770 ../src/bet_tab.c:615
+#: ../src/bet_finance_ui.c:1167 ../src/bet_future.c:770 ../src/bet_tab.c:615
 #: ../src/etats_affiche.c:2405 ../src/export_csv.c:760
 #: ../src/gsb_assistant_reconcile_config.c:594 ../src/gsb_form.c:1283
-#: ../src/gsb_form_widget.c:412 ../src/gsb_reconcile.c:155
+#: ../src/gsb_form_widget.c:412 ../src/gsb_reconcile.c:158
 #: ../src/gsb_scheduler_list.c:339 ../src/gsb_transactions_list.c:146
 #: ../src/import.c:3238 ../src/import_csv.c:79
 #: ../src/traitement_variables.c:79
 msgid "Date"
 msgstr "Date"
 
-#: ../src/bet_finance_ui.c:1115 ../src/etats_affiche.c:2398
+#: ../src/bet_finance_ui.c:1179 ../src/etats_affiche.c:2398
 #: ../src/traitement_variables.c:96
 msgid "Number"
 msgstr "N°"
 
 #. Capital restant dû
-#: ../src/bet_finance_ui.c:1132
+#: ../src/bet_finance_ui.c:1198
 msgid "Capital remaining"
 msgstr "Capital restant dû"
 
 #. Interests
-#: ../src/bet_finance_ui.c:1149
+#: ../src/bet_finance_ui.c:1217
 msgid "Interests"
 msgstr "Intérêts"
 
 #. Capital repaid
-#: ../src/bet_finance_ui.c:1166
+#: ../src/bet_finance_ui.c:1236
 msgid "Capital repaid"
 msgstr "Capital remboursé"
 
 #. Fees
-#: ../src/bet_finance_ui.c:1183
+#: ../src/bet_finance_ui.c:1255
 msgid "Insurance"
 msgstr "Frais"
 
+#. Set up dialog
+#: ../src/bet_finance_ui.c:1559 ../src/bet_finance_ui.c:1790
+#: ../src/bet_finance_ui.c:1844 ../src/barre_outils.c:139
+#: ../src/etats_onglet.c:148 ../src/print_config.c:80
+msgid "Print"
+msgstr "Imprimer"
+
+#: ../src/bet_finance_ui.c:1760 ../src/bet_finance_ui.c:1763
+msgid "Calculate"
+msgstr "Calculer"
+
+#: ../src/bet_finance_ui.c:1774
+msgid "Amortization"
+msgstr "Amortissement"
+
+#: ../src/bet_finance_ui.c:1830
+msgid "Credits"
+msgstr "Crédits"
+
 #: ../src/bet_future.c:227 ../src/bet_future.c:1773 ../src/bet_future.c:1872
 #: ../src/bet_future.c:2419
 msgid ""
@@ -1150,9 +1178,9 @@ msgstr "Cochez la case pour changer automatiquement de date de début"
 msgid "Description"
 msgstr "Description"
 
-#: ../src/bet_tab.c:670 ../src/export_csv.c:787 ../src/gsb_reconcile.c:158
+#: ../src/bet_tab.c:670 ../src/export_csv.c:787 ../src/gsb_reconcile.c:161
 #: ../src/gsb_scheduler_list.c:340 ../src/gsb_transactions_list.c:152
-#: ../src/gsb_transactions_list.c:3013 ../src/import_csv.c:88
+#: ../src/gsb_transactions_list.c:3019 ../src/import_csv.c:88
 #: ../src/traitement_variables.c:85
 msgid "Balance"
 msgstr "Solde"
@@ -1269,12 +1297,6 @@ msgstr "Rapprocher"
 msgid "Start account reconciliation"
 msgstr "Commencer à effectuer un rapprochement sur le compte"
 
-#. Set up dialog
-#: ../src/barre_outils.c:139 ../src/etats_onglet.c:148
-#: ../src/print_config.c:80
-msgid "Print"
-msgstr "Imprimer"
-
 #: ../src/barre_outils.c:144
 msgid "Print the transactions list"
 msgstr "Imprimer la liste des opérations"
@@ -2031,13 +2053,13 @@ msgid "Result without financial year"
 msgstr "Resultat sans exercice"
 
 #: ../src/etats_affiche.c:1399 ../src/gsb_scheduler_list.c:950
-#: ../src/gsb_transactions_list.c:3440
+#: ../src/gsb_transactions_list.c:3446
 #, c-format
 msgid "Transfer to %s"
 msgstr "Virement vers %s"
 
 #: ../src/etats_affiche.c:1401 ../src/gsb_scheduler_list.c:953
-#: ../src/gsb_transactions_list.c:3443
+#: ../src/gsb_transactions_list.c:3449
 #, c-format
 msgid "Transfer from %s"
 msgstr "Virement de %s"
@@ -2087,7 +2109,7 @@ msgstr "Total général"
 #: ../src/etats_affiche.c:1853 ../src/export_csv.c:571
 #: ../src/gsb_data_category.c:1054 ../src/gsb_form.c:727
 #: ../src/gsb_form.c:2757 ../src/gsb_form.c:3159
-#: ../src/gsb_form_scheduler.c:316 ../src/gsb_transactions_list.c:3418
+#: ../src/gsb_form_scheduler.c:316 ../src/gsb_transactions_list.c:3424
 msgid "Split of transaction"
 msgstr "Opération ventilée"
 
@@ -3397,7 +3419,7 @@ msgstr "Format CSV"
 
 #. set the initial balance
 #: ../src/export_csv.c:277 ../src/gsb_account_property.c:520
-#: ../src/gsb_assistant_reconcile_config.c:433 ../src/gsb_reconcile.c:209
+#: ../src/gsb_assistant_reconcile_config.c:433 ../src/gsb_reconcile.c:212
 #: ../src/gsb_reconcile_config.c:232
 msgid "Initial balance"
 msgstr "Solde initial"
@@ -5112,7 +5134,7 @@ msgstr ""
 "rapprochement\""
 
 #. set the final balance
-#: ../src/gsb_assistant_reconcile_config.c:444 ../src/gsb_reconcile.c:217
+#: ../src/gsb_assistant_reconcile_config.c:444 ../src/gsb_reconcile.c:220
 #: ../src/gsb_reconcile_config.c:97 ../src/gsb_reconcile_config.c:246
 msgid "Final balance"
 msgstr "Solde final"
@@ -5230,7 +5252,7 @@ msgstr "Sélectionnez le rapprochement à associer aux opérations sélectionné
 msgid "No selection found, the transactions are not modified."
 msgstr "Aucune opération sélectionnée, elles ne sont pas modifiées."
 
-#: ../src/gsb_bank.c:386 ../src/gsb_reconcile.c:417
+#: ../src/gsb_bank.c:386 ../src/gsb_reconcile.c:420
 msgid "None"
 msgstr "Aucun"
 
@@ -8201,11 +8223,11 @@ msgstr "Associer ces opérations avec"
 msgid "with plugins"
 msgstr "avec les greffons"
 
-#: ../src/gsb_reconcile.c:127 ../src/gsb_transactions_list.c:155
+#: ../src/gsb_reconcile.c:130 ../src/gsb_transactions_list.c:155
 msgid "Reconciliation reference"
 msgstr "N° rapprochement"
 
-#: ../src/gsb_reconcile.c:132
+#: ../src/gsb_reconcile.c:135
 msgid ""
 "If reconciliation reference ends in a digit, it is automatically incremented "
 "at each reconciliation.\n"
@@ -8216,25 +8238,25 @@ msgstr ""
 "Vous pouvez le laisser vide si vous ne voulez pas garder une trace du "
 "rapprochement."
 
-#: ../src/gsb_reconcile.c:225
+#: ../src/gsb_reconcile.c:228
 msgid "Checking"
 msgstr "Pointage"
 
-#: ../src/gsb_reconcile.c:236
+#: ../src/gsb_reconcile.c:239
 msgid "Variance"
 msgstr "Écart"
 
-#: ../src/gsb_reconcile.c:251
+#: ../src/gsb_reconcile.c:254
 msgid "Sort by method of payment"
 msgstr "Tri par mode de règlement"
 
 #. set the title
-#: ../src/gsb_reconcile.c:438
+#: ../src/gsb_reconcile.c:441
 #, c-format
 msgid " <b>%s reconciliation</b> "
 msgstr " <b>%s rapprochement</b> "
 
-#: ../src/gsb_reconcile.c:511
+#: ../src/gsb_reconcile.c:514
 msgid ""
 "There is a variance in balances, check that both final balance and initial "
 "balance minus marked transactions are equal."
@@ -8242,12 +8264,12 @@ msgstr ""
 "Il y a une inconsistance dans les soldes, vérifiez que le solde de départ "
 "moins les opérations marquées donnent bien le solde final."
 
-#: ../src/gsb_reconcile.c:512 ../src/gsb_reconcile.c:521
-#: ../src/gsb_reconcile.c:533 ../src/gsb_reconcile.c:541
+#: ../src/gsb_reconcile.c:515 ../src/gsb_reconcile.c:524
+#: ../src/gsb_reconcile.c:536 ../src/gsb_reconcile.c:544
 msgid "Reconciliation can't be completed."
 msgstr "La réconciliation ne peux pas être terminée."
 
-#: ../src/gsb_reconcile.c:520
+#: ../src/gsb_reconcile.c:523
 msgid ""
 "There is already a reconcile with that name, you must use another name or "
 "let it free.\n"
@@ -8259,12 +8281,12 @@ msgstr ""
 " Si le nom du rapprochement se termine par un chiffre,\n"
 "il sera automatiquement incrémenté."
 
-#: ../src/gsb_reconcile.c:530
+#: ../src/gsb_reconcile.c:533
 #, c-format
 msgid "Invalid date: '%s'"
 msgstr "Date invalide: '%s'"
 
-#: ../src/gsb_reconcile.c:540
+#: ../src/gsb_reconcile.c:543
 msgid ""
 "You need to set a name to the reconciliation ; at least, set a number,\n"
 "it will be automatically incremented later"
@@ -8272,7 +8294,7 @@ msgstr ""
 "Vous devez définir un nom pour le rapprochement ou au moins, un numéro,\n"
 "il sera automatiquement incrémenté plus tard"
 
-#: ../src/gsb_reconcile.c:553
+#: ../src/gsb_reconcile.c:556
 #, c-format
 msgid "Last statement: %s"
 msgstr "Dernier relevé : %s"
@@ -8520,7 +8542,7 @@ msgstr "Supprimer une opération planifiée."
 msgid "Delete one or all occurences of scheduled transaction."
 msgstr "Supprimer cette occurence ou toutes, de l'opération sélectionnée"
 
-#: ../src/gsb_transactions_list.c:573 ../src/gsb_transactions_list.c:3555
+#: ../src/gsb_transactions_list.c:573 ../src/gsb_transactions_list.c:3561
 msgid ""
 "Some children didn't find their mother in the list, this shouldn't happen "
 "and there is probably a bug behind that. Please contact the Grisbi team.\n"
@@ -8690,19 +8712,19 @@ msgid "Cannot move a transfer on his contra-account"
 msgstr "Impossible de déplacer un virement vers son compte de destination"
 
 #. sort by line
-#: ../src/gsb_transactions_list.c:2967
+#: ../src/gsb_transactions_list.c:2973
 msgid "Sort list by :"
 msgstr "Tri par :"
 
-#: ../src/gsb_transactions_list.c:3427
+#: ../src/gsb_transactions_list.c:3433
 msgid "Transfer to a deleted account"
 msgstr "Virement vers un compte supprimé"
 
-#: ../src/gsb_transactions_list.c:3429
+#: ../src/gsb_transactions_list.c:3435
 msgid "Transfer from a deleted account"
 msgstr "Virement d'un compte supprimé"
 
-#: ../src/gsb_transactions_list.c:3584
+#: ../src/gsb_transactions_list.c:3590
 msgid ""
 "You have just recovered an archive, if you don't see any new transaction, "
 "remember that the R transactions are not showed so the archived transactions "
@@ -10305,74 +10327,75 @@ msgstr "S'il vous plaît sélectionnez un état avant d'essayer de l'imprimer."
 msgid "No report selected"
 msgstr "Aucun état sélectionné"
 
-#: ../src/print_report.c:416
+#: ../src/print_report.c:417
 msgid "Lines font"
 msgstr "Police des lignes"
 
-#: ../src/print_report.c:425 ../src/print_report.c:445
-#: ../src/print_transactions_list.c:282 ../src/print_transactions_list.c:305
+#: ../src/print_report.c:426 ../src/print_report.c:446
+#: ../src/print_transactions_list.c:279 ../src/print_transactions_list.c:302
+#: ../src/print_tree_view_list.c:941 ../src/print_tree_view_list.c:958
 #: ../src/utils_font.c:121
 msgid "Choosing font"
 msgstr "Choisissez une police"
 
-#: ../src/print_report.c:436
+#: ../src/print_report.c:437
 msgid "Title's font"
 msgstr "Police des titres"
 
-#: ../src/print_transactions_list.c:145
+#: ../src/print_transactions_list.c:142 ../src/print_tree_view_list.c:883
 msgid "Layout"
 msgstr "Mise en page"
 
-#: ../src/print_transactions_list.c:156
+#: ../src/print_transactions_list.c:153 ../src/print_tree_view_list.c:892
 msgid "Print a title : "
 msgstr "Imprimer un titre : "
 
-#: ../src/print_transactions_list.c:172
+#: ../src/print_transactions_list.c:169
 msgid "Select dates interval : "
 msgstr "Sélectionner l'intervalle des dates : "
 
-#: ../src/print_transactions_list.c:185
+#: ../src/print_transactions_list.c:182
 msgid "Initial date : "
 msgstr "Date initiale"
 
-#: ../src/print_transactions_list.c:197
+#: ../src/print_transactions_list.c:194
 msgid "Final date : "
 msgstr "Date finale"
 
-#: ../src/print_transactions_list.c:209
+#: ../src/print_transactions_list.c:206
 msgid "Use value date"
 msgstr "Utiliser la date de valeur"
 
 #. set up all the checkbuttons
-#: ../src/print_transactions_list.c:222
+#: ../src/print_transactions_list.c:219 ../src/print_tree_view_list.c:903
 msgid "Draw the lines between transactions"
 msgstr "Bordures : séparer les lignes par un trait"
 
-#: ../src/print_transactions_list.c:229
+#: ../src/print_transactions_list.c:226 ../src/print_tree_view_list.c:910
 msgid "Draw the lines between the columns"
 msgstr "Bordures : séparer les colonnes par un trait"
 
-#: ../src/print_transactions_list.c:237
+#: ../src/print_transactions_list.c:234
 msgid "Fill the background as the transactions list"
 msgstr "Utiliser le même fond d'écran que la liste des transactions."
 
-#: ../src/print_transactions_list.c:245
+#: ../src/print_transactions_list.c:242
 msgid "Print the archives lines"
 msgstr "Imprimer les opérations archivées"
 
-#: ../src/print_transactions_list.c:253
+#: ../src/print_transactions_list.c:250 ../src/print_tree_view_list.c:917
 msgid "Print the names of the columns"
 msgstr "Imprimer le nom des colonnes"
 
-#: ../src/print_transactions_list.c:270
+#: ../src/print_transactions_list.c:267 ../src/print_tree_view_list.c:931
 msgid "Transactions font"
 msgstr "Police de la liste des opérations"
 
-#: ../src/print_transactions_list.c:293
+#: ../src/print_transactions_list.c:290 ../src/print_tree_view_list.c:948
 msgid "Title font"
 msgstr "Police du titre"
 
-#: ../src/print_transactions_list.c:369
+#: ../src/print_transactions_list.c:366 ../src/print_tree_view_list.c:141
 msgid "Fonts & layout"
 msgstr "Polices et mise en page"
 
diff --git a/src/Makefile.am b/src/Makefile.am
index 9e3f56a..4784a78 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -124,6 +124,7 @@ libgrisbi_la_SOURCES = \
 	print_dialog_config.c		\
 	print_report.c		\
 	print_transactions_list.c		\
+	print_tree_view_list.c	\
 	qif.c			\
 	tiers_onglet.c		\
 	tip.c			\
@@ -272,6 +273,7 @@ libgrisbi_la_SOURCES = \
 	print_dialog_config.h	\
 	print_report.h		\
 	print_transactions_list.h	\
+	print_tree_view_list.h	\
 	qif.h			\
 	tip.h			\
 	structures.h		\
diff --git a/src/bet_finance_ui.c b/src/bet_finance_ui.c
index 403d8dd..1ec7db2 100644
--- a/src/bet_finance_ui.c
+++ b/src/bet_finance_ui.c
@@ -27,6 +27,7 @@
 #include "bet_data_finance.h"
 #include "dialog.h"
 #include "fenetre_principale.h"
+#include "gsb_automem.h"
 #include "gsb_combo_box.h"
 #include "gsb_currency.h"
 #include "gsb_data_account.h"
@@ -34,6 +35,7 @@
 #include "gsb_real.h"
 #include "mouse.h"
 #include "navigation.h"
+#include "print_tree_view_list.h"
 #include "structures.h"
 #include "utils_dates.h"
 #include "erreur.h"
@@ -73,11 +75,13 @@
 static void bet_finance_activate_expander ( GtkWidget *expander, GtkWidget *widget );
 static void bet_finance_calculer_clicked ( GtkButton *button, GtkWidget *widget );
 static GtkWidget *bet_finance_create_amortization_page ( void );
+static GtkWidget *bet_finance_create_amortization_toolbar ( GtkWidget *parent, GtkWidget *tree_view );
 static GtkWidget *bet_finance_create_amortization_tree_view ( GtkWidget *container, gint origin );
 static GtkWidget *bet_finance_create_data_tree_view ( GtkWidget *container );
 static GtkWidget *bet_finance_create_duration_widget ( GtkWidget *parent );
 static GtkWidget *bet_finance_create_saisie_widget ( GtkWidget *parent );
 static GtkWidget *bet_finance_create_simulator_page ( void );
+static GtkWidget *bet_finance_create_simulator_toolbar ( GtkWidget *parent, GtkWidget *tree_view );
 static gboolean bet_finance_data_list_button_press ( GtkWidget *tree_view,
                         GdkEventButton *ev,
                         GtkWidget *page );
@@ -190,12 +194,13 @@ GtkWidget *bet_finance_create_simulator_page ( void )
     GtkWidget *widget;
     GtkWidget *vbox, *hbox;
     GtkWidget *align;
+    GtkWidget *label_title;
     GtkWidget *label;
     GtkWidget *spin_button = NULL;
-    GtkWidget *button;
     GtkWidget *tree_view;
     GtkWidget *expander;
-    GtkEntryCompletion *completion;
+    GtkWidget *toolbar;
+/*     GtkEntryCompletion *completion;  */
 
     devel_debug (NULL);
 
@@ -205,8 +210,8 @@ GtkWidget *bet_finance_create_simulator_page ( void )
     align = gtk_alignment_new (0.5, 0.0, 0.0, 0.0);
     gtk_box_pack_start ( GTK_BOX ( page ), align, FALSE, FALSE, 5);
  
-    label = gtk_label_new ( _("Credits simulator") );
-    gtk_container_add ( GTK_CONTAINER ( align ), label );
+    label_title = gtk_label_new ( _("Credits simulator") );
+    gtk_container_add ( GTK_CONTAINER ( align ), label_title );
 
     /* Choix des données sources */
     align = gtk_alignment_new (0.5, 0.0, 0.0, 0.0);
@@ -221,9 +226,9 @@ GtkWidget *bet_finance_create_simulator_page ( void )
     gtk_label_set_justify ( GTK_LABEL ( label ), GTK_JUSTIFY_LEFT );
     gtk_box_pack_start ( GTK_BOX ( hbox ), label, FALSE, FALSE, 5 );
 
-    completion = gtk_entry_completion_new ( );
+/*     completion = gtk_entry_completion_new ( );  */
     widget = gtk_entry_new ( );
-    gtk_entry_set_completion ( GTK_ENTRY ( widget ), completion );
+/*     gtk_entry_set_completion ( GTK_ENTRY ( widget ), completion );  */
     /* printf ("nbre de caractères avant completion =%d\n",
         gtk_entry_completion_get_minimum_key_length ( completion ) ); */
     gtk_entry_set_text ( GTK_ENTRY ( widget ), "10000" );
@@ -273,16 +278,8 @@ GtkWidget *bet_finance_create_simulator_page ( void )
     expander = gtk_expander_new ( _("Entering Detailed") );
     gtk_box_pack_start ( GTK_BOX ( hbox ), expander, TRUE, TRUE, 5 );
 
-    button = gtk_button_new_with_label ( _("Calculate") );
-    g_signal_connect ( G_OBJECT ( button ),
-                        "clicked",
-                        G_CALLBACK ( bet_finance_calculer_clicked ),
-                        page );
-    gtk_box_pack_start ( GTK_BOX ( hbox ), button, FALSE, FALSE, 5 );
-
     widget = bet_finance_create_saisie_widget ( page );
     gtk_box_pack_start ( GTK_BOX ( vbox ), widget, FALSE, FALSE, 5);
-    
     g_signal_connect_after( G_OBJECT ( expander ),
                         "activate",
                         G_CALLBACK ( bet_finance_activate_expander ),
@@ -291,6 +288,12 @@ GtkWidget *bet_finance_create_simulator_page ( void )
     /* création de la liste des données */
     tree_view = bet_finance_create_data_tree_view ( page );
     g_object_set_data ( G_OBJECT ( page ), "tree_view", tree_view );
+    g_object_set_data ( G_OBJECT ( tree_view ), "label_title", label_title );
+
+    /* on y ajoute la barre d'outils */
+    toolbar = bet_finance_create_simulator_toolbar ( page, tree_view );
+    gtk_box_pack_start ( GTK_BOX ( page ), toolbar, FALSE, FALSE, 0 );
+    gtk_box_reorder_child ( GTK_BOX ( page ), toolbar, 0 );
 
     gtk_widget_show_all ( page );
     gtk_widget_hide ( widget );
@@ -472,6 +475,8 @@ GtkWidget *bet_finance_create_data_tree_view ( GtkWidget *container )
     gtk_tree_view_column_set_expand ( GTK_TREE_VIEW_COLUMN ( column ), TRUE );
     gtk_tree_view_column_set_resizable ( column, TRUE );
     gtk_tree_view_column_set_alignment ( column, 0.5 );
+    g_object_set_data ( G_OBJECT ( column ), "num_col_model",
+                        GINT_TO_POINTER ( BET_FINANCE_DURATION_COLUMN ) );
     g_free ( title );
 
     /* Number of periods */
@@ -489,6 +494,8 @@ GtkWidget *bet_finance_create_data_tree_view ( GtkWidget *container )
     gtk_tree_view_column_set_expand ( GTK_TREE_VIEW_COLUMN ( column ), TRUE );
     gtk_tree_view_column_set_resizable ( column, TRUE );
     gtk_tree_view_column_set_alignment ( column, 0.5 );
+    g_object_set_data ( G_OBJECT ( column ), "num_col_model",
+                        GINT_TO_POINTER ( BET_FINANCE_NBRE_ECHEANCE_COLUMN ) );
     g_free ( title );
 
     /* Loan capital */
@@ -506,6 +513,8 @@ GtkWidget *bet_finance_create_data_tree_view ( GtkWidget *container )
     gtk_tree_view_column_set_expand ( GTK_TREE_VIEW_COLUMN ( column ), TRUE );
     gtk_tree_view_column_set_resizable ( column, TRUE );
     gtk_tree_view_column_set_alignment ( column, 0.5 );
+    g_object_set_data ( G_OBJECT ( column ), "num_col_model",
+                        GINT_TO_POINTER ( BET_FINANCE_CAPITAL_COLUMN ) );
     g_free ( title );
 
     /* Annuel rate interest */
@@ -523,6 +532,8 @@ GtkWidget *bet_finance_create_data_tree_view ( GtkWidget *container )
     gtk_tree_view_column_set_expand ( GTK_TREE_VIEW_COLUMN ( column ), TRUE );
     gtk_tree_view_column_set_resizable ( column, TRUE );
     gtk_tree_view_column_set_alignment ( column, 0.5 );
+    g_object_set_data ( G_OBJECT ( column ), "num_col_model",
+                        GINT_TO_POINTER ( BET_FINANCE_TAUX_COLUMN ) );
     g_free ( title );
 
     /* Amount without fees */
@@ -540,6 +551,8 @@ GtkWidget *bet_finance_create_data_tree_view ( GtkWidget *container )
     gtk_tree_view_column_set_expand ( GTK_TREE_VIEW_COLUMN ( column ), TRUE );
     gtk_tree_view_column_set_resizable ( column, TRUE );
     gtk_tree_view_column_set_alignment ( column, 0.5 );
+    g_object_set_data ( G_OBJECT ( column ), "num_col_model",
+                        GINT_TO_POINTER ( BET_FINANCE_HORS_FRAIS_COLUMN ) );
     g_free ( title );
 
     /* Fees */
@@ -557,6 +570,8 @@ GtkWidget *bet_finance_create_data_tree_view ( GtkWidget *container )
     gtk_tree_view_column_set_expand ( GTK_TREE_VIEW_COLUMN ( column ), TRUE );
     gtk_tree_view_column_set_resizable ( column, TRUE );
     gtk_tree_view_column_set_alignment ( column, 0.5 );
+    g_object_set_data ( G_OBJECT ( column ), "num_col_model",
+                        GINT_TO_POINTER ( BET_FINANCE_FRAIS_COLUMN ) );
     g_free ( title );
 
     /* Monthly paid */
@@ -574,6 +589,8 @@ GtkWidget *bet_finance_create_data_tree_view ( GtkWidget *container )
     gtk_tree_view_column_set_expand ( GTK_TREE_VIEW_COLUMN ( column ), TRUE );
     gtk_tree_view_column_set_resizable ( column, TRUE );
     gtk_tree_view_column_set_alignment ( column, 0.5 );
+    g_object_set_data ( G_OBJECT ( column ), "num_col_model",
+                        GINT_TO_POINTER ( BET_FINANCE_ECHEANCE_COLUMN ) );
     g_free ( title );
 
     /* Total cost */
@@ -593,6 +610,8 @@ GtkWidget *bet_finance_create_data_tree_view ( GtkWidget *container )
     gtk_tree_view_column_set_expand ( GTK_TREE_VIEW_COLUMN ( column ), TRUE );
     gtk_tree_view_column_set_resizable ( column, TRUE );
     gtk_tree_view_column_set_alignment ( column, 0.5 );
+    g_object_set_data ( G_OBJECT ( column ), "num_col_model",
+                        GINT_TO_POINTER ( BET_FINANCE_COUT_COLUMN ) );
     g_free ( title );
 
     g_signal_connect ( G_OBJECT ( tree_view ),
@@ -625,6 +644,7 @@ void bet_finance_calculer_clicked ( GtkButton *button, GtkWidget *widget )
     GtkWidget *bouton;
     GtkWidget *tree_view;
     GtkTreeModel *model;
+    GtkTreePath *path;
     gdouble taux_frais;
     gint duree_min, duree_max;
     gint type_taux;
@@ -720,7 +740,16 @@ void bet_finance_calculer_clicked ( GtkButton *button, GtkWidget *widget )
     }
 
     bet_finance_list_set_background_color ( tree_view, BET_FINANCE_BACKGROUND_COLOR );
+    path = gtk_tree_path_new_first ( );
+    gtk_tree_view_scroll_to_cell ( GTK_TREE_VIEW ( tree_view ), path, NULL, TRUE, 0.0, 0.0 );
+    gtk_tree_selection_select_path ( gtk_tree_view_get_selection ( GTK_TREE_VIEW ( tree_view ) ), path );
+    
+    bouton = g_object_get_data ( G_OBJECT ( widget ), "amortization_button" );
+    gtk_widget_set_sensitive ( bouton, TRUE );
+    bouton = g_object_get_data ( G_OBJECT ( widget ), "print_button" );
+    gtk_widget_set_sensitive ( bouton, TRUE );
 
+    gtk_tree_path_free ( path );
     g_free ( s_echeance );
 }
 
@@ -967,6 +996,8 @@ void bet_finance_data_list_context_menu ( GtkWidget *tree_view, gint page_num )
                         "activate",
                         G_CALLBACK ( bet_finance_fill_amortization_array ),
                         tree_selection );
+
+        tmp_str = g_strdup ( _("Print the array") );
     }
     else
     {
@@ -975,11 +1006,27 @@ void bet_finance_data_list_context_menu ( GtkWidget *tree_view, gint page_num )
                         "activate",
                         G_CALLBACK ( bet_finance_switch_simulator_page ),
                         NULL );
+
+        tmp_str = g_strdup ( _("Print amortization table") );
     }
     
     gtk_image_menu_item_set_image ( GTK_IMAGE_MENU_ITEM ( menu_item ), image );
     gtk_menu_shell_append ( GTK_MENU_SHELL ( menu ), menu_item );
 
+    /* Separator */
+    gtk_menu_shell_append ( GTK_MENU_SHELL ( menu ), gtk_separator_menu_item_new() );
+
+    /* Print list */
+    menu_item = gtk_image_menu_item_new_with_label ( tmp_str );
+    gtk_image_menu_item_set_image ( GTK_IMAGE_MENU_ITEM ( menu_item ),
+                        gtk_image_new_from_stock ( GTK_STOCK_PRINT, GTK_ICON_SIZE_MENU ) );
+    g_signal_connect ( G_OBJECT ( menu_item ),
+                        "activate",
+                        G_CALLBACK ( print_tree_view_list ),
+                        tree_view );
+    gtk_menu_shell_append ( GTK_MENU_SHELL ( menu ), menu_item );
+    g_free ( tmp_str );
+
     /* Finish all. */
     gtk_widget_show_all ( menu );
     gtk_menu_popup ( GTK_MENU( menu ), NULL, NULL, NULL, NULL, 3,
@@ -998,8 +1045,10 @@ GtkWidget *bet_finance_create_amortization_page ( void )
     GtkWidget *page;
     GtkWidget *hbox;
     GtkWidget *align;
+    GtkWidget *label_title;
     GtkWidget *label;
     GtkWidget *tree_view;
+    GtkWidget *toolbar;
 
     devel_debug (NULL);
 
@@ -1009,8 +1058,8 @@ GtkWidget *bet_finance_create_amortization_page ( void )
     align = gtk_alignment_new (0.5, 0.0, 0.0, 0.0);
     gtk_box_pack_start ( GTK_BOX ( page ), align, FALSE, FALSE, 5);
  
-    label = gtk_label_new ( _("Amortization Table") );
-    gtk_container_add ( GTK_CONTAINER ( align ), label );
+    label_title = gtk_label_new ( _("Amortization Table") );
+    gtk_container_add ( GTK_CONTAINER ( align ), label_title );
 
     /* Choix des données sources */
     align = gtk_alignment_new (0.5, 0.0, 0.0, 0.0);
@@ -1056,6 +1105,12 @@ GtkWidget *bet_finance_create_amortization_page ( void )
     /* création de la liste des données */
     tree_view = bet_finance_create_amortization_tree_view ( page, 0 );
     g_object_set_data ( G_OBJECT ( page ), "tree_view", tree_view );
+    g_object_set_data ( G_OBJECT ( tree_view ), "label_title", label_title );
+
+    /* on y ajoute la barre d'outils */
+    toolbar = bet_finance_create_amortization_toolbar ( page, tree_view );
+    gtk_box_pack_start ( GTK_BOX ( page ), toolbar, FALSE, FALSE, 0 );
+    gtk_box_reorder_child ( GTK_BOX ( page ), toolbar, 0 );
 
     gtk_widget_show_all ( page );
 
@@ -1109,6 +1164,8 @@ GtkWidget *bet_finance_create_amortization_tree_view ( GtkWidget *container, gin
                         "text", BET_AMORTIZATION_DATE_COLUMN,
                         "cell-background-gdk", BET_AMORTIZATION_BACKGROUND_COLOR,
                         NULL);
+        g_object_set_data ( G_OBJECT ( column ), "num_col_model",
+                        GINT_TO_POINTER ( BET_AMORTIZATION_DATE_COLUMN ) );
     }
     else
     {
@@ -1119,6 +1176,8 @@ GtkWidget *bet_finance_create_amortization_tree_view ( GtkWidget *container, gin
                         "text", BET_AMORTIZATION_NUMBER_COLUMN,
                         "cell-background-gdk", BET_AMORTIZATION_BACKGROUND_COLOR,
                         NULL);
+        g_object_set_data ( G_OBJECT ( column ), "num_col_model",
+                        GINT_TO_POINTER ( BET_AMORTIZATION_NUMBER_COLUMN ) );
     }
 
     gtk_tree_view_append_column ( GTK_TREE_VIEW ( tree_view ),
@@ -1143,6 +1202,8 @@ GtkWidget *bet_finance_create_amortization_tree_view ( GtkWidget *container, gin
     gtk_tree_view_column_set_expand ( GTK_TREE_VIEW_COLUMN ( column ), TRUE );
     gtk_tree_view_column_set_resizable ( column, TRUE );
     gtk_tree_view_column_set_alignment ( column, 0.5 );
+    g_object_set_data ( G_OBJECT ( column ), "num_col_model",
+                        GINT_TO_POINTER ( BET_AMORTIZATION_CAPITAL_DU_COLUMN ) );
     g_free ( title );
 
     /* Interests */
@@ -1160,6 +1221,8 @@ GtkWidget *bet_finance_create_amortization_tree_view ( GtkWidget *container, gin
     gtk_tree_view_column_set_expand ( GTK_TREE_VIEW_COLUMN ( column ), TRUE );
     gtk_tree_view_column_set_resizable ( column, TRUE );
     gtk_tree_view_column_set_alignment ( column, 0.5 );
+    g_object_set_data ( G_OBJECT ( column ), "num_col_model",
+                        GINT_TO_POINTER ( BET_AMORTIZATION_INTERETS_COLUMN ) );
     g_free ( title );
 
     /* Capital repaid */
@@ -1177,6 +1240,8 @@ GtkWidget *bet_finance_create_amortization_tree_view ( GtkWidget *container, gin
     gtk_tree_view_column_set_expand ( GTK_TREE_VIEW_COLUMN ( column ), TRUE );
     gtk_tree_view_column_set_resizable ( column, TRUE );
     gtk_tree_view_column_set_alignment ( column, 0.5 );
+    g_object_set_data ( G_OBJECT ( column ), "num_col_model",
+                        GINT_TO_POINTER ( BET_AMORTIZATION_PRINCIPAL_COLUMN ) );
     g_free ( title );
 
     /* Fees*/
@@ -1194,6 +1259,8 @@ GtkWidget *bet_finance_create_amortization_tree_view ( GtkWidget *container, gin
     gtk_tree_view_column_set_expand ( GTK_TREE_VIEW_COLUMN ( column ), TRUE );
     gtk_tree_view_column_set_resizable ( column, TRUE );
     gtk_tree_view_column_set_alignment ( column, 0.5 );
+    g_object_set_data ( G_OBJECT ( column ), "num_col_model",
+                        GINT_TO_POINTER ( BET_AMORTIZATION_FRAIS_COLUMN ) );
     g_free ( title );
 
     /* Monthly paid */
@@ -1211,6 +1278,8 @@ GtkWidget *bet_finance_create_amortization_tree_view ( GtkWidget *container, gin
     gtk_tree_view_column_set_expand ( GTK_TREE_VIEW_COLUMN ( column ), TRUE );
     gtk_tree_view_column_set_resizable ( column, TRUE );
     gtk_tree_view_column_set_alignment ( column, 0.5 );
+    g_object_set_data ( G_OBJECT ( column ), "num_col_model",
+                        GINT_TO_POINTER ( BET_AMORTIZATION_ECHEANCE_COLUMN ) );
     g_free ( title );
 
     if ( origin != SPP_ORIGIN_FINANCE )
@@ -1249,6 +1318,7 @@ void bet_finance_fill_amortization_array ( GtkWidget *menu_item,
     GtkTreeModel *store;
     GtkTreeModel *model;
     GtkTreeIter iter;
+    GtkTreePath *path;
     gchar *str_duree;
     gchar *str_capital;
     gchar *str_taux;
@@ -1327,8 +1397,13 @@ void bet_finance_fill_amortization_array ( GtkWidget *menu_item,
         s_amortissement -> capital_du -= s_amortissement -> principal;
     }
 
-    g_free ( s_amortissement );
     bet_finance_list_set_background_color ( tree_view, BET_AMORTIZATION_BACKGROUND_COLOR );
+    path = gtk_tree_path_new_first ( );
+    gtk_tree_view_scroll_to_cell ( GTK_TREE_VIEW ( tree_view ), path, NULL, TRUE, 0.0, 0.0 );
+    gtk_tree_selection_select_path ( gtk_tree_view_get_selection ( GTK_TREE_VIEW ( tree_view ) ), path );
+    
+    gtk_tree_path_free ( path );
+    g_free ( s_amortissement );
 }
 
 
@@ -1402,8 +1477,11 @@ GtkWidget *bet_finance_create_account_page ( void )
     GtkWidget *page;
     GtkWidget *hbox;
     GtkWidget *align;
+    GtkWidget *label_title;
     GtkWidget *label;
     GtkWidget *tree_view;
+    GtkWidget *handlebox;
+    GtkWidget *button;
 
     devel_debug (NULL);
 
@@ -1413,9 +1491,9 @@ GtkWidget *bet_finance_create_account_page ( void )
     align = gtk_alignment_new (0.5, 0.0, 0.0, 0.0);
     gtk_box_pack_start ( GTK_BOX ( page ), align, FALSE, FALSE, 5);
  
-    label = gtk_label_new ( _("Amortization Table") );
-    g_object_set_data ( G_OBJECT ( account_page ), "bet_finance_amortization_title", label );
-    gtk_container_add ( GTK_CONTAINER ( align ), label );
+    label_title = gtk_label_new ( _("Amortization Table") );
+    g_object_set_data ( G_OBJECT ( account_page ), "bet_finance_amortization_title", label_title );
+    gtk_container_add ( GTK_CONTAINER ( align ), label_title );
 
     /* Choix des données sources */
     align = gtk_alignment_new (0.5, 0.0, 0.0, 0.0);
@@ -1461,6 +1539,27 @@ GtkWidget *bet_finance_create_account_page ( void )
     /* création de la liste des données */
     tree_view = bet_finance_create_amortization_tree_view ( page, SPP_ORIGIN_FINANCE );
     g_object_set_data ( G_OBJECT ( account_page ), "bet_finance_tree_view", tree_view );
+    g_object_set_data ( G_OBJECT ( tree_view ), "label_title", label_title );
+
+
+    /* création du bouton print */
+    handlebox = gtk_handle_box_new ( );
+    hbox = gtk_hbox_new ( FALSE, 0 );
+    gtk_container_add ( GTK_CONTAINER ( handlebox ), hbox );
+
+    button = gsb_automem_stock_button_new ( etat.display_toolbar,
+                        GTK_STOCK_PRINT,
+                        _("Print"),
+                        NULL,
+                        NULL );
+    gtk_widget_set_tooltip_text ( GTK_WIDGET ( button ), _("Print the array") );
+    g_signal_connect ( G_OBJECT ( button ),
+                        "clicked",
+                        G_CALLBACK ( print_tree_view_list ),
+                        tree_view );
+    gtk_box_pack_start ( GTK_BOX ( hbox ), button, FALSE, FALSE, 5 );
+    gtk_box_pack_start ( GTK_BOX ( page ), handlebox, FALSE, FALSE, 0 );
+    gtk_box_reorder_child ( GTK_BOX ( page ), handlebox, 0 );
 
     gtk_widget_show_all ( page );
 
@@ -1480,6 +1579,7 @@ void bet_finance_ui_update_amortization_tab ( gint account_number )
     GtkWidget *label;
     GtkWidget *tree_view;
     GtkTreeModel *store;
+    GtkTreePath *path;
     gchar *tmp_str;
     gchar *tmp_str_2;
     gint index = 0;
@@ -1511,7 +1611,7 @@ void bet_finance_ui_update_amortization_tab ( gint account_number )
 
     /* met à jour le titre du tableau */
     label = g_object_get_data ( G_OBJECT ( account_page ), "bet_finance_amortization_title" );
-    tmp_str = g_strconcat ( _("Amortization Table"), " at ",
+    tmp_str = g_strconcat ( _("Amortization Table"), _(" at "),
                         gsb_format_gdate ( last_paid_date ), NULL );
     gtk_label_set_label ( GTK_LABEL ( label ), tmp_str );
     g_free ( tmp_str );
@@ -1600,6 +1700,11 @@ void bet_finance_ui_update_amortization_tab ( gint account_number )
     g_date_free ( last_paid_date );
 
     bet_finance_list_set_background_color ( tree_view, BET_AMORTIZATION_BACKGROUND_COLOR );
+    path = gtk_tree_path_new_first ( );
+    gtk_tree_view_scroll_to_cell ( GTK_TREE_VIEW ( tree_view ), path, NULL, TRUE, 0.0, 0.0 );
+    gtk_tree_selection_select_path ( gtk_tree_view_get_selection ( GTK_TREE_VIEW ( tree_view ) ), path );
+    
+    gtk_tree_path_free ( path );
 }
 
 
@@ -1628,6 +1733,130 @@ void bet_finance_ui_struct_amortization_free ( struct_amortissement *s_amortisse
  *
  *
  * */
+GtkWidget *bet_finance_create_simulator_toolbar ( GtkWidget *parent, GtkWidget *tree_view )
+{
+    GtkWidget *handlebox;
+    GtkWidget *hbox;
+    GtkWidget *button;
+    GtkTreeSelection *selection;
+
+    /* HandleBox */
+    handlebox = gtk_handle_box_new ( );
+
+    /* Hbox */
+    hbox = gtk_hbox_new ( FALSE, 0 );
+    gtk_container_add ( GTK_CONTAINER ( handlebox ), hbox );
+
+    /* création du bouton calculer */
+    button = gsb_automem_stock_button_new ( etat.display_toolbar,
+                        GTK_STOCK_EXECUTE,
+                        _("Calculate"),
+                        NULL,
+                        NULL );
+    gtk_widget_set_tooltip_text ( GTK_WIDGET ( button ), _("Calculate") );
+    g_signal_connect ( G_OBJECT ( button ),
+                        "clicked",
+                        G_CALLBACK ( bet_finance_calculer_clicked ),
+                        parent );
+    g_object_set_data ( G_OBJECT ( parent ), "calculate_button", button );
+    gtk_box_pack_start ( GTK_BOX ( hbox ), button, FALSE, FALSE, 5 );
+
+    /* création du bouton afficher le tableau d'amortissement */
+    selection = gtk_tree_view_get_selection ( GTK_TREE_VIEW ( tree_view ) );
+    button = gsb_automem_imagefile_button_new ( etat.display_toolbar,
+                        _("Amortization"),
+                        "ac_liability_16.png",
+                        NULL,
+                        NULL );
+    gtk_widget_set_tooltip_text ( GTK_WIDGET ( button ), _("View amortization table") );
+    g_signal_connect ( G_OBJECT ( button ),
+                        "clicked",
+                        G_CALLBACK ( bet_finance_fill_amortization_array ),
+                        selection );
+    gtk_widget_set_sensitive ( button, FALSE );
+    g_object_set_data ( G_OBJECT ( parent ), "amortization_button", button );
+    gtk_box_pack_start ( GTK_BOX ( hbox ), button, FALSE, FALSE, 5 );
+
+    /* création du bouton print */
+    button = gsb_automem_stock_button_new ( etat.display_toolbar,
+                        GTK_STOCK_PRINT,
+                        _("Print"),
+                        NULL,
+                        NULL );
+    gtk_widget_set_tooltip_text ( GTK_WIDGET ( button ), _("Print the array") );
+    g_signal_connect ( G_OBJECT ( button ),
+                        "clicked",
+                        G_CALLBACK ( print_tree_view_list ),
+                        tree_view );
+    gtk_widget_set_sensitive ( button, FALSE );
+    g_object_set_data ( G_OBJECT ( parent ), "print_button", button );
+    gtk_box_pack_start ( GTK_BOX ( hbox ), button, FALSE, FALSE, 5 );
+
+    gtk_widget_show_all ( handlebox );
+
+    return ( handlebox );
+
+}
+
+
+/**
+ *
+ *
+ *
+ *
+ * */
+GtkWidget *bet_finance_create_amortization_toolbar ( GtkWidget *parent, GtkWidget *tree_view )
+{
+    GtkWidget *handlebox;
+    GtkWidget *hbox;
+    GtkWidget *button;
+
+    /* HandleBox */
+    handlebox = gtk_handle_box_new ( );
+
+    /* Hbox */
+    hbox = gtk_hbox_new ( FALSE, 0 );
+    gtk_container_add ( GTK_CONTAINER ( handlebox ), hbox );
+
+    /* création du bouton afficher le simulateur de crédits */
+    button = gsb_automem_imagefile_button_new ( etat.display_toolbar,
+                        _("Credits"),
+                        "ac_liability_16.png",
+                        NULL,
+                        NULL );
+    gtk_widget_set_tooltip_text ( GTK_WIDGET ( button ), _("View credits simulator") );
+    g_signal_connect ( G_OBJECT ( button ),
+                        "clicked",
+                        G_CALLBACK ( bet_finance_switch_simulator_page ),
+                        NULL );
+    gtk_box_pack_start ( GTK_BOX ( hbox ), button, FALSE, FALSE, 5 );
+
+    /* création du bouton print */
+    button = gsb_automem_stock_button_new ( etat.display_toolbar,
+                        GTK_STOCK_PRINT,
+                        _("Print"),
+                        NULL,
+                        NULL );
+    gtk_widget_set_tooltip_text ( GTK_WIDGET ( button ), _("Print the array") );
+    g_signal_connect ( G_OBJECT ( button ),
+                        "clicked",
+                        G_CALLBACK ( print_tree_view_list ),
+                        tree_view );
+    gtk_box_pack_start ( GTK_BOX ( hbox ), button, FALSE, FALSE, 5 );
+
+    gtk_widget_show_all ( handlebox );
+
+    return ( handlebox );
+
+}
+
+
+/**
+ *
+ *
+ *
+ *
+ * */
 /* Local Variables: */
 /* c-basic-offset: 4 */
 /* End: */
diff --git a/src/gsb_data_account.c b/src/gsb_data_account.c
index 0064f9f..f2d4bbb 100644
--- a/src/gsb_data_account.c
+++ b/src/gsb_data_account.c
@@ -3021,7 +3021,7 @@ gint gsb_data_account_get_bet_months ( gint account_number )
 gboolean gsb_data_account_set_bet_months ( gint account_number, gint months )
 {
     struct_account *account;
-devel_debug_int ( months );
+
     account = gsb_data_account_get_structure ( account_number );
 
     if (!account )
diff --git a/src/print_dialog_config.c b/src/print_dialog_config.c
index 8f9c342..785b942 100644
--- a/src/print_dialog_config.c
+++ b/src/print_dialog_config.c
@@ -29,6 +29,7 @@
 
 /*START_INCLUDE*/
 #include "print_dialog_config.h"
+#include "erreur.h"
 /*END_INCLUDE*/
 
 /*START_STATIC*/
@@ -50,12 +51,15 @@ static GtkPrintSettings *settings = NULL;
  * \param custom_tab_label	Tab title for an optional custom config tab
  * \param custom_tab_callback	Callback that creates an optional config tab 
  * \param custom_apply_callback	Callback called when user validate config
+ * \param data data for callback
+ *
  */
 void print_dialog_config ( GCallback begin_callback,
-			   GCallback draw_callback,
-			   gchar * custom_tab_label,
-			   GCallback custom_tab_callback,
-			   GCallback custom_apply_callback )
+                        GCallback draw_callback,
+                        gchar *custom_tab_label,
+                        GCallback custom_tab_callback,
+                        GCallback custom_apply_callback,
+                        gpointer data )
 {
     GtkPrintOperation *print;
     GtkPrintOperationResult res;
@@ -70,12 +74,12 @@ void print_dialog_config ( GCallback begin_callback,
     if ( custom_tab_label )
 	gtk_print_operation_set_custom_tab_label ( print, custom_tab_label );
     if ( custom_tab_callback )
-	g_signal_connect (print, "create-custom-widget", custom_tab_callback, NULL);
+	g_signal_connect (print, "create-custom-widget", custom_tab_callback, data );
     if ( custom_apply_callback )
-	g_signal_connect (print, "custom-widget-apply", custom_apply_callback, NULL);
+	g_signal_connect (print, "custom-widget-apply", custom_apply_callback, data );
 
-    g_signal_connect (print, "begin_print", G_CALLBACK (begin_callback), NULL);
-    g_signal_connect (print, "draw_page", G_CALLBACK (draw_callback), NULL);
+    g_signal_connect (print, "begin_print", G_CALLBACK (begin_callback), data );
+    g_signal_connect (print, "draw_page", G_CALLBACK (draw_callback), data );
 
 
     res = gtk_print_operation_run (print, GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG,
diff --git a/src/print_dialog_config.h b/src/print_dialog_config.h
index 58cb359..b62ffe2 100644
--- a/src/print_dialog_config.h
+++ b/src/print_dialog_config.h
@@ -7,9 +7,10 @@
 
 /* START_DECLARATION */
 void print_dialog_config ( GCallback begin_callback,
-			   GCallback draw_callback,
-			   gchar * custom_tab_label,
-			   GCallback custom_tab_callback,
-			   GCallback custom_apply_callback );
+                        GCallback draw_callback,
+                        gchar * custom_tab_label,
+                        GCallback custom_tab_callback,
+                        GCallback custom_apply_callback,
+                        gpointer data );
 /* END_DECLARATION */
 #endif
diff --git a/src/print_report.c b/src/print_report.c
index db149e0..47714bf 100644
--- a/src/print_report.c
+++ b/src/print_report.c
@@ -104,7 +104,8 @@ gboolean print_report ( GtkWidget *button,
 			  G_CALLBACK (print_report_draw_page),
 			  _("Fonts"),
 			  G_CALLBACK (print_config_show_config),
-			  G_CALLBACK (print_config_show_config_apply) );
+			  G_CALLBACK (print_config_show_config_apply),
+              NULL );
     return FALSE;
 }
 
diff --git a/src/print_transactions_list.c b/src/print_transactions_list.c
index 0aabc62..ffe9cf6 100644
--- a/src/print_transactions_list.c
+++ b/src/print_transactions_list.c
@@ -45,9 +45,6 @@
 #if GTK_CHECK_VERSION(2,12,0)
 
 /*START_STATIC*/
-static gboolean print_transactions_list_apply ( GtkPrintOperation * operation,
-					 GtkWidget * widget,
-					 gpointer null );
 static gboolean print_transactions_list_begin ( GtkPrintOperation *operation,
 					 GtkPrintContext *context,
 					 gpointer null );
@@ -368,7 +365,8 @@ gboolean print_transactions_list ( GtkWidget * button,
 			  G_CALLBACK (print_transactions_list_draw_page),
 			  _("Fonts & layout"),
 			  G_CALLBACK (print_transactions_list_layout_config),
-			  G_CALLBACK (print_transactions_list_apply) );
+			  G_CALLBACK (print_transactions_list_apply),
+              NULL );
     return FALSE;
 }
 
@@ -730,7 +728,7 @@ static gint print_transactions_list_draw_columns_title ( GtkPrintContext *contex
 {
     gint column;
 
-    if (!gsb_data_print_config_get_draw_column ())
+    if (!gsb_data_print_config_get_draw_columns_name ())
 	return line_position;
 
     for (column=0 ; column<CUSTOM_MODEL_VISIBLE_COLUMNS ; column++)
diff --git a/src/print_transactions_list.h b/src/print_transactions_list.h
index f58951b..8068e85 100644
--- a/src/print_transactions_list.h
+++ b/src/print_transactions_list.h
@@ -6,7 +6,9 @@
 /* END_INCLUDE_H */
 
 /* START_DECLARATION */
-gboolean print_transactions_list ( GtkWidget * button,
-				   gpointer null );
+gboolean print_transactions_list_apply ( GtkPrintOperation * operation,
+                        GtkWidget * widget,
+                        gpointer null );
+gboolean print_transactions_list ( GtkWidget * button, gpointer null );
 /* END_DECLARATION */
 #endif
diff --git a/src/print_tree_view_list.c b/src/print_tree_view_list.c
new file mode 100644
index 0000000..1bd79f7
--- /dev/null
+++ b/src/print_tree_view_list.c
@@ -0,0 +1,985 @@
+/* ************************************************************************** */
+/*                                                                            */
+/*     Copyright (C)    2000-2008 Cédric Auger (cedric at grisbi.org)            */
+/*          2010 Pierre Biava (grisbi at pierre.biava.name)                      */
+/*          http://www.grisbi.org                                             */
+/*                                                                            */
+/*  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.                                       */
+/*                                                                            */
+/*  This 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.                              */
+/*                                                                            */
+/*  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 */
+/*                                                                            */
+/* ************************************************************************** */
+
+#include "include.h"
+#include <config.h>
+
+
+/*START_INCLUDE*/
+#include "print_tree_view_list.h"
+#include "gsb_autofunc.h"
+#include "gsb_automem.h"
+#include "gsb_data_print_config.h"
+#include "print_config.h"
+#include "print_dialog_config.h"
+#include "print_transactions_list.h"
+#include "utils.h"
+#include "utils_str.h"
+#include "erreur.h"
+/*END_INCLUDE*/
+
+
+/*START_STATIC*/
+static gboolean print_tree_view_list_begin ( GtkPrintOperation *operation,
+                        GtkPrintContext *context,
+                        gpointer data );
+static void print_tree_view_list_calculate_columns_width ( GtkTreeView *tree_view, gdouble page_width );
+static gint print_tree_view_list_draw_cell ( GtkPrintContext *context,
+                        gint line_position,
+                        gint column_position,
+                        gint column,
+                        const gchar *text );
+static gint print_tree_view_list_draw_column ( gint column_position, gint line_position );
+static gint print_tree_view_list_draw_columns_title ( GtkPrintContext *context,
+                        gint line_position,
+                        GtkTreeView *tree_view );
+static gboolean print_tree_view_list_draw_page ( GtkPrintOperation *operation,
+                        GtkPrintContext *context,
+                        gint page,
+                        gpointer data );
+static gint print_tree_view_list_draw_row ( GtkPrintContext *context,
+                        GtkTreeView *tree_view,
+                        gint line_position );
+static gint print_tree_view_list_draw_rows_data ( GtkPrintContext *context,
+                        gint line_position,
+                        GtkTreeView *tree_view,
+                        gint page );
+static gint print_tree_view_list_draw_title ( GtkPrintContext *context,
+                        gint line_position );
+static gboolean print_tree_view_list_foreach_callback ( GtkTreeModel *model,
+                        GtkTreePath *path,
+                        GtkTreeIter *iter,
+                        gpointer data );
+static gint print_tree_view_list_get_columns_title_nbre_lines ( GtkTreeView *tree_view );
+static gint print_tree_view_list_get_columns_title_size ( gint nbre_lines );
+static gint print_tree_view_list_get_title_size ( void );
+static gint print_tree_view_list_set_rows_to_print ( GtkTreeView *tree_view );
+static void print_tree_view_list_init_tree_view_data ( GtkTreeView *tree_view );
+static GtkWidget *print_tree_view_list_layout_config ( GtkPrintOperation *operation, gpointer data );
+/*END_STATIC*/
+
+/*START_EXTERN*/
+/*END_EXTERN*/
+
+#define MAX_COLS 32
+
+/*tree_view_data */
+static gint nbre_cols;
+static gint *tree_view_cols_width;
+static gint *alignment;
+static gint total_lines_to_print = 0;
+
+
+static gint lines_per_page;
+static gint lines_in_first_page;
+
+/* nb of lines already printed */
+static gint total_lines_printed;
+
+/* current row of page to print */
+static gint current_row_to_print;
+
+/* current row of model to print */
+static GtkTreePath *tree_path_to_print = NULL;
+
+/* title of page */
+static gchar *title_string;
+
+/* size and pos of the columns calculated when begin the print */
+static gdouble columns_position[MAX_COLS];
+static gint columns_width[MAX_COLS];
+static gint size_title = 0;
+static gint size_columns_title = 0;
+static gint size_row = 0;
+static gint nbre_lines_col_title;
+static cairo_t *cr = NULL;
+static gdouble page_width = 0.0;
+static gdouble page_height = 0.0;
+
+
+/**
+ *
+ *
+ *
+ *
+ * */
+gboolean print_tree_view_list ( GtkWidget *menu_item, GtkTreeView *tree_view )
+{
+    GtkWidget *label_title;
+    GtkTreeSelection *tree_selection;
+
+    devel_debug (NULL);
+    tree_selection = gtk_tree_view_get_selection ( GTK_TREE_VIEW ( tree_view ) );
+
+    if ( !gtk_tree_selection_get_selected ( GTK_TREE_SELECTION ( tree_selection ), NULL, NULL ) )
+        return FALSE;
+
+    label_title = g_object_get_data ( G_OBJECT ( tree_view ), "label_title" );
+    title_string = g_strdup ( gtk_label_get_text ( GTK_LABEL ( label_title ) ) );
+
+    print_dialog_config ( G_CALLBACK ( print_tree_view_list_begin ),
+                        G_CALLBACK ( print_tree_view_list_draw_page ),
+                        _("Fonts & layout"),
+                        G_CALLBACK ( print_tree_view_list_layout_config ),
+                        G_CALLBACK ( print_transactions_list_apply ),
+                        ( gpointer ) tree_view );
+
+    return TRUE;
+}
+
+
+/**
+ * Function called first when try to print the  list
+ * initialize the variables and calculate the number of pages
+ *
+ * \param operation	GtkPrintOperation
+ * \param context	GtkPrintContext
+ * \param null
+ *
+ * \return FALSE
+ * */
+gboolean print_tree_view_list_begin ( GtkPrintOperation *operation,
+                        GtkPrintContext *context,
+                        gpointer data )
+{
+    GtkTreeView *tree_view = ( GtkTreeView * ) data;
+    gint size_line;
+    gdouble lines_per_page_double;
+    gint nbre_pages;
+
+    devel_debug (NULL);
+
+    /* we need to calculate the number of pages */
+    cr = gtk_print_context_get_cairo_context ( context );
+
+    /* get the size of the title */
+    if ( title_string && strlen ( title_string ) )
+        size_title = print_tree_view_list_get_title_size ( );
+    else
+        size_title = 0;
+
+    /* get the size of a row */
+    size_row = pango_font_description_get_size ( gsb_data_print_config_get_font_transactions () ) / PANGO_SCALE;
+    size_line = size_row + gsb_data_print_config_get_draw_lines ( );
+
+    /* get the size of the titles of columns */
+    if ( gsb_data_print_config_get_draw_columns_name () )
+    {
+        nbre_lines_col_title = print_tree_view_list_get_columns_title_nbre_lines ( tree_view );
+        size_columns_title = print_tree_view_list_get_columns_title_size ( nbre_lines_col_title );
+    }
+    else
+        size_columns_title = 0;
+
+    /* the heigh of a page decrease size_columns_title */
+    page_height = gtk_print_context_get_height ( context );
+
+    /* get total lines to print */
+    total_lines_to_print = 0;
+    total_lines_to_print = print_tree_view_list_set_rows_to_print ( tree_view );
+
+    /* how much transactions we can show in a page : */
+    lines_per_page_double = page_height / size_line;
+    /* on enlève les lignes des titres des colonnes */
+    lines_per_page_double -= nbre_lines_col_title;
+
+    if ( !size_title ) /* no title */
+    {
+        nbre_pages = ceil ( total_lines_to_print / lines_per_page_double );
+        lines_in_first_page = floor ( lines_per_page_double );
+    }
+    else
+    {
+        gint first_page_height;
+
+        first_page_height = page_height - size_title;
+
+        lines_in_first_page = floor ( first_page_height / size_line ) - nbre_lines_col_title;
+        nbre_pages = 1 + ceil (  ( total_lines_to_print - lines_in_first_page ) /
+                                    lines_per_page_double );
+    }
+
+    /* set the number of page */
+    gtk_print_operation_set_n_pages ( GTK_PRINT_OPERATION ( operation ), nbre_pages );
+    /* save the nb of rows per page */
+    lines_per_page = floor ( lines_per_page_double );
+
+    /* calculate the size and position of the columns */
+    page_width = gtk_print_context_get_width ( context );
+    print_tree_view_list_calculate_columns_width ( tree_view, page_width );
+
+    if ( tree_path_to_print )
+        gtk_tree_path_free ( tree_path_to_print );
+    tree_path_to_print = gtk_tree_path_new_first ( );
+    total_lines_printed = 0;
+    current_row_to_print = 0;
+
+    return FALSE;
+}
+
+
+/**
+ * print the page
+ *
+ * \param operation GtkPrintOperation
+ * \param context   GtkPrintContext
+ * \param page      page to print
+ * \param null
+ *
+ * \return FALSE
+ * */
+ gboolean print_tree_view_list_draw_page ( GtkPrintOperation *operation,
+                        GtkPrintContext *context,
+                        gint page,
+                        gpointer data )
+{
+    GtkTreeView *tree_view = ( GtkTreeView * ) data;
+    gint line_position = 0;
+
+    devel_debug_int (page);
+
+    /* draw the title */
+    if ( !page && title_string && strlen ( title_string ) )
+        line_position = print_tree_view_list_draw_title ( context, line_position );
+
+    /* draw the columns titles */
+    if ( gsb_data_print_config_get_draw_columns_name () )
+        line_position = print_tree_view_list_draw_columns_title ( context, line_position, tree_view );
+
+    /* draw the transactions lines */
+    line_position = print_tree_view_list_draw_rows_data ( context, line_position, tree_view, page );
+
+    return FALSE;
+}
+
+
+/**
+ * draw a line of a model
+ *
+ * \param context           the GtkPrintContext
+ * \param line_position     the position to insert the titles
+ * \param
+ *
+ * \return the new line_position
+ * */
+static gint print_tree_view_list_draw_row ( GtkPrintContext *context,
+                        GtkTreeView *tree_view,
+                        gint line_position )
+{
+    GtkTreeModel *model;
+    GtkTreeIter iter;
+    gint column = 0;
+    GList *list_tmp;
+
+    model = gtk_tree_view_get_model ( tree_view );
+    if ( !gtk_tree_model_get_iter ( model, &iter, tree_path_to_print ) )
+        return line_position;
+    
+
+    list_tmp = gtk_tree_view_get_columns ( tree_view );
+    while ( list_tmp )
+    {
+        GtkTreeViewColumn *col;
+        gchar *text;
+        gint column_position;
+        gint col_num_model;
+        GType col_type_model;
+
+        col = list_tmp -> data;
+        col_num_model = GPOINTER_TO_INT ( g_object_get_data ( G_OBJECT ( col ), "num_col_model" ) );
+        col_type_model = gtk_tree_model_get_column_type ( model, col_num_model );
+        column_position = columns_position[column];
+
+        /* get the text */
+        if ( col_type_model == G_TYPE_STRING )
+            gtk_tree_model_get ( model, &iter, col_num_model, &text, -1 );
+        else if ( col_type_model == G_TYPE_INT )
+        {
+            gint number;
+
+            gtk_tree_model_get ( model, &iter, col_num_model, &number, -1 );
+            text = utils_str_itoa ( number );
+        }
+        else
+            text = NULL;
+
+        if ( !text )
+        {
+            /* draw first the column */
+            column_position = print_tree_view_list_draw_column ( column_position, line_position );
+
+            list_tmp  = list_tmp -> next;
+            column++;
+            continue;
+        }
+
+        print_tree_view_list_draw_cell ( context, line_position, column_position, column, text );
+        list_tmp  = list_tmp -> next;
+        column++;
+        g_free ( text );
+    }
+
+    /* go to the next row */
+    line_position = line_position + size_row;
+
+    return line_position;
+}
+
+
+/**
+ * draw a column line 
+ *
+ * \param column_position   column position
+ * \param line_position     line position
+ *
+ * \return the new column position
+ * */
+static gint print_tree_view_list_draw_column ( gint column_position, gint line_position )
+{
+    if ( !gsb_data_print_config_get_draw_column () )
+        return column_position;
+
+    cairo_move_to ( cr, column_position, line_position );
+    cairo_set_line_width ( cr, 0.5 );
+    cairo_line_to ( cr, column_position, line_position + size_row + 2*gsb_data_print_config_get_draw_lines () );
+    cairo_stroke ( cr );
+
+    /* add a space with the next column */
+    column_position++;
+
+    return column_position;
+}
+
+
+/**
+ * draw the line before the row data
+ *
+ * \param line_position     position where drawing the line
+ *
+ * \return the new line position
+ * */
+static gint print_tree_view_list_draw_line ( gint line_position )
+{
+    if ( !gsb_data_print_config_get_draw_lines () )
+        return line_position;
+
+    /* add a space with the last transaction */
+    line_position++;
+    cairo_move_to ( cr, 0, line_position );
+    cairo_set_line_width ( cr, 0.5 );
+    cairo_line_to ( cr, page_width, line_position );
+    cairo_stroke ( cr );
+
+    return line_position;
+}
+
+
+/**
+ *
+ *
+ *
+ *
+ * */
+static gint print_tree_view_list_draw_rows_data ( GtkPrintContext *context,
+                        gint line_position,
+                        GtkTreeView *tree_view,
+                        gint page )
+{
+    gint lines_to_draw;
+    devel_debug_int (line_position);
+
+    /* calcul du nombre de lignes à éditer */
+    if (page)
+        lines_to_draw = lines_per_page;
+    else
+        lines_to_draw = lines_in_first_page;
+    if ( lines_to_draw > ( total_lines_to_print - total_lines_printed ) )
+        lines_to_draw = total_lines_to_print - total_lines_printed;
+
+    while ( lines_to_draw )
+    {
+        /* begin a row : fill the line before the row */
+        line_position = print_tree_view_list_draw_line ( line_position );
+
+        /* draw the last column */
+        print_tree_view_list_draw_column ( page_width, line_position );
+
+        /* draw the row */
+        line_position = print_tree_view_list_draw_row ( context, tree_view, line_position );
+
+        gtk_tree_path_next ( tree_path_to_print );
+        lines_to_draw--;
+        total_lines_printed++;
+    }
+
+    /* draw the last line */
+    print_tree_view_list_draw_line ( line_position );
+
+    return line_position;
+}
+
+
+/**
+ * draw a cell of a model
+ *
+ * \param context           the GtkPrintContext
+ * \param line_position     the position to insert the column
+ * \param column_position   the position to insert the data
+ *
+ * \return the new column_position
+ * */
+static gint print_tree_view_list_draw_cell ( GtkPrintContext *context,
+                        gint line_position,
+                        gint column_position,
+                        gint column,
+                        const gchar *text )
+{
+    PangoLayout *layout;
+
+    /* draw first the column */
+    column_position = print_tree_view_list_draw_column ( column_position, line_position );
+
+    cairo_move_to (cr, column_position, line_position);
+
+    /* create the new layout */
+    layout = gtk_print_context_create_pango_layout (context);
+    pango_layout_set_text ( layout, text, -1 );
+    pango_layout_set_font_description ( layout, gsb_data_print_config_get_font_transactions () );
+    pango_layout_set_width ( layout,columns_width[column] );
+    pango_layout_set_alignment ( layout, alignment[column] );
+    pango_layout_set_ellipsize ( layout, PANGO_ELLIPSIZE_END );
+
+    pango_cairo_show_layout ( cr, layout );
+    g_object_unref ( layout );
+
+    return column_position;
+}
+
+
+/**
+ * draw the title of the columns
+ *
+ * \param context           the GtkPrintContext
+ * \param line_position     the position to insert the titles
+ * 
+ * \return the new line_position to continue to fill the page
+ * */
+static gint print_tree_view_list_draw_columns_title ( GtkPrintContext *context,
+                        gint line_position,
+                        GtkTreeView *tree_view )
+{
+    GList *list;
+    GList *list_tmp;
+    gint column = 0;
+    gint column_position;
+
+    devel_debug_int ( line_position );
+
+    if ( !gsb_data_print_config_get_draw_columns_name () )
+        return line_position;
+
+    /* begin a row : fill the line before the row */
+    line_position = print_tree_view_list_draw_line ( line_position );
+
+    list = gtk_tree_view_get_columns ( tree_view );
+
+    if ( nbre_lines_col_title == 1 )
+    {
+        /* draw the last column */
+        print_tree_view_list_draw_column ( page_width, line_position );
+        list_tmp = list;
+
+        while ( list_tmp )
+        {
+            GtkTreeViewColumn *col;
+            const gchar *text;
+
+            col = ( GtkTreeViewColumn * ) list_tmp -> data;
+            column_position = columns_position[column];
+
+            /* get the text */
+            text = gtk_tree_view_column_get_title ( col );
+            if (!text)
+            {
+                list_tmp  = list_tmp -> next;
+                column++;
+                continue;
+            }
+
+            print_tree_view_list_draw_cell ( context, line_position, column_position, column, text );
+
+            list_tmp  = list_tmp -> next;
+            column++;
+        }
+        line_position = line_position + size_columns_title;
+    }
+    else
+    {
+        gchar **tab;
+        gchar *str_tmp;
+        gint i = 0;
+
+        for ( i = 0; i < nbre_lines_col_title; i ++ )
+        {
+            /* draw the last column */
+            print_tree_view_list_draw_column ( page_width, line_position );
+            list_tmp = list;
+
+            while ( list_tmp )
+            {
+                GtkTreeViewColumn *col;
+                const gchar *text;
+
+                col = ( GtkTreeViewColumn * ) list_tmp -> data;
+                column_position = columns_position[column];
+
+                /* get the text */
+                text = gtk_tree_view_column_get_title ( col );
+
+                if ( text == NULL || strlen ( text ) == 0 )
+                {
+                    print_tree_view_list_draw_column ( column_position, line_position );
+                    list_tmp  = list_tmp -> next;
+                    column++;
+                    continue;
+                }
+
+                str_tmp = gsb_string_uniform_new_line ( text, strlen ( text ) );
+                if ( str_tmp == NULL )
+                {
+                    if ( i == 0 )
+                        print_tree_view_list_draw_cell ( context, line_position, column_position, column, text );
+                    else
+                        print_tree_view_list_draw_column ( column_position, line_position );
+                    list_tmp  = list_tmp -> next;
+                    column++;
+                    continue;
+                }
+
+                tab = g_strsplit ( str_tmp, "\n", 0 );
+
+                if ( tab[i] && strlen ( tab[i] ) )
+                    print_tree_view_list_draw_cell ( context, line_position, column_position, column, tab[i] );
+                else
+                    print_tree_view_list_draw_column ( column_position, line_position );
+
+                list_tmp  = list_tmp -> next;
+                column++;
+                g_strfreev ( tab );
+                g_free ( str_tmp );
+            }
+            line_position = line_position + size_row + gsb_data_print_config_get_draw_lines ( );
+            column = 0;
+        }
+    }
+
+    return line_position;
+}
+
+
+/**
+ * draw the title if asked
+ *
+ * \param context           the GtkPrintContext
+ * \param line_position     the position to insert the title
+ * \param page_width        the page width
+ *
+ * \return the new line_position to continue to fill the page
+ * */
+static gint print_tree_view_list_draw_title ( GtkPrintContext *context,
+                        gint line_position )
+{
+    if ( title_string && strlen ( title_string ) )
+    {
+        PangoLayout *layout;
+        devel_debug_int (line_position);
+
+        cairo_move_to ( cr, 0, line_position );
+
+        /* create the new layout */
+        layout = gtk_print_context_create_pango_layout ( context );
+
+        pango_layout_set_text ( layout, title_string, -1 );
+        pango_layout_set_font_description ( layout, gsb_data_print_config_get_font_title () );
+        pango_layout_set_width ( layout, page_width * PANGO_SCALE );
+        pango_layout_set_alignment ( layout, PANGO_ALIGN_CENTER );
+        pango_layout_set_ellipsize ( layout, PANGO_ELLIPSIZE_END );
+        pango_cairo_show_layout ( cr, layout );
+        g_object_unref ( layout );
+
+        /* add title line and blank line */
+        line_position = line_position + size_title;
+    }
+
+    return line_position;
+}
+
+
+/**
+ *
+ *
+ *
+ *
+ * */
+void print_tree_view_list_calculate_columns_width ( GtkTreeView *tree_view, gdouble page_width )
+{
+    gint total_text_width = 0;
+    gint column;
+
+    print_tree_view_list_init_tree_view_data ( tree_view );
+    columns_position[0] = 0.0;
+
+    for ( column = 1 ; column < nbre_cols ; column++ )
+        columns_position[column] = (gdouble) ( tree_view_cols_width[column - 1]* page_width / 100 ) +
+                        columns_position[column - 1];
+
+    /* set the page_width of the columns */
+    for (column = 0 ; column < ( nbre_cols  - 1 ); column++ )
+    {
+        columns_width[column] = ( columns_position[column + 1] - columns_position[column] - 
+                                    3 * gsb_data_print_config_get_draw_column () ) * PANGO_SCALE;
+
+        total_text_width = total_text_width + columns_width[column];
+    }
+
+    /* last column is the rest of the line */
+    columns_width[nbre_cols - 1] = ( page_width -3 * gsb_data_print_config_get_draw_column () * (nbre_cols) ) *
+                                    PANGO_SCALE - total_text_width;
+}
+
+
+
+/**
+ *
+ *
+ *
+ *
+ * */
+void print_tree_view_list_init_tree_view_data ( GtkTreeView *tree_view )
+{
+    GList *list;
+    GList *list_tmp;
+    gint col_width = 0;
+    gint i = 0;
+
+    devel_debug (NULL);
+
+    /* get the number of columns */
+    list = gtk_tree_view_get_columns ( tree_view );
+    nbre_cols = g_list_length ( list );
+
+    tree_view_cols_width = g_malloc0 ( nbre_cols * sizeof ( gint ) );
+    alignment = g_malloc0 ( nbre_cols * sizeof ( gint ) );
+
+    list_tmp = list;
+    while ( list_tmp )
+    {
+        GtkTreeViewColumn *col;
+
+        col = list_tmp -> data;
+        col_width += gtk_tree_view_column_get_width ( col );
+
+        list_tmp  = list_tmp -> next;
+    }
+    
+    list_tmp = list;
+    while ( list_tmp )
+    {
+        GtkTreeViewColumn *col;
+        gfloat number;
+
+        col = ( GtkTreeViewColumn * ) list_tmp -> data;
+        tree_view_cols_width[i] = ( gtk_tree_view_column_get_width ( col ) * 100 ) / col_width + 1;
+
+        number = gtk_tree_view_column_get_alignment ( col );
+        if ( number == 0.0 )
+            alignment[i] = PANGO_ALIGN_LEFT;
+        else if ( number == 1.0 )
+            alignment[i] = PANGO_ALIGN_RIGHT;
+        else
+            alignment[i] = PANGO_ALIGN_CENTER;
+
+        list_tmp  = list_tmp -> next;
+        i++;
+    }
+
+    g_list_free ( list );
+}
+
+
+/**
+ *
+ *
+ *
+ *
+ * */
+static gint print_tree_view_list_set_rows_to_print ( GtkTreeView *tree_view )
+{
+    GtkTreeModel *model;
+    gint nbre_lines;
+
+    nbre_lines = 0;
+    model = gtk_tree_view_get_model ( tree_view );
+    gtk_tree_model_foreach ( model,
+                        ( GtkTreeModelForeachFunc ) print_tree_view_list_foreach_callback,
+                        &nbre_lines );
+
+    return nbre_lines;
+}
+
+
+/**
+ *
+ *
+ *
+ *
+ * */
+static gboolean print_tree_view_list_foreach_callback ( GtkTreeModel *model,
+                        GtkTreePath *path,
+                        GtkTreeIter *iter,
+                        gpointer data )
+{
+    gint *number = (gint *) data;
+
+    *number = *number + 1;
+
+    return FALSE;
+}
+
+
+/**
+ *
+ *
+ *
+ *
+ * */
+static gint print_tree_view_list_get_title_size ( void )
+{
+    gint size_tmp = 0;
+    gint size_line;
+    gint nbre_lines = 1;
+
+    if ( g_utf8_strchr ( title_string, -1, '\n' ) )
+        nbre_lines = utils_str_get_nbre_motifs ( title_string, "\n" ) + 1;
+
+    /* Add a blank line */
+    nbre_lines++;
+
+    size_line = pango_font_description_get_size ( gsb_data_print_config_get_font_title () );
+    
+    size_tmp =  size_line * nbre_lines / PANGO_SCALE;
+
+    return size_tmp;
+}
+
+
+/**
+ *
+ *
+ *
+ *
+ * */
+static gint print_tree_view_list_get_columns_title_size ( gint nbre_lines )
+{
+    gint size_tmp = 0;
+
+    devel_debug_int(nbre_lines);
+    
+    size_tmp =  size_row * nbre_lines + gsb_data_print_config_get_draw_lines ( );
+
+    return size_tmp;
+}
+
+
+/**
+ *
+ *
+ *
+ *
+ * */
+static gint print_tree_view_list_get_columns_title_nbre_lines ( GtkTreeView *tree_view )
+{
+    GList *list_tmp;
+    gint nbre_lines = 0;
+
+    list_tmp = gtk_tree_view_get_columns ( tree_view );
+    while ( list_tmp )
+    {
+        GtkTreeViewColumn *col;
+        const gchar *text;
+        gint nbre_motifs = 0;
+
+        col = ( GtkTreeViewColumn * ) list_tmp -> data;
+
+        /* get the text */
+        text = gtk_tree_view_column_get_title ( col );
+        if ( text == NULL || strlen ( text ) == 0 )
+        {
+            list_tmp  = list_tmp -> next;
+            continue;
+        }
+
+        if ( g_utf8_strchr ( text, -1, '\n' ) )
+        {
+            nbre_motifs = utils_str_get_nbre_motifs ( text, "\n" );
+            if ( nbre_motifs > nbre_lines )
+                nbre_lines = nbre_motifs;
+        }
+
+        list_tmp  = list_tmp -> next;
+    }
+    nbre_lines++;
+
+    return nbre_lines;
+}
+
+
+/**
+ * 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_tree_view_list_layout_config ( GtkPrintOperation *operation, gpointer data )
+{
+    GtkWidget *check_button;
+    GtkWidget *label;
+    GtkWidget *hbox;
+    GtkWidget *entry;
+    GtkWidget *font_button_transactions;
+    GtkWidget *font_button_title;
+    gchar *fontname_transactions;
+    gchar *fontname_title;
+    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, 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 );
+
+    /* 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 ( _("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));
+
+    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;
+}
+
+
+/**
+ *
+ *
+ *
+ *
+ * */
+/* Local Variables: */
+/* c-basic-offset: 4 */
+/* End: */
+
diff --git a/src/print_tree_view_list.h b/src/print_tree_view_list.h
new file mode 100644
index 0000000..d06c18d
--- /dev/null
+++ b/src/print_tree_view_list.h
@@ -0,0 +1,18 @@
+#ifndef _PRINT_TREE_VIEW_LIST_H
+#define _PRINT_TREE_VIEW_LIST_H
+
+#include <gtk/gtk.h>
+
+/* START_INCLUDE_H */
+/* END_INCLUDE_H */
+
+
+
+/* START_DECLARATION */
+gboolean print_tree_view_list ( GtkWidget *menu_item, GtkTreeView *tree_view );
+
+/* END_DECLARATION */
+
+
+#endif /*_PRINT_TREE_VIEW_LIST_H */
+
diff --git a/src/utils_str.c b/src/utils_str.c
index b9ae115..0fe58f1 100644
--- a/src/utils_str.c
+++ b/src/utils_str.c
@@ -853,9 +853,15 @@ gboolean gsb_string_is_trouve ( const gchar *payee_name, const gchar *needle )
         if ( tab_str[i] && strlen (tab_str[i]) > 0)
         {
             if ( g_strstr_len (payee_name, -1, tab_str[i]))
+            {
+                g_strfreev ( tab_str );
                 return TRUE;
+            }
         }
     }
+
+    g_strfreev ( tab_str );
+
     return FALSE;
 }
 
@@ -938,6 +944,9 @@ gchar *gsb_string_uniform_new_line ( const gchar *chaine, gint nbre_char )
 {
     gchar **tab_str;
 
+    if ( chaine == NULL )
+        return NULL;
+
     if ( g_strstr_len ( chaine, nbre_char, "\r\n" ) )
     {
         tab_str = g_strsplit_set ( chaine, "\r", 0 );
@@ -985,6 +994,25 @@ gchar *utils_str_dtostr ( gdouble number, gint nbre_decimal, gboolean canonical
 }
 
 
+/**
+ *
+ *
+ *
+ *
+ * */
+gint utils_str_get_nbre_motifs ( const gchar *chaine, const gchar *motif )
+{
+    gchar **tab_str;
+    gint nbre_motifs = 0;
+
+    tab_str = g_strsplit ( chaine, motif, 0 );
+    nbre_motifs = g_strv_length ( tab_str ) -1;
+    g_strfreev ( tab_str );
+
+    return nbre_motifs;
+}
+
+
 /* Local Variables: */
 /* c-basic-offset: 4 */
 /* End: */
diff --git a/src/utils_str.h b/src/utils_str.h
index 50bc524..8a951fa 100644
--- a/src/utils_str.h
+++ b/src/utils_str.h
@@ -38,6 +38,7 @@ gint my_strncasecmp ( gchar *string_1,
                         gint longueur );
 double my_strtod ( const gchar *nptr, gchar **endptr );
 G_MODULE_EXPORT gint utils_str_atoi ( const gchar *chaine );
+gint utils_str_get_nbre_motifs ( const gchar *chaine, const gchar *motif );
 gchar *utils_str_itoa ( gint integer );
 gchar *utils_str_dtostr ( gdouble number, gint nbre_decimal, gboolean canonical );
 gchar *utils_str_localise_decimal_point_from_string ( const gchar *string );
diff --git a/win32-msvc/CMakeLists.txt b/win32-msvc/CMakeLists.txt
index cd47574..275d08e 100644
--- a/win32-msvc/CMakeLists.txt
+++ b/win32-msvc/CMakeLists.txt
@@ -338,6 +338,8 @@ SET (grisbi_source
 	../src/print_report.h
 	../src/print_transactions_list.c
 	../src/print_transactions_list.h
+	../src/print_tree_view_list.c
+	../src/print_tree_view_list.h
 	../src/qif.c
 	../src/qif.h
 	../src/tiers_onglet.c


hooks/post-receive
-- 
grisbi


More information about the cvs mailing list